Refactor wall zoning, remove streaming
This commit is contained in:
+10
-9
@@ -3,6 +3,8 @@ module Dodge.Flame
|
||||
, makeFlame
|
||||
, moveFlame
|
||||
) where
|
||||
import Dodge.Zoning.Wall
|
||||
import qualified ListHelp as List
|
||||
import Dodge.Data
|
||||
import Dodge.LightSource
|
||||
import Dodge.Zone
|
||||
@@ -42,10 +44,10 @@ simpleDamFL dt amount bt p = [ Damage dt amount sp p ep NoDamageEffect ]
|
||||
ep = sp +.+ bulVel
|
||||
expireAndDamageFL :: (Flame -> Point2 -> [Damage])
|
||||
-> Flame
|
||||
-> Stream (Of (Point2, Either Creature Wall)) Identity ()
|
||||
-> [(Point2, Either Creature Wall)]
|
||||
-> World
|
||||
-> (World, Maybe Flame)
|
||||
expireAndDamageFL fdm bt things w = case runIdentity $ S.head_ things of
|
||||
expireAndDamageFL fdm bt things w = case List.safeHead things of
|
||||
Nothing -> (w, Just $ bt & flTimer -~ 1)
|
||||
Just x -> (doDamagesFL fdm x bt w, Nothing)
|
||||
doDamagesFL :: (Flame -> Point2 -> [Damage])
|
||||
@@ -65,7 +67,7 @@ moveFlame :: World
|
||||
-> (World, Maybe Flame)
|
||||
moveFlame w pt
|
||||
| time <= 0 = (makeFlamerSmokeAt (addZ 20 ep) w, Nothing)
|
||||
| otherwise = case runIdentity . S.head_ $ thingsHit sp ep w of
|
||||
| otherwise = case List.safeHead $ thingsHit sp ep w of
|
||||
Just (_,Left _) -> (doSound $ dodamage w , mvPt' 0.7)
|
||||
Just (p,Right wl) -> (doSound $ dodamage w , rfl wl p)
|
||||
_ -> (flFlicker pt $ doSound $ dodamage w , mvPt' 0.98)
|
||||
@@ -100,13 +102,12 @@ flDamageInArea :: (Creature -> Bool) -> (Wall -> Bool) -> Flame -> World -> Worl
|
||||
flDamageInArea crt wlt pt w = damwls damcrs
|
||||
where
|
||||
p = _flPos pt
|
||||
damcrs = foldl' (flip $ \cr -> fst . hiteff (S.yield (p,Left cr))) w $ IM.filter crt $ _creatures w
|
||||
damwls w' = runIdentity
|
||||
. S.fold_
|
||||
(flip $ \wl -> fst . hiteff (S.yield (p,Right wl)))
|
||||
damcrs = foldl' (flip $ \cr -> fst . hiteff [(p,Left cr)]) w $ IM.filter crt $ _creatures w
|
||||
damwls w'
|
||||
= foldl'
|
||||
(flip $ \wl -> fst . hiteff [(p,Right wl)])
|
||||
w'
|
||||
id
|
||||
. S.filter wlt
|
||||
. filter wlt
|
||||
$ wlsNearPoint p w'
|
||||
hiteff = expireAndDamageFL (simpleDamFL FLAMING 1) pt
|
||||
|
||||
|
||||
Reference in New Issue
Block a user