Continue bullet refactor
This commit is contained in:
@@ -15,17 +15,6 @@ simpleDam' dt amount bt p = [ Damage dt amount sp p ep NoDamageEffect ]
|
||||
bulVel = _buVel bt
|
||||
ep = sp +.+ bulVel
|
||||
|
||||
heavyBulDams :: [Damage]
|
||||
heavyBulDams =
|
||||
[ Damage PIERCING 300 0 0 0 NoDamageEffect
|
||||
, Damage PUSHDAM 1 0 0 0 $ PushBackDamage 2
|
||||
]
|
||||
|
||||
basicBulDams :: [Damage]
|
||||
basicBulDams =
|
||||
[ Damage PIERCING 100 0 0 0 NoDamageEffect
|
||||
, Damage PUSHDAM 1 0 0 0 . PushBackDamage $ 2
|
||||
]
|
||||
|
||||
basicSparkDams :: Particle -> Point2 -> [Damage]
|
||||
basicSparkDams bt p = [ Damage SPARKING 1 sp p ep NoDamageEffect ]
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
module Dodge.Particle.HitEffect
|
||||
( penWalls
|
||||
, module Dodge.Particle.HitEffect.ExpireAndDamage
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.Particle.Update
|
||||
import Dodge.Particle.HitEffect.ExpireAndDamage
|
||||
import Geometry
|
||||
|
||||
import Data.Bifunctor
|
||||
|
||||
type HitCreatureEffect' = Bullet -> Point2 -> Creature -> World -> World
|
||||
type HitWallEffect' = Bullet -> Point2 -> Wall -> World -> World
|
||||
|
||||
penWalls
|
||||
:: HitCreatureEffect'
|
||||
-> HitWallEffect'
|
||||
-> Bullet
|
||||
-> [(Point2, Either Creature Wall)]
|
||||
-> World
|
||||
-> (World, Maybe Bullet)
|
||||
penWalls crEff wlEff pt hitThings w = case hitThings of
|
||||
[] -> ( w, mvPt pt)
|
||||
((p,Left cr):_) -> (crEff pt p cr w, destroyAt' p pt)
|
||||
((p,Right wl):hs) | _wlFireThrough wl
|
||||
-> first (wlEff pt p wl) $ penWalls crEff wlEff pt hs w
|
||||
((p,Right wl):_) -> (wlEff pt p wl w, destroyAt' p pt)
|
||||
@@ -17,14 +17,6 @@ expireAndDamage fdm bt things w = case runIdentity $ S.head_ things of
|
||||
Nothing -> (w, mvPt' bt)
|
||||
Just x -> (doDamages fdm x bt w, destroyAt (fst x) bt)
|
||||
|
||||
expireAndDamage' :: (Bullet -> Point2 -> [Damage])
|
||||
-> Bullet
|
||||
-> Stream (Of (Point2, Either Creature Wall)) Identity ()
|
||||
-> World
|
||||
-> (World, Maybe Bullet)
|
||||
expireAndDamage' fdm bt things w = case runIdentity $ S.head_ things of
|
||||
Nothing -> (w, mvPt bt)
|
||||
Just x -> (doDamages' fdm x bt w, destroyAt' (fst x) bt)
|
||||
|
||||
doDamages :: (Particle -> Point2 -> [Damage])
|
||||
-> (Point2, Either Creature Wall)
|
||||
@@ -36,14 +28,3 @@ doDamages fdm (p,thhit) bt = case thhit of
|
||||
Right wl -> wallDamages %~ IM.insertWith (++) (_wlID wl) dams
|
||||
where
|
||||
dams = fdm bt p
|
||||
|
||||
doDamages' :: (Bullet -> Point2 -> [Damage])
|
||||
-> (Point2, Either Creature Wall)
|
||||
-> Bullet
|
||||
-> World
|
||||
-> World
|
||||
doDamages' fdm (p,thhit) bt = case thhit of
|
||||
Left cr -> creatures . ix (_crID cr) . crState . csDamage .++~ dams
|
||||
Right wl -> wallDamages %~ IM.insertWith (++) (_wlID wl) dams
|
||||
where
|
||||
dams = fdm bt p
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
module Dodge.Particle.HitEffect.Penetrate where
|
||||
import Dodge.Data
|
||||
import Dodge.Particle.Update
|
||||
import Dodge.Particle.HitEffect.ExpireAndDamage
|
||||
import Geometry
|
||||
--import LensHelp
|
||||
|
||||
import Data.Bifunctor
|
||||
import Streaming
|
||||
import qualified Streaming.Prelude as S
|
||||
|
||||
penetrate
|
||||
:: ((Point2,Either Creature Wall) -> Bullet -> Maybe Bullet)
|
||||
-- | penetration test, can update particle if it penetrates
|
||||
-> (Bullet -> Point2 -> [Damage]) -- | damages when penetrating
|
||||
-> (Bullet -> Point2 -> [Damage]) -- | damages when not penetrating
|
||||
-> Bullet
|
||||
-> Stream (Of (Point2, Either Creature Wall)) Identity ()
|
||||
-> World
|
||||
-> (World, Maybe Bullet)
|
||||
penetrate t pendam stopdam pt hitThings w = case runIdentity $ S.uncons hitThings of
|
||||
Nothing -> (w, mvPt pt)
|
||||
Just (x,xs) -> case t x pt of
|
||||
Nothing -> expireAndDamage' stopdam pt hitThings w
|
||||
Just pt' -> first (doDamages' pendam x pt) $ penetrate t pendam stopdam pt' xs w
|
||||
@@ -3,12 +3,6 @@ import Dodge.Data
|
||||
import LensHelp
|
||||
import Geometry
|
||||
|
||||
mvPt :: Bullet -> Maybe Bullet
|
||||
mvPt pt = Just $ pt
|
||||
& buPos %~ (+.+ _buVel pt)
|
||||
& buOldPos .~ _buPos pt
|
||||
& buTimer -~ 1
|
||||
|
||||
mvPt' :: Particle -> Maybe Particle
|
||||
mvPt' pt = Just $ pt
|
||||
& ptTrail %~ f
|
||||
@@ -21,12 +15,6 @@ destroyAt hitp pt = Just $ pt
|
||||
& ptUpdate .~ killParticleUpdate
|
||||
& ptTrail .:~ hitp
|
||||
& ptTimer %~ (min 3 . subtract 1)
|
||||
destroyAt' :: Point2 -> Bullet -> Maybe Bullet
|
||||
destroyAt' hitp pt = Just $ pt
|
||||
& buState .~ DyingBulletState
|
||||
& buPos .~ hitp
|
||||
& buOldPos .~ _buPos pt
|
||||
& buTimer %~ (min 3 . subtract 1)
|
||||
|
||||
killParticleUpdate :: World -> Particle -> (World,Maybe Particle)
|
||||
killParticleUpdate w pt
|
||||
|
||||
Reference in New Issue
Block a user