Delete cruft, add Reader monad to some internal ai
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
{- | Actions performed by creatures within the world
|
||||
-}
|
||||
{-# LANGUAGE BangPatterns #-}
|
||||
module Dodge.Creature.Action
|
||||
( module Dodge.Creature.Action
|
||||
, module Dodge.Creature.Action.UseItem
|
||||
@@ -36,9 +35,9 @@ crStrafeLeft
|
||||
-> Creature
|
||||
crStrafeLeft speed cr = advanceStepCounter s2 $ over crPos (+.+ p) cr
|
||||
where
|
||||
p = (*.*) s2 $ unitVectorAtAngle $ (_crDir cr + pi/2)
|
||||
p = s2 *.* unitVectorAtAngle (_crDir cr + pi/2)
|
||||
equipFactor = product $ map equipSpeed $ IM.elems $ _crInv cr
|
||||
s2 = (speed * equipFactor)
|
||||
s2 = speed * equipFactor
|
||||
|
||||
crStrafeRight
|
||||
:: Float -- ^ Speed
|
||||
@@ -46,9 +45,9 @@ crStrafeRight
|
||||
-> Creature
|
||||
crStrafeRight speed cr = advanceStepCounter s2 $ over crPos (+.+ p) cr
|
||||
where
|
||||
p = (*.*) s2 $ unitVectorAtAngle $ (_crDir cr - pi/2)
|
||||
p = s2 *.* unitVectorAtAngle (_crDir cr - pi/2)
|
||||
equipFactor = product $ map equipSpeed $ IM.elems $ _crInv cr
|
||||
s2 = (speed * equipFactor)
|
||||
s2 = speed * equipFactor
|
||||
|
||||
turnTo
|
||||
:: Point2 -- ^ Target point
|
||||
@@ -239,7 +238,7 @@ blinkAction n w
|
||||
cp = _crPos $ _creatures w IM.! n
|
||||
p2 = reflectPointWalls cp p1 $ wallsAlongLine cp p1 w
|
||||
r = 1.5 * _crRad (_creatures w IM.! n)
|
||||
p3 = fromMaybe p1 (fmap ((\p -> moveAmountToward p r cp) . fst) p2)
|
||||
p3 = maybe p1 ((\p -> moveAmountToward p r cp) . fst) p2
|
||||
|
||||
blinkShockwave
|
||||
:: Int -- ^ Blinking creature ID.
|
||||
@@ -317,7 +316,6 @@ pickUpItem cid flit w = case maybeInvSlot of
|
||||
updateItLocation invid w' = case _itID it of
|
||||
Nothing -> w'
|
||||
Just j -> w' & itemPositions . ix j .~ InInv 0 invid
|
||||
|
||||
{- | Creature attempts to moves under its own steam.
|
||||
The idea is that this may or may not work, depending on the status of the creature.
|
||||
For now, though, this cannot fail. -}
|
||||
@@ -329,25 +327,24 @@ crMvBy p' cr = advanceStepCounter (magV p) $ over crPos (+.+ p) cr
|
||||
where
|
||||
p = (*.*) (equipFactor * aimingFactor) $ rotateV (_crDir cr) p'
|
||||
equipFactor = product $ map equipSpeed $ IM.elems $ _crInv cr
|
||||
aimingFactor | (_posture $ _crStance cr) == Aiming
|
||||
= fromMaybe 1 $ it ^? itAimingSpeed
|
||||
| otherwise = 1
|
||||
aimingFactor
|
||||
| _posture (_crStance cr) == Aiming = fromMaybe 1 $ it ^? itAimingSpeed
|
||||
| otherwise = 1
|
||||
it = _crInv cr IM.! _crInvSel cr
|
||||
|
||||
crMvForward
|
||||
:: Float -- ^ Speed
|
||||
-> Creature
|
||||
-> Creature
|
||||
crMvForward speed cr = crMvBy (speed,0) cr
|
||||
|
||||
crMvForward speed = crMvBy (speed,0)
|
||||
|
||||
advanceStepCounter
|
||||
:: Float -- ^ Speed
|
||||
-> Creature
|
||||
-> Creature
|
||||
advanceStepCounter speed cr = over (crStance . carriage) f cr
|
||||
advanceStepCounter speed = crStance . carriage %~ f
|
||||
where
|
||||
f (w@Walking {}) = w {_stepToAdd = ceiling speed}
|
||||
f w@Walking{} = w{_stepToAdd = ceiling speed}
|
||||
f s = s
|
||||
|
||||
creatureTurn :: Float -> Creature -> Creature
|
||||
|
||||
Reference in New Issue
Block a user