Move targeting to dedicated datatype within item
This commit is contained in:
@@ -40,11 +40,12 @@ bezierGun = defaultGun
|
||||
-- , _itFloorPict = bezierGunSPic
|
||||
, _itAttachment = NoItAttachment
|
||||
, _itScroll = \_ _ -> removeItTarget
|
||||
, _itEffect = rbSetTarget
|
||||
-- , _itEffect = rbSetTarget
|
||||
-- , _itZoom = defaultItZoom
|
||||
, _itConsumption = defaultAmmo
|
||||
{ _ammoBaseMax = 15
|
||||
}
|
||||
, _itTargeting' = targetRBPress
|
||||
}
|
||||
shootBezier :: Point2 -> Creature -> World -> World
|
||||
shootBezier targetp cr w = w & particles .:~ aCurveBulAt
|
||||
|
||||
@@ -65,7 +65,6 @@ bangStick i = defaultGun
|
||||
]
|
||||
, _itID = Nothing
|
||||
, _itInvColor = white
|
||||
, _itTargeting = Nothing
|
||||
, _itParams = BulletShooter
|
||||
{ _muzVel = 0.8
|
||||
, _rifling = 0.8
|
||||
@@ -185,7 +184,6 @@ pistol = (bangStick 1)
|
||||
-- , _itEquipPict = pictureWeaponAim pistolPic
|
||||
, _itID = Nothing
|
||||
, _itInvColor = white
|
||||
, _itTargeting = Nothing
|
||||
, _itParams = BulletShooter
|
||||
{ _muzVel = 0.8
|
||||
, _rifling = 0.8
|
||||
|
||||
@@ -7,7 +7,8 @@ module Dodge.Item.Weapon.ExtraEffect
|
||||
itemLaserScopeEffect
|
||||
, autoSonarEffect
|
||||
, autoRadarEffect
|
||||
, rbSetTarget
|
||||
, targetRBPress
|
||||
-- , rbSetTarget
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.Base
|
||||
@@ -81,19 +82,43 @@ autoSonarEffect = ItInvEffect {_itInvEffect = f 50 ,_itEffectCounter = 0 }
|
||||
f t _ cr i w = w
|
||||
& creatures . ix (_crID cr) . crInv . ix i . itEffect . itInvEffect .~ f (t-1)
|
||||
|
||||
rbSetTarget :: ItEffect
|
||||
rbSetTarget = ItInvEffect
|
||||
{_itInvEffect = setTarg
|
||||
,_itEffectCounter = 0
|
||||
targetRBPress :: Targeting
|
||||
targetRBPress = TargetingOnHeld
|
||||
{ _tgPos = Nothing
|
||||
, _tgHeldUpdate = targetRBPressUpdate
|
||||
, _tgDraw = targetRBPressDraw
|
||||
}
|
||||
targetRBPressDraw :: Int -> Item -> Creature -> World -> Picture
|
||||
targetRBPressDraw _ it _ w' = fromMaybe mempty $ do
|
||||
mwp <- it ^? itTargeting' . tgPos . _Just
|
||||
return $ setLayer 1 $ color red $ onLayer InvLayer $ uncurryV translate mwp
|
||||
$ rotate (_cameraRot w')
|
||||
$ pictures
|
||||
[line [V2 x x, V2 (-x) (-x)]
|
||||
,line [V2 (-x) x, V2 x (-x)]
|
||||
]
|
||||
where
|
||||
setTarg :: ItEffect -> Creature -> Int -> World -> World
|
||||
setTarg _ cr invid w
|
||||
| _crInvSel cr /= invid = w
|
||||
| SDL.ButtonRight `S.member` _mouseButtons w = w
|
||||
& creatures . ix (_crID cr) . crInv . ix invid . itTargeting
|
||||
%~ maybe (Just $ targetRBMousePos w) Just
|
||||
| otherwise = w & creatures . ix (_crID cr) . crInv . ix invid . itTargeting .~ Nothing
|
||||
x = 5 / _cameraZoom w'
|
||||
|
||||
targetRBPressUpdate :: Item -> Creature -> World -> Targeting -> Targeting
|
||||
targetRBPressUpdate _ _ w t
|
||||
| SDL.ButtonRight `S.member` _mouseButtons w = t
|
||||
& tgPos %~ maybe (Just $ mouseWorldPos w) Just
|
||||
| otherwise = t & tgPos %~ const Nothing
|
||||
|
||||
--rbSetTarget :: ItEffect
|
||||
--rbSetTarget = ItInvEffect
|
||||
-- {_itInvEffect = setTarg
|
||||
-- ,_itEffectCounter = 0
|
||||
-- }
|
||||
-- where
|
||||
-- setTarg :: ItEffect -> Creature -> Int -> World -> World
|
||||
-- setTarg _ cr invid w
|
||||
-- | _crInvSel cr /= invid = w
|
||||
-- | SDL.ButtonRight `S.member` _mouseButtons w = w
|
||||
-- & creatures . ix (_crID cr) . crInv . ix invid . itTargeting
|
||||
-- %~ maybe (Just $ targetRBMousePos w) Just
|
||||
-- | otherwise = w & creatures . ix (_crID cr) . crInv . ix invid . itTargeting .~ Nothing
|
||||
|
||||
targetRBMousePos
|
||||
:: World
|
||||
|
||||
@@ -10,9 +10,9 @@ useTargetPos
|
||||
-> Creature
|
||||
-> World
|
||||
-> World
|
||||
useTargetPos f cr w = case cr ^? crInv . ix (_crInvSel cr) . itTargeting . _Just of
|
||||
useTargetPos f cr w = case cr ^? crInv . ix (_crInvSel cr) . itTargeting' . tgPos of
|
||||
Nothing -> w
|
||||
Just (g,_) -> f (g w) cr w
|
||||
Just p -> f p cr w
|
||||
|
||||
removeItTarget :: Item -> Item
|
||||
removeItTarget = itTargeting .~ Nothing
|
||||
removeItTarget = itTargeting' . tgPos .~ Nothing
|
||||
|
||||
Reference in New Issue
Block a user