Change foldr to foldl' in some cases
This commit is contained in:
@@ -80,8 +80,8 @@ moveFlame :: Point2 -- ^ Rotation direction
|
||||
moveFlame rotd w pt
|
||||
| time <= 0 = (makeFlamerSmokeAt (addZ 20 ep) w, Nothing)
|
||||
| otherwise = case thingsHitExceptCr (_ptCrIgnore pt) sp ep w of
|
||||
((_,Left _):_) -> (doSound $ damwls damcrs , mvPt' 0.7)
|
||||
((p,Right wl):_) -> (doSound $ damwls damcrs , rfl wl p)
|
||||
((_,Left _):_) -> (doSound $ dodamage w , mvPt' 0.7)
|
||||
((p,Right wl):_) -> (doSound $ dodamage w , rfl wl p)
|
||||
_ -> (ptFlicker pt . damwls $ doSound damcrs , mvPt' 0.98)
|
||||
where
|
||||
time = _ptTimer pt
|
||||
@@ -94,6 +94,7 @@ moveFlame rotd w pt
|
||||
, _ptPos = ep
|
||||
, _ptCrIgnore = Nothing
|
||||
, _ptVel = speed *.* vel }
|
||||
dodamage = damageInArea closeCrs closeWls pt
|
||||
damwls w' = foldr (\wl -> fst . hiteff [(ep,Right wl)]) w' $ IM.filter closeWls $ wallsNearPoint ep w
|
||||
damcrs = foldr (\cr -> fst . hiteff [(ep,Left cr)]) w $ IM.filter closeCrs $ _creatures w
|
||||
closeWls wl = uncurry circOnSeg (_wlLine wl) ep 5
|
||||
@@ -195,13 +196,18 @@ moveStaticBall = moveFlamelet
|
||||
|
||||
-- | Note damgeInRadius by itself never destroys the particle
|
||||
damageInRadius :: Float -> Particle -> World -> World
|
||||
damageInRadius size pt w = damwls damcrs
|
||||
damageInRadius size pt = damageInArea isClose closeWls pt
|
||||
where
|
||||
p = _ptPos pt
|
||||
damcrs = foldr (\cr -> fst . hiteff [(p,Left cr)]) w $ IM.filter isClose $ _creatures w
|
||||
damwls w' = foldr (\wl -> fst . hiteff [(p,Right wl)]) w' $ IM.filter closeWls $ wallsNearPoint p w
|
||||
closeWls wl = uncurry circOnSeg (_wlLine wl) p size
|
||||
isClose cr = dist p (_crPos cr) < _crRad cr + size
|
||||
|
||||
damageInArea :: (Creature -> Bool) -> (Wall -> Bool) -> Particle -> World -> World
|
||||
damageInArea crt wlt pt w = damwls damcrs
|
||||
where
|
||||
p = _ptPos pt
|
||||
damcrs = foldr (\cr -> fst . hiteff [(p,Left cr)]) w $ IM.filter crt $ _creatures w
|
||||
damwls w' = foldr (\wl -> fst . hiteff [(p,Right wl)]) w' $ IM.filter wlt $ wallsNearPoint p w
|
||||
hiteff = _ptHitEff pt pt
|
||||
|
||||
-- | At writing the radius is half the size of the effect area
|
||||
|
||||
Reference in New Issue
Block a user