49 lines
1.8 KiB
Haskell
49 lines
1.8 KiB
Haskell
module Dodge.Item.Weapon.Remote
|
|
( pointToItem
|
|
, retireRemoteProj
|
|
, setRemoteScope
|
|
, setRemoteBombScope
|
|
) where
|
|
import Dodge.Data
|
|
import Dodge.Default
|
|
import Geometry
|
|
import Dodge.Item.Location
|
|
|
|
import qualified Data.IntMap.Strict as IM
|
|
import Control.Lens
|
|
import Data.Maybe
|
|
|
|
retireRemoteProj :: (Item -> Creature -> World -> World)
|
|
-> Int -> Int -> Int -> World -> World
|
|
retireRemoteProj resetFire itid 0 pjid w = w
|
|
& pointToItem (_itemPositions w IM.! itid) %~
|
|
( (itScope . scopePos .~ V2 0 0)
|
|
. (itUse . rUse .~ resetFire)
|
|
)
|
|
& props %~ IM.delete pjid
|
|
retireRemoteProj resetFire itid t pjid w = setScope w
|
|
& props . ix pjid . pjUpdate .~ (\_ -> retireRemoteProj resetFire itid (t-1) pjid)
|
|
where
|
|
setScope w' = case _itemPositions w' IM.! itid of
|
|
InInv cid invid -> w'
|
|
& creatures . ix cid . crInv . ix invid . itScope
|
|
. scopePos .~ (pos -.- _crPos (_creatures w' IM.! cid))
|
|
_ -> w'
|
|
pos = fromMaybe (V2 0 0) $ w ^? props . ix pjid . pjPos
|
|
|
|
setRemoteBombScope :: Int -> Prop -> World -> World
|
|
setRemoteBombScope itid pj w' = case _itemPositions w' IM.! itid of
|
|
InInv cid invid
|
|
-> w' & creatures . ix cid . crInv . ix invid . itScope
|
|
. scopePos .~ (_pjPos pj -.- _crPos (_creatures w' IM.! cid))
|
|
& creatures . ix cid . crInv . ix invid . itUse . useAim . aimZoom
|
|
.~ (defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5})
|
|
_ -> w'
|
|
|
|
setRemoteScope :: Int -> Prop -> World -> World
|
|
setRemoteScope itid pj w' = case w' ^? itemPositions . ix itid of
|
|
Just (InInv cid' invid )
|
|
-> w' & creatures . ix cid' . crInv . ix invid . itScope
|
|
. scopePos .~ (_pjPos pj -.- _crPos (_creatures w' IM.! cid'))
|
|
_ -> w'
|