Rethink damage data type, work on damage sensors
This commit is contained in:
@@ -73,6 +73,7 @@ followImpulse cr w imp = case imp of
|
||||
cid = _crID cr
|
||||
posFromID cid' = _crPos $ _creatures w IM.! cid'
|
||||
rr a = fst $ randomR (-a,a) $ _randGen w
|
||||
hitCr i = (creatures . ix i . crState . crDamage %~ addDam i)
|
||||
hitCr i = (creatures . ix i . crState . crDamage
|
||||
.:~ Damage Blunt 100 cpos (posFromID i) (posFromID i) NoDamageEffect
|
||||
)
|
||||
. soundStart (CrSound cid) cpos hitS Nothing
|
||||
addDam i = ( Blunt 100 cpos (posFromID i) (posFromID i) : )
|
||||
|
||||
@@ -85,18 +85,21 @@ updateExpBarrel cr w
|
||||
| otherwise = soundMultiFrom [BarrelHiss 0,BarrelHiss 1] (_crPos cr) foamSprayLoopS (Just 1)
|
||||
stopSounds = stopSoundFrom (BarrelHiss 0) . stopSoundFrom (BarrelHiss 1)
|
||||
|
||||
damToExpBarrel :: [DamageType] -> Creature -> Creature
|
||||
damToExpBarrel :: [Damage] -> Creature -> Creature
|
||||
damToExpBarrel ds cr = foldr damToExpBarrel' (foldr damToExpBarrel' cr pierceDam) otherDam
|
||||
where
|
||||
(pierceDam,otherDam) = partition isPierce ds
|
||||
isPierce Piercing{} = True
|
||||
isPierce (Damage {_dmType = Piercing{}}) = True
|
||||
isPierce _ = False
|
||||
|
||||
damToExpBarrel' :: DamageType -> Creature -> Creature
|
||||
damToExpBarrel' (Piercing amount _ int _) cr
|
||||
= over (crState . crSpState . piercedPoints) ((:) $ int -.- _crPos cr)
|
||||
damToExpBarrel' :: Damage -> Creature -> Creature
|
||||
damToExpBarrel' dm cr = case _dmType dm of
|
||||
Piercing -> over (crState . crSpState . piercedPoints) ((:) $ int -.- _crPos cr)
|
||||
$ over crHP (\hp -> hp - div amount 200) cr
|
||||
damToExpBarrel' PoisonDam {} cr = cr
|
||||
damToExpBarrel' SparkDam {} cr = cr
|
||||
damToExpBarrel' PushDam{_dmPushBack = v} cr = cr Control.Lens.& crPos %~ (+.+) (1 / _crMass cr *.* v)
|
||||
damToExpBarrel' dt cr = cr Control.Lens.& crHP -~ _dmAmount dt
|
||||
PoisonDam -> cr
|
||||
SparkDam -> cr
|
||||
PushDam -> cr Control.Lens.& crPos %~ (+.+) (1 / _crMass cr *.* (_dePushBack $ _dmEffect dm))
|
||||
dt -> cr Control.Lens.& crHP -~ amount
|
||||
where
|
||||
amount = _dmAmount dm
|
||||
int = _dmAt dm
|
||||
|
||||
@@ -88,7 +88,7 @@ doDamage cr = set (crState . crDamage) []
|
||||
where
|
||||
dams = _crDamage $ _crState cr
|
||||
|
||||
advancePastDamages :: [DamageType] -> V.Vector [DamageType] -> V.Vector [DamageType]
|
||||
advancePastDamages :: [Damage] -> V.Vector [Damage] -> V.Vector [Damage]
|
||||
advancePastDamages newDs v = f $ V.backpermute v bpVector
|
||||
where
|
||||
f = V.modify $ \v' -> MV.write v' 0 newDs
|
||||
|
||||
@@ -11,8 +11,8 @@ import Control.Lens
|
||||
import qualified Data.IntSet as IS
|
||||
import qualified Data.Vector as V
|
||||
data CreatureState = CrSt
|
||||
{ _crDamage :: [DamageType]
|
||||
, _crPastDamage :: V.Vector [DamageType]
|
||||
{ _crDamage :: [Damage]
|
||||
, _crPastDamage :: V.Vector [Damage]
|
||||
, _crSpState :: CrSpState
|
||||
, _crDropsOnDeath :: CreatureDropType
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user