Refactor crPos to be a V3

This commit is contained in:
2025-10-10 13:47:31 +01:00
parent 98ece551c7
commit 49fb982877
58 changed files with 375 additions and 307 deletions
+12 -8
View File
@@ -1,5 +1,6 @@
module Dodge.CreatureEffect where
import Linear
import Data.Maybe
import Dodge.Base.Collide
import Dodge.Creature.Test
@@ -28,7 +29,7 @@ doIntImp ii = case ii of
doCrImp :: CrImp -> Creature -> Impulse
doCrImp ci = case ci of
NoCrImp -> const ImpulseNothing
TurnTowardCr x -> \cr -> TurnToward (_crPos cr) x
TurnTowardCr x -> \cr -> TurnToward (cr ^. crPos . _xy) x
doP2Imp :: P2Imp -> Point2 -> Impulse
doP2Imp p2i = case p2i of
@@ -60,7 +61,8 @@ doMCrAc mca = case mca of
doCrAc :: CrAc -> Creature -> Action
doCrAc ca = case ca of
CrTurnAround -> \cr -> TurnToPoint (_crPos cr -.- 10 *.* unitVectorAtAngle (_crDir cr))
CrTurnAround -> \cr -> TurnToPoint
(cr ^. crPos . _xy -.- 10 *.* unitVectorAtAngle (_crDir cr))
CrFleeFromTarget -> fleeFromTarget
fleeFromTarget :: Creature -> Action
@@ -77,7 +79,7 @@ doMP2Ac mp2a = case mp2a of
doCrWdAc :: CrWdAc -> Creature -> World -> Action
doCrWdAc cw = case cw of
CrWdBFSThenReturn t -> \cr w -> fromMaybe NoAction $ do
n <- walkableNodeNear w (_crPos cr)
n <- walkableNodeNear w (cr ^. crPos . _xy)
let as = take 20 $ map PathTo $ bfsNodePoints n w
return $
DoReplicate t $
@@ -97,10 +99,10 @@ chooseMovementSpreadGun cr w
DoImpulses [TurnToward p 0.26, MoveForward 3]
where
d = dist cpos p
cpos = _crPos cr
cpos = cr ^. crPos . _xy
--tcr = _creatures (_cWorld w) IM.! 0
tcr = w ^?! cWorld . lWorld . creatures . ix 0
p = _crPos tcr
p = tcr ^. crPos . _xy
chooseMovementLtAuto :: Creature -> World -> Action
chooseMovementLtAuto cr w
@@ -111,13 +113,15 @@ chooseMovementLtAuto cr w
| otherwise =
DoImpulses [UseItem, TurnToward p' 0.05, Move (V2 0 3)]
where
cpos = _crPos cr
cpos = cr ^. crPos . _xy
tcr = w ^?! cWorld . lWorld . creatures . ix 0
p = _crPos tcr
p = tcr ^. crPos . _xy
v = vNormal $ p -.- cpos
p' = p +.+ 0.5 *.* (v -.- 20 *.* normalizeV v)
fleeFrom :: Creature -> Maybe Creature -> Action
fleeFrom cr mtcr = case mtcr of
Just tcr -> DoImpulses [MoveForward 3, TurnToward ((2 *.* _crPos cr) -.- _crPos tcr) (pi / 4)]
Just tcr -> DoImpulses
[MoveForward 3
, TurnToward ((2 *.* (cr ^. crPos ._xy)) -.- (tcr ^. crPos . _xy)) (pi / 4)]
Nothing -> NoAction