Store past damages in vector form

This commit is contained in:
2021-08-19 01:41:56 +02:00
parent b9f73d255f
commit d7047c4b09
7 changed files with 22 additions and 8 deletions
+12 -2
View File
@@ -31,6 +31,8 @@ import System.Random
--import qualified Data.Set as S
--import qualified Data.Map as M
import Data.Monoid
import qualified Data.Vector as V
import qualified Data.Vector.Mutable as MV
dummyUpdate :: CRUpdate
dummyUpdate cr _ = (Endo id, Just cr)
@@ -80,10 +82,18 @@ crFriction _ _ = V2 0 0
doDamage :: Creature -> Creature
doDamage cr = set (crState . crDamage) []
$ over (crState . crPastDamage) (forceFoldable . take 10 . (dams :) ) damagedCr
. over (crState . crPastDamage) (advancePastDamages dams)
$ snd $ _crApplyDamage cr dams cr
where
dams = _crDamage $ _crState cr
damagedCr = snd $ _crApplyDamage cr dams cr
advancePastDamages :: [DamageType] -> V.Vector [DamageType] -> V.Vector [DamageType]
advancePastDamages newDs v = f $ V.backpermute v bpVector
where
f = V.modify $ \v' -> MV.write v' 0 newDs
bpVector :: V.Vector Int
bpVector = V.fromList $ 0 : [0 .. 18]
movementSideEff :: Creature -> World -> World
movementSideEff cr w