Cleanup creature update slightly, add show instance for impulses

This commit is contained in:
2022-03-26 08:08:16 +00:00
parent ae7fbe29c2
commit 3698a738f3
17 changed files with 158 additions and 198 deletions
+14 -15
View File
@@ -35,8 +35,8 @@ import Control.Monad.State
import System.Random
--import qualified Data.Set as S
--import qualified Data.Map as M
import qualified Data.Vector as V
import qualified Data.Vector.Mutable as MV
--import qualified Data.Vector as V
--import qualified Data.Vector.Mutable as MV
-- | The movement is updated before the ai in order to correctly set the oldpos.
-- This should be made more sensible: should the movement side effects apply to
@@ -49,18 +49,17 @@ stateUpdate = stateUpdateDamage doDamage
stateUpdateDamage :: (Creature -> World -> World)
-> (Creature -> World -> (World -> World, Creature))
-- -> CRUpdate
-> Creature -> World -> World
stateUpdateDamage damageupdate u cr w = damageupdate cr $
mvcrhammerup . invSideEff upcr . movementSideEff cr . deathEff . f $ w
& creatures . at (_crID cr) .~ (stepReloading <$> crOrCorpse upcr)
invSideEff upcr . movementSideEff cr . deathEff . f $ w
& creatures . at (_crID cr) .~ (mvcrhammerup . stepReloading <$> crOrCorpse upcr)
where
(f,upcr) = u (updateMovement cr) w
mvcrhammerup = creatures . ix (_crID cr) . crHammerPosition %~ moveHammerUp
crOrCorpse cr'
mvcrhammerup = crHammerPosition %~ moveHammerUp
crOrCorpse cr'
| cr' ^. crHP > 0 = Just cr'
| otherwise = Nothing
deathEff
deathEff
| cr ^.crHP > 0 = id
| otherwise = stopSoundFrom (CrWeaponSound (_crID cr) 0)
. over decorations addCorpse
@@ -87,18 +86,18 @@ clearDamage cr = creatures . ix (_crID cr) . crState . crDamage .~ []
doDamage :: Creature -> World -> World
doDamage cr w = w
& creatures . ix (_crID cr) . crState . crDamage .~ []
& creatures . ix (_crID cr) . crState . crPastDamage %~ advancePastDamages dams
-- & creatures . ix (_crID cr) . crState . crPastDamage %~ advancePastDamages dams
& _crApplyDamage cr dams cr
where
dams = _crDamage $ _crState cr
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
--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
bpVector :: V.Vector Int
bpVector = V.fromList $ 0 : [0 .. 18]
--bpVector :: V.Vector Int
--bpVector = V.fromList $ 0 : [0 .. 18]
movementSideEff :: Creature -> World -> World
movementSideEff cr w