Fix enemy stride/footsteps
This commit is contained in:
@@ -5,7 +5,7 @@ module Dodge.Creature.ChaseCrit (
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
--import Dodge.Data.Equipment.Misc
|
--import Dodge.Data.Equipment.Misc
|
||||||
--import Control.Lens
|
import Control.Lens
|
||||||
import Dodge.Data.Creature
|
import Dodge.Data.Creature
|
||||||
import Dodge.Default
|
import Dodge.Default
|
||||||
--import Dodge.Item.Equipment
|
--import Dodge.Item.Equipment
|
||||||
@@ -27,12 +27,11 @@ invisibleChaseCrit =
|
|||||||
chaseCrit :: Creature
|
chaseCrit :: Creature
|
||||||
chaseCrit =
|
chaseCrit =
|
||||||
defaultCreature
|
defaultCreature
|
||||||
{ _crName = "chaseCrit"
|
& crName .~ "chaseCrit"
|
||||||
, _crHP = HP 150
|
& crHP .~ HP 150
|
||||||
, _crInv = mempty
|
& crFaction .~ ColorFaction green
|
||||||
, _crFaction = ColorFaction green
|
& crVocalization .~ chaseCritVocalization
|
||||||
, _crVocalization = chaseCritVocalization
|
& crStance . strideLength .~ 30
|
||||||
}
|
|
||||||
|
|
||||||
chaseCritVocalization :: Vocalization
|
chaseCritVocalization :: Vocalization
|
||||||
chaseCritVocalization = Vocalization (50, 200) 0
|
chaseCritVocalization = Vocalization (50, 200) 0
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ followImpulse cr w imp = case imp of
|
|||||||
Bark sid -> (soundStart (CrMouth cid) cpos sid Nothing, resetCrVocCoolDown w cr)
|
Bark sid -> (soundStart (CrMouth cid) cpos sid Nothing, resetCrVocCoolDown w cr)
|
||||||
Move p -> crup $ crMvBy p (w ^. cWorld . lWorld) cr
|
Move p -> crup $ crMvBy p (w ^. cWorld . lWorld) cr
|
||||||
MoveForward x -> crup $ crMvForward x (w ^. cWorld . lWorld) cr
|
MoveForward x -> crup $ crMvForward x (w ^. cWorld . lWorld) cr
|
||||||
|
MoveNoStride p -> crup $ crMvByNoStride p (w ^. cWorld . lWorld) cr
|
||||||
Turn a -> crup $ cr & crDir +~ a
|
Turn a -> crup $ cr & crDir +~ a
|
||||||
TurnToward p a -> crup $ creatureTurnToward p a cr
|
TurnToward p a -> crup $ creatureTurnToward p a cr
|
||||||
TurnTo p -> crup $ creatureTurnTo p cr
|
TurnTo p -> crup $ creatureTurnTo p cr
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ module Dodge.Creature.Impulse.Movement (
|
|||||||
creatureTurnTowardDir,
|
creatureTurnTowardDir,
|
||||||
crMvAbsolute,
|
crMvAbsolute,
|
||||||
crMvBy,
|
crMvBy,
|
||||||
|
crMvByNoStride,
|
||||||
crMvForward,
|
crMvForward,
|
||||||
creatureTurnTo,
|
creatureTurnTo,
|
||||||
) where
|
) where
|
||||||
@@ -26,6 +27,14 @@ crMvBy ::
|
|||||||
Creature
|
Creature
|
||||||
crMvBy p lw cr = crMvAbsolute lw (rotateV (_crDir cr) p) cr
|
crMvBy p lw cr = crMvAbsolute lw (rotateV (_crDir cr) p) cr
|
||||||
|
|
||||||
|
crMvByNoStride ::
|
||||||
|
-- | Movement translation vector, will be made relative to creature direction
|
||||||
|
Point2 ->
|
||||||
|
LWorld ->
|
||||||
|
Creature ->
|
||||||
|
Creature
|
||||||
|
crMvByNoStride p lw cr = crMvAbsoluteNoStride lw (rotateV (_crDir cr) p) cr
|
||||||
|
|
||||||
crMvAbsolute :: LWorld -> Point2 -> Creature -> Creature
|
crMvAbsolute :: LWorld -> Point2 -> Creature -> Creature
|
||||||
crMvAbsolute lw p' cr =
|
crMvAbsolute lw p' cr =
|
||||||
advanceStepCounter (magV p) cr
|
advanceStepCounter (magV p) cr
|
||||||
@@ -34,6 +43,11 @@ crMvAbsolute lw p' cr =
|
|||||||
where
|
where
|
||||||
p = strengthFactor (getCrMoveSpeed lw cr) *.* p'
|
p = strengthFactor (getCrMoveSpeed lw cr) *.* p'
|
||||||
|
|
||||||
|
crMvAbsoluteNoStride :: LWorld -> Point2 -> Creature -> Creature
|
||||||
|
crMvAbsoluteNoStride lw p' cr = cr & crPos . _xy +~ p
|
||||||
|
where
|
||||||
|
p = strengthFactor (getCrMoveSpeed lw cr) *.* p'
|
||||||
|
|
||||||
strengthFactor :: Int -> Float
|
strengthFactor :: Int -> Float
|
||||||
strengthFactor i
|
strengthFactor i
|
||||||
| i > 50 = 1
|
| i > 50 = 1
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import Sound.Data
|
|||||||
|
|
||||||
updateWalkCycle :: Int -> World -> World
|
updateWalkCycle :: Int -> World -> World
|
||||||
updateWalkCycle cid w
|
updateWalkCycle cid w
|
||||||
| Just cr <- w ^? cWorld . lWorld . creatures . ix 0
|
| Just cr <- w ^? cWorld . lWorld . creatures . ix cid
|
||||||
, Walking x ff <- cr ^. crStance . carriage
|
, Walking x ff <- cr ^. crStance . carriage
|
||||||
, x >= cr ^. crStance . strideLength =
|
, x >= cr ^. crStance . strideLength =
|
||||||
w
|
w
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ updateCreature' cr =
|
|||||||
LampCrit{} -> updateLampoid cr
|
LampCrit{} -> updateLampoid cr
|
||||||
BarrelCrit bt -> updateBarreloid bt cr
|
BarrelCrit bt -> updateBarreloid bt cr
|
||||||
AvatarDead -> id
|
AvatarDead -> id
|
||||||
|
ChaseCrit {} -> crUpdate updateHumanoid cr
|
||||||
_ -> crUpdate updateHumanoid cr
|
_ -> crUpdate updateHumanoid cr
|
||||||
|
|
||||||
{- | this seems to work, but I am not sure about the ordering:
|
{- | this seems to work, but I am not sure about the ordering:
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ data ActionPlan
|
|||||||
data Impulse
|
data Impulse
|
||||||
= Move Point2
|
= Move Point2
|
||||||
| MoveForward Float
|
| MoveForward Float
|
||||||
|
| MoveNoStride Point2
|
||||||
| Turn Float
|
| Turn Float
|
||||||
| RandomTurn Float
|
| RandomTurn Float
|
||||||
| RandomImpulse RandImpulse -- (State StdGen Impulse)
|
| RandomImpulse RandImpulse -- (State StdGen Impulse)
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ defaultAimingCrit :: Creature
|
|||||||
defaultAimingCrit = defaultCreature
|
defaultAimingCrit = defaultCreature
|
||||||
|
|
||||||
yourDefaultStrideLength :: Float
|
yourDefaultStrideLength :: Float
|
||||||
yourDefaultStrideLength = 40
|
yourDefaultStrideLength = 35
|
||||||
|
|
||||||
--defaultState :: CreatureState
|
--defaultState :: CreatureState
|
||||||
--defaultState =
|
--defaultState =
|
||||||
|
|||||||
+2
-20
@@ -179,26 +179,8 @@ updateHumanoid cr = case cr ^?! crType of
|
|||||||
-- , WaitThen 1 $ (DoImpulses [ChangeStrategy WatchAndWait])
|
-- , WaitThen 1 $ (DoImpulses [ChangeStrategy WatchAndWait])
|
||||||
-- ]
|
-- ]
|
||||||
|
|
||||||
humanoidAIList ::
|
humanoidAIList :: [World -> Creature -> Creature] -> Creature -> World -> World
|
||||||
[World -> Creature -> Creature] ->
|
humanoidAIList = impulsiveAIBefore . chainCreatureUpdates
|
||||||
Creature ->
|
|
||||||
World ->
|
|
||||||
World
|
|
||||||
humanoidAIList
|
|
||||||
= impulsiveAIBefore . chainCreatureUpdates
|
|
||||||
|
|
||||||
---- bit of a hack to get new random generators after each creature's update
|
|
||||||
--defaultImpulsive ::
|
|
||||||
-- [World -> Creature -> Creature] ->
|
|
||||||
-- Creature ->
|
|
||||||
-- World ->
|
|
||||||
-- World
|
|
||||||
--defaultImpulsive
|
|
||||||
-- = fmap (fmap updateRandGen) . crUpdate . impulsiveAIBefore . chainCreatureUpdates
|
|
||||||
-- where
|
|
||||||
-- updateRandGen w =
|
|
||||||
-- let (_, g) = randomR (0, 1 :: Int) (_randGen w)
|
|
||||||
-- in w & randGen .~ g
|
|
||||||
|
|
||||||
chooseMovementPistol :: Creature -> World -> Action
|
chooseMovementPistol :: Creature -> World -> Action
|
||||||
chooseMovementPistol cr w =
|
chooseMovementPistol cr w =
|
||||||
|
|||||||
@@ -7,4 +7,4 @@ import RandomHelp
|
|||||||
doRandImpulse :: RandImpulse -> State StdGen Impulse
|
doRandImpulse :: RandImpulse -> State StdGen Impulse
|
||||||
doRandImpulse ri = case ri of
|
doRandImpulse ri = case ri of
|
||||||
RandImpulseList xs -> takeOne xs
|
RandImpulseList xs -> takeOne xs
|
||||||
RandImpulseCircMove r -> Move <$> randInCirc r
|
RandImpulseCircMove r -> MoveNoStride <$> randInCirc r
|
||||||
|
|||||||
@@ -399,9 +399,9 @@ critsRoom :: Int -> State LayoutVars (Tree Room)
|
|||||||
critsRoom i =
|
critsRoom i =
|
||||||
join $
|
join $
|
||||||
takeOne
|
takeOne
|
||||||
-- [ return <$> roomCCrits i
|
[ return <$> roomCCrits i
|
||||||
-- , return <$> critsPillarRoom i
|
, return <$> critsPillarRoom i
|
||||||
[ return <$> glassSwitchBackCrits i
|
, return <$> glassSwitchBackCrits i
|
||||||
]
|
]
|
||||||
|
|
||||||
-- cor <- shuffleLinks corridor
|
-- cor <- shuffleLinks corridor
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
module Dodge.Room.Tutorial where
|
module Dodge.Room.Tutorial where
|
||||||
|
|
||||||
|
--import Dodge.Room.LongDoor
|
||||||
import Dodge.Layout
|
import Dodge.Layout
|
||||||
import Dodge.Item.Held.Utility
|
import Dodge.Item.Held.Utility
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
@@ -42,6 +43,10 @@ tutAnoTree = do
|
|||||||
foldMTRS
|
foldMTRS
|
||||||
[ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
|
[ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
|
||||||
, corDoor
|
, corDoor
|
||||||
|
-- , corDoor
|
||||||
|
-- , tToBTree "t" . return . cleatOnward <$> slowDoorRoom
|
||||||
|
-- , corDoor
|
||||||
|
-- , corDoor
|
||||||
, tutHub
|
, tutHub
|
||||||
, tutLight
|
, tutLight
|
||||||
, tutDrop
|
, tutDrop
|
||||||
|
|||||||
Reference in New Issue
Block a user