27 lines
671 B
Haskell
27 lines
671 B
Haskell
module Dodge.Particle.Update where
|
|
import Dodge.Data
|
|
import LensHelp
|
|
import Geometry
|
|
|
|
mvPt :: Particle -> Maybe Particle
|
|
mvPt pt = Just $ pt
|
|
& ptTrail %~ f
|
|
& ptTimer -~ 1
|
|
& ptCrIgnore .~ Nothing
|
|
where
|
|
f trl = head trl +.+ _ptVel pt : trl
|
|
|
|
destroyAt :: Point2 -> Particle -> Maybe Particle
|
|
destroyAt hitp pt = Just $ pt
|
|
& ptUpdate .~ killBulletUpdate
|
|
& ptTrail .:~ hitp
|
|
& ptTimer %~ (min 3 . subtract 1)
|
|
|
|
killBulletUpdate :: World -> Particle -> (World,Maybe Particle)
|
|
killBulletUpdate w pt
|
|
| _ptTimer pt <= 0 = (w,Nothing)
|
|
| otherwise = (w
|
|
, Just $ pt & ptTimer -~ 1
|
|
& ptTrail %~ (\(x:xs) -> x:x:xs)
|
|
)
|