Cleanup and reorganise
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
module Dodge.Creature.State where
|
||||
module Dodge.Creature.State
|
||||
( stateUpdate
|
||||
, doDamage
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.Data.DamageType
|
||||
import Dodge.Data.SoundOrigin
|
||||
@@ -19,9 +22,6 @@ import Picture
|
||||
import qualified IntMapHelp as IM
|
||||
--import StrictHelp
|
||||
|
||||
import Data.List
|
||||
--import Data.Char
|
||||
--import Data.Maybe
|
||||
import Data.Function
|
||||
import Control.Lens
|
||||
--import Control.Applicative
|
||||
@@ -36,8 +36,8 @@ import Data.Monoid
|
||||
import qualified Data.Vector as V
|
||||
import qualified Data.Vector.Mutable as MV
|
||||
|
||||
dummyUpdate :: CRUpdate
|
||||
dummyUpdate cr _ = (Endo id, Just cr)
|
||||
--dummyUpdate :: CRUpdate
|
||||
--dummyUpdate cr _ = (Endo id, Just cr)
|
||||
|
||||
-- | The movement is updated before the ai in order to correctly set the oldpos.
|
||||
stateUpdate :: CRUpdate -> CRUpdate
|
||||
@@ -73,12 +73,6 @@ setOldPos :: Creature -> Creature
|
||||
setOldPos cr = cr
|
||||
& crOldPos .~ _crPos cr
|
||||
& crOldDir .~ _crDir cr
|
||||
{- |
|
||||
Given a creature and a velocity, applies friction to that creature and evaluates a
|
||||
velocity to carry across frames.
|
||||
-}
|
||||
crFriction :: Creature -> Point2 -> Point2
|
||||
crFriction _ _ = V2 0 0
|
||||
|
||||
--meleeCooldown :: CRUpdate -> CRUpdate
|
||||
--meleeCooldown u cr = u $ cr & crMeleeCooldown . _Just %~ (max 0 . (\x -> x - 1))
|
||||
@@ -171,64 +165,3 @@ stepReloading cr = over (crInv . ix iSel . wpReloadState) decreaseToZero cr
|
||||
decreaseToZero :: Int -> Int
|
||||
decreaseToZero x = max 0 (x - 1)
|
||||
|
||||
onDeath :: (Creature -> World -> World) -> CRUpdate -> CRUpdate
|
||||
onDeath h u cr w
|
||||
| _crHP cr > 0 = u cr w
|
||||
| otherwise = ( Endo $ h cr , Nothing )
|
||||
|
||||
updateBarrel
|
||||
:: Creature
|
||||
-> World
|
||||
-> (Endo World, Maybe Creature)
|
||||
updateBarrel cr _
|
||||
| _crHP cr > 0 = (Endo id, newCr)
|
||||
| otherwise = (Endo id, Nothing)
|
||||
where
|
||||
newCr = Just $ doDamage cr
|
||||
|
||||
-- should generate the sparks externally using new random generators
|
||||
updateExpBarrel
|
||||
:: Creature
|
||||
-> World
|
||||
-> (Endo World, Maybe Creature)
|
||||
updateExpBarrel cr w
|
||||
| _crHP cr > 0 = (Endo $ foldr (.) id pierceSparks . hiss, newCr)
|
||||
| otherwise = (Endo $ makeExplosionAt (_crPos cr) . stopSounds , Nothing)
|
||||
where
|
||||
g = _randGen w
|
||||
damages = _crDamage $ _crState cr
|
||||
pierceSparks :: [World -> World]
|
||||
pierceSparks
|
||||
= zipWith4 (\p a -> createBarrelSpark (_crPos cr +.+ p) (a + argV p) (Just $ _crID cr))
|
||||
poss as times colids
|
||||
as = randomRs (-0.7,0.7) g
|
||||
colids = randomRs (0,11) g
|
||||
times = randomRs (2,5) g
|
||||
poss = _piercedPoints $ _crSpState $ _crState cr
|
||||
--newCr = Just $ doDamage $ applyFuseDamage cr -- $ foldr perforate cr damages
|
||||
newCr = Just $ applyFuseDamage $ set (crState . crDamage) [] $ damToExpBarrel damages cr
|
||||
--perforate :: DamageType -> Creature -> Creature
|
||||
--perforate (Piercing amount sp int ep) cr = over (crState . crSpState . piercedPoints)
|
||||
-- ((:) $ int -.- _crPos cr) cr
|
||||
--perforate _ cr = cr
|
||||
applyFuseDamage cr' = cr' & crHP %~
|
||||
subtract (length . _piercedPoints . _crSpState $ _crState cr')
|
||||
hiss | null poss = id
|
||||
| otherwise = soundMultiFrom [BarrelHiss 0,BarrelHiss 1] (_crPos cr) foamSprayLoopS (Just 1)
|
||||
stopSounds = stopSoundFrom (BarrelHiss 0) . stopSoundFrom (BarrelHiss 1)
|
||||
|
||||
damToExpBarrel :: [DamageType] -> Creature -> Creature
|
||||
damToExpBarrel ds cr = foldr damToExpBarrel' (foldr damToExpBarrel' cr pierceDam) otherDam
|
||||
where
|
||||
(pierceDam,otherDam) = partition isPierce ds
|
||||
isPierce Piercing{} = True
|
||||
isPierce _ = False
|
||||
|
||||
damToExpBarrel' :: DamageType -> Creature -> Creature
|
||||
damToExpBarrel' (Piercing amount _ int _) cr
|
||||
= 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
|
||||
|
||||
Reference in New Issue
Block a user