From b1c3cf504557d8cf17f080eb4db0707630949730 Mon Sep 17 00:00:00 2001 From: justin Date: Sat, 31 May 2025 08:56:20 +0100 Subject: [PATCH] Cleanup --- src/Dodge/Creature/Impulse.hs | 4 +- src/Dodge/Creature/Impulse/Movement.hs | 53 +++++++++----------------- 2 files changed, 20 insertions(+), 37 deletions(-) diff --git a/src/Dodge/Creature/Impulse.hs b/src/Dodge/Creature/Impulse.hs index 057fa6b8e..08fc9e882 100644 --- a/src/Dodge/Creature/Impulse.hs +++ b/src/Dodge/Creature/Impulse.hs @@ -43,7 +43,7 @@ followImpulse cr w imp = case imp of Bark sid -> (soundStart (CrMouth cid) cpos sid Nothing, resetCrVocCoolDown w cr) Move p -> crup $ crMvBy p cr MoveForward x -> crup $ crMvForward x cr - Turn a -> crup $ creatureTurn a cr + Turn a -> crup $ cr & crDir +~ a TurnToward p a -> crup $ creatureTurnToward p a cr TurnTo p -> crup $ creatureTurnTo p cr ChangePosture post -> crup $ cr & crStance . posture .~ post @@ -55,7 +55,7 @@ followImpulse cr w imp = case imp of ( hitCr cid' , crMvAbsolute (10 *.* normalizeV (posFromID cid' -.- cpos)) $ cr & crMeleeCooldown .~ 20 ) - RandomTurn a -> (randGen .~ snd (rr a), creatureTurn (fst $ rr a) cr) + RandomTurn a -> (randGen .~ snd (rr a), cr & crDir +~ (fst $ rr a)) MakeSound sid -> (soundStart (CrSound (_crID cr)) (_crPos cr) sid Nothing, cr) DropItem -> undefined ChangeStrategy strat -> crup $ cr & crActionPlan . apStrategy .~ strat diff --git a/src/Dodge/Creature/Impulse/Movement.hs b/src/Dodge/Creature/Impulse/Movement.hs index 12300081f..1afcd6935 100644 --- a/src/Dodge/Creature/Impulse/Movement.hs +++ b/src/Dodge/Creature/Impulse/Movement.hs @@ -1,7 +1,14 @@ -module Dodge.Creature.Impulse.Movement where +module Dodge.Creature.Impulse.Movement ( + creatureTurnToward, + creatureTurnTowardDir, + crMvAbsolute, + crMvBy, + crMvForward, + creatureTurnTo, +) where -import Dodge.Base import Control.Lens +import Dodge.Base import Dodge.Creature.Statistics import Dodge.Data.World import Geometry @@ -17,14 +24,10 @@ crMvBy :: Creature crMvBy p cr = crMvAbsolute (rotateV (_crDir cr) p) cr -crMvAbsolute :: - -- | Movement translation vector - Point2 -> - Creature -> - Creature +crMvAbsolute :: Point2 -> Creature -> Creature crMvAbsolute p' cr = advanceStepCounter (magV p) cr - & crPos %~ (+.+ p) + & crPos +~ p & crMvDir .~ argV p where p = strengthFactor (getCrMoveSpeed cr) *.* p' @@ -35,18 +38,10 @@ strengthFactor i | i < 1 = 0 | otherwise = 0.02 * fromIntegral i -crMvForward :: - -- | Speed - Float -> - Creature -> - Creature +crMvForward :: Float -> Creature -> Creature crMvForward speed = crMvBy (V2 speed 0) -advanceStepCounter :: - -- | Speed - Float -> - Creature -> - Creature +advanceStepCounter :: Float -> Creature -> Creature advanceStepCounter speed = crStance . carriage %~ f where f car = case car of @@ -54,9 +49,6 @@ advanceStepCounter speed = crStance . carriage %~ f Walking i ff -> Walking (i + ceiling speed) ff _ -> car -creatureTurn :: Float -> Creature -> Creature -creatureTurn a = crDir +~ a - creatureTurnTo :: Point2 -> Creature -> Creature creatureTurnTo p cr | vToTarg == V2 0 0 = cr -- this should deal with the angleVV error @@ -67,34 +59,25 @@ creatureTurnTo p cr -- the following is perhaps not ideal because it mixes normalizeAngle with -- angleVV, but it seems to work -creatureTurnTowardDir :: - -- | Angle - Float -> - -- | Turn speed - Float -> - Creature -> - Creature +creatureTurnTowardDir :: Float -> Float -> Creature -> Creature creatureTurnTowardDir a turnSpeed cr | abs (normalizeAnglePi (a - cdir)) <= turnSpeed = cr & crDir .~ dirToTarget | otherwise = cr & crDir %~ addOrSub turnSpeed where - addOrSub | isLeftOfA dirToTarget cdir = (+) + addOrSub + | isLeftOfA dirToTarget cdir = (+) | otherwise = subtract cdir = _crDir cr dirToTarget = argV $ rotateV a (V2 1 0) - creatureTurnToward :: Point2 -> Float -> Creature -> Creature creatureTurnToward p turnSpeed cr | vToTarg == V2 0 0 = cr -- this should deal with the angleVV error - | errorAngleVV 3 vToTarg (unitVectorAtAngle (_crDir cr)) <= turnSpeed = +-- | errorAngleVV 3 vToTarg (unitVectorAtAngle (_crDir cr)) <= turnSpeed = + | angleVV vToTarg (unitVectorAtAngle (_crDir cr)) <= turnSpeed = cr & crDir .~ dirToTarget | isLeftOfA (normalizeAngle dirToTarget) (normalizeAngle $ _crDir cr) = cr & crDir +~ turnSpeed | otherwise = cr & crDir -~ turnSpeed where vToTarg = p -.- _crPos cr dirToTarget = argV vToTarg - --- | Speed modifier of an item when not aiming. -equipSpeed :: Item -> Float -equipSpeed _ = 1