Add jitter when receiving damage
This commit is contained in:
@@ -61,12 +61,18 @@ applyIndividualDamage cr w dm = applyDamageEffect dm (_dmEffect dm) cr $ applyIn
|
|||||||
applyIndividualDamage' :: Creature -> World -> Damage -> World
|
applyIndividualDamage' :: Creature -> World -> Damage -> World
|
||||||
applyIndividualDamage' cr w dm = case _dmType dm of
|
applyIndividualDamage' cr w dm = case _dmType dm of
|
||||||
Piercing -> applyPiercingDamage cr dm w
|
Piercing -> applyPiercingDamage cr dm w
|
||||||
_ -> w & creatures . ix (_crID cr) . crHP -~ _dmAmount dm
|
_ -> w & damageHP cr (_dmAmount dm)
|
||||||
|
|
||||||
applyPiercingDamage :: Creature -> Damage -> World -> World
|
applyPiercingDamage :: Creature -> Damage -> World -> World
|
||||||
applyPiercingDamage cr dm
|
applyPiercingDamage cr dm
|
||||||
| crIsArmouredFrom p cr = colSpark 8 (brightX 10 1.5 orange) p1 (argV (p1 -.- p))
|
| crIsArmouredFrom p cr = colSpark 8 (brightX 10 1.5 orange) p1 (argV (p1 -.- p))
|
||||||
| otherwise = creatures . ix (_crID cr) . crHP -~ _dmAmount dm
|
| otherwise = damageHP cr $ _dmAmount dm
|
||||||
where
|
where
|
||||||
p = _dmAt dm
|
p = _dmAt dm
|
||||||
p1 = p +.+ 2 *.* squashNormalizeV (p -.- _crPos cr)
|
p1 = p +.+ 2 *.* squashNormalizeV (p -.- _crPos cr)
|
||||||
|
|
||||||
|
damageHP :: Creature -> Int -> World -> World
|
||||||
|
damageHP cr x = creatures . ix (_crID cr) %~
|
||||||
|
( (crHP -~ x)
|
||||||
|
. (crPastDamage +~ x)
|
||||||
|
)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import Dodge.Reloading
|
|||||||
|
|
||||||
import Dodge.Base
|
import Dodge.Base
|
||||||
import Dodge.Creature.State.WalkCycle
|
import Dodge.Creature.State.WalkCycle
|
||||||
|
import Dodge.Creature.Impulse.Movement
|
||||||
--import Dodge.Creature.Test
|
--import Dodge.Creature.Test
|
||||||
--import Dodge.Base
|
--import Dodge.Base
|
||||||
import Dodge.SoundLogic
|
import Dodge.SoundLogic
|
||||||
@@ -93,10 +94,25 @@ dropByState cr w = foldr (copyInvItemToFloor cr) w $ case cr ^. crState . crDrop
|
|||||||
doDamage :: Creature -> World -> World
|
doDamage :: Creature -> World -> World
|
||||||
doDamage cr w = w
|
doDamage cr w = w
|
||||||
& creatures . ix (_crID cr) . crState . crDamage .~ []
|
& creatures . ix (_crID cr) . crState . crDamage .~ []
|
||||||
|
& applyPastDamages cr
|
||||||
& _crApplyDamage cr dams cr
|
& _crApplyDamage cr dams cr
|
||||||
where
|
where
|
||||||
dams = _crDamage $ _crState cr
|
dams = _crDamage $ _crState cr
|
||||||
|
|
||||||
|
-- TODO generalise shake to arbitrary damage amounts
|
||||||
|
applyPastDamages :: Creature -> World -> World
|
||||||
|
applyPastDamages cr w
|
||||||
|
| _crPastDamage cr > 200 = let (p,g) = runState (randInCirc 3) (_randGen w)
|
||||||
|
in w & creatures . ix (_crID cr) %~ (crMvBy p . (crPastDamage -~ 100))
|
||||||
|
& randGen .~ g
|
||||||
|
| _crPastDamage cr > 20 = let (p,g) = runState (randInCirc 2) (_randGen w)
|
||||||
|
in w & creatures . ix (_crID cr) %~ (crMvBy p . (crPastDamage -~ 10))
|
||||||
|
& randGen .~ g
|
||||||
|
| _crPastDamage cr > 0 = let (p,g) = runState (randInCirc 1) (_randGen w)
|
||||||
|
in w & creatures . ix (_crID cr) %~ (crMvBy p . (crPastDamage -~ 1))
|
||||||
|
& randGen .~ g
|
||||||
|
| otherwise = w
|
||||||
|
|
||||||
movementSideEff :: Creature -> World -> World
|
movementSideEff :: Creature -> World -> World
|
||||||
movementSideEff cr w
|
movementSideEff cr w
|
||||||
| hasJetPack = case cr ^? crStance . carriage of
|
| hasJetPack = case cr ^? crStance . carriage of
|
||||||
|
|||||||
@@ -282,6 +282,7 @@ data Creature = Creature
|
|||||||
, _crState :: CreatureState
|
, _crState :: CreatureState
|
||||||
, _crCorpse :: Picture
|
, _crCorpse :: Picture
|
||||||
, _crApplyDamage :: [Damage] -> Creature -> World -> World
|
, _crApplyDamage :: [Damage] -> Creature -> World -> World
|
||||||
|
, _crPastDamage :: Int
|
||||||
, _crStance :: Stance
|
, _crStance :: Stance
|
||||||
, _crActionPlan :: ActionPlan
|
, _crActionPlan :: ActionPlan
|
||||||
, _crMeleeCooldown :: Int
|
, _crMeleeCooldown :: Int
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ defaultCreature = Creature
|
|||||||
, _crState = defaultState
|
, _crState = defaultState
|
||||||
, _crCorpse = setLayer BottomLayer $ setDepth 5 $ color (greyN 0.5) $ circleSolid 10
|
, _crCorpse = setLayer BottomLayer $ setDepth 5 $ color (greyN 0.5) $ circleSolid 10
|
||||||
, _crApplyDamage = defaultApplyDamage
|
, _crApplyDamage = defaultApplyDamage
|
||||||
|
, _crPastDamage = 0
|
||||||
, _crStance = Stance
|
, _crStance = Stance
|
||||||
{_carriage=Walking 0 WasLeftForward
|
{_carriage=Walking 0 WasLeftForward
|
||||||
,_posture=AtEase
|
,_posture=AtEase
|
||||||
|
|||||||
Reference in New Issue
Block a user