Improve static bullets
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
module Dodge.DamageCircle
|
||||
( damageCircle
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.WorldEvent.ThingsHit
|
||||
import Geometry
|
||||
import LensHelp
|
||||
|
||||
import qualified Streaming.Prelude as S
|
||||
import qualified IntMapHelp as IM
|
||||
damageCircle :: Float -> Point2 -> DamageType -> Int -> World -> World
|
||||
damageCircle r sp dt da w = w
|
||||
& wallDamages %~ addwalldamages
|
||||
& creatures %~ addcreaturedamages
|
||||
where
|
||||
addwalldamages wlds = runIdentity $ S.fold_ (damageWlCircle wldam) wlds id wlstodam
|
||||
wlstodam = wlsHitRadial sp r w
|
||||
wldam p = Damage dt da sp p (sp +.+ r *.* normalizeV (p -.- sp)) NoDamageEffect
|
||||
addcreaturedamages crs = runIdentity $ S.fold_ (damageCrCircle crdam) crs id crstodam
|
||||
crdam p cr = Damage dt da sp p (_crPos cr) NoDamageEffect
|
||||
crstodam = crsHitRadial sp r w
|
||||
|
||||
damageWlCircle :: (Point2 -> Damage)
|
||||
-> IM.IntMap [Damage] -> (Point2,Wall) -> IM.IntMap [Damage]
|
||||
damageWlCircle f wldams (p,wl) = IM.insertWith (++) (_wlID wl) [f p] wldams
|
||||
|
||||
damageCrCircle :: (Point2 -> Creature -> Damage)
|
||||
-> IM.IntMap Creature -> (Point2,Creature) -> IM.IntMap Creature
|
||||
damageCrCircle crdam crs (p,cr) = crs & ix (_crID cr) . crState . csDamage .:~ crdam p cr
|
||||
Reference in New Issue
Block a user