Separate out concrete part of world
This commit is contained in:
@@ -66,7 +66,7 @@ performAimAt cr w tcid p = ([TurnToward tpos aimSp], Just $ AimAt tcid tpos)
|
||||
aimSp = case cr ^? crMvType . mvAimSpeed of
|
||||
Just f -> doFloatFloat f $ safeAngleVV (unitVectorAtAngle cdir) (tpos - cpos)
|
||||
Nothing -> error "creature without aiming type"
|
||||
tpos | canSee' = _crPos (_creatures w IM.! tcid)
|
||||
tpos | canSee' = _crPos (_creatures (_cWorld w) IM.! tcid)
|
||||
| otherwise = p
|
||||
|
||||
performPathTo :: Creature -> World -> Point2 -> OutAction
|
||||
@@ -159,8 +159,8 @@ blinkActionFail
|
||||
-> World
|
||||
blinkActionFail cr w = w
|
||||
& soundMultiFrom [TeleSound 0,TeleSound 1] p3 teleS Nothing
|
||||
& distortions .:~ distortionBulge
|
||||
& creatures . ix cid . crPos .~ p3
|
||||
& cWorld . distortions .:~ distortionBulge
|
||||
& cWorld . creatures . ix cid . crPos .~ p3
|
||||
& inverseShockwaveAt cpos 40 2 2
|
||||
where
|
||||
distR = 120
|
||||
@@ -176,8 +176,8 @@ blinkActionFail cr w = w
|
||||
blinkAction :: Creature -> World -> World
|
||||
blinkAction cr w = w
|
||||
& soundMultiFrom [TeleSound 0,TeleSound 1] p3 teleS Nothing
|
||||
& distortions .++~ distortionBulge
|
||||
& creatures . ix cid . crPos .~ p3
|
||||
& cWorld . distortions .++~ distortionBulge
|
||||
& cWorld . creatures . ix cid . crPos .~ p3
|
||||
& blinkShockwave cid p3
|
||||
& inverseShockwaveAt cpos 40 2 2
|
||||
where
|
||||
@@ -201,13 +201,13 @@ unsafeBlinkAction
|
||||
-> World
|
||||
unsafeBlinkAction cr w
|
||||
| success = soundMultiFrom [TeleSound 0,TeleSound 1] mwp teleS Nothing
|
||||
. over distortions (distortionBulge ++)
|
||||
. set (creatures . ix cid . crPos) mwp
|
||||
. (cWorld . distortions .++~ distortionBulge)
|
||||
. set (cWorld . creatures . ix cid . crPos) mwp
|
||||
. blinkShockwave cid mwp
|
||||
$ inverseShockwaveAt cpos 40 2 2 w
|
||||
| otherwise = w
|
||||
& blinkActionFail cr
|
||||
& creatures . ix cid . crState . csDamage .:~
|
||||
& cWorld . creatures . ix cid . crState . csDamage .:~
|
||||
Damage ENTERREMENT 10000 mwp mwp mwp NoDamageEffect
|
||||
where
|
||||
success = fromMaybe True $ do
|
||||
@@ -230,20 +230,20 @@ blinkShockwave
|
||||
blinkShockwave i p = makeShockwaveAt [i] p 60 1 2 cyan
|
||||
|
||||
setMinInvSize :: Int -> Creature -> World -> World
|
||||
setMinInvSize n cr = creatures . ix (_crID cr) . crInvCapacity .~ n
|
||||
setMinInvSize n cr = cWorld . creatures . ix (_crID cr) . crInvCapacity .~ n
|
||||
|
||||
-- maybe this should be removed...
|
||||
stripNoItems :: Creature -> World -> World
|
||||
stripNoItems cr = organiseInvKeys (_crID cr) .
|
||||
( creatures . ix (_crID cr) . crInv %~ IM.mapMaybe Just )
|
||||
( cWorld . creatures . ix (_crID cr) . crInv %~ IM.mapMaybe Just )
|
||||
|
||||
organiseInvKeys :: Int -> World -> World
|
||||
organiseInvKeys cid w = w & creatures . ix cid %~
|
||||
organiseInvKeys cid w = w & cWorld . creatures . ix cid %~
|
||||
( ( crInvSel . iselPos .~ newSelKey )
|
||||
. ( crInv .~ newInv )
|
||||
. ( crInvSel . iselAction .~ NoInvSelAction) )
|
||||
where
|
||||
cr = _creatures w IM.! cid
|
||||
cr = _creatures (_cWorld w) IM.! cid
|
||||
pairs = IM.toList (_crInv cr)
|
||||
newSelKey = fromMaybe 0 $ findIndex ( (== crSel cr) . fst) pairs
|
||||
newInv = IM.fromAscList $ zip [0..] $ map snd pairs
|
||||
@@ -291,8 +291,8 @@ sizeSelf x cr w
|
||||
-- | _crPos cr1 == _crPos cr2 = Just $ w
|
||||
| not (crOnWall cr1 w) = Just $ w
|
||||
& soundMultiFrom [TeleSound 0,TeleSound 1] cpos teleS Nothing
|
||||
& over distortions (distortionBulge :)
|
||||
& creatures . ix cid %~
|
||||
& cWorld . distortions .:~ distortionBulge
|
||||
& cWorld . creatures . ix cid %~
|
||||
( (crRad .~ 10 * x)
|
||||
. (crMvType . mvSpeed .~ yourDefaultSpeed * x)
|
||||
. (crStance . strideLength .~ ceiling (fromIntegral yourDefaultStrideLength * x))
|
||||
@@ -309,7 +309,7 @@ sizeSelf x cr w
|
||||
cpos = _crPos cr
|
||||
|
||||
pickUpItemID :: Int -> Int -> World -> World
|
||||
pickUpItemID cid flid w = pickUpItem cid (_floorItems w IM.! flid) w
|
||||
pickUpItemID cid flid w = pickUpItem cid (_floorItems (_cWorld w) IM.! flid) w
|
||||
|
||||
{- | Pick up a specific item. -}
|
||||
pickUpItem :: Int -> FloorItem -> World -> World
|
||||
|
||||
Reference in New Issue
Block a user