Store past damages in vector form
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user