Cleanup particles slightly
This commit is contained in:
@@ -14,7 +14,7 @@ import Dodge.Picture
|
||||
import Dodge.WorldEvent.HitEffect
|
||||
import Dodge.WorldEvent.ThingsHit
|
||||
import Dodge.WorldEvent.Cloud
|
||||
import Dodge.WorldEvent.Flash
|
||||
--import Dodge.WorldEvent.Flash
|
||||
import Dodge.Particle.Bullet.Draw
|
||||
import Dodge.Particle.Bullet.Update
|
||||
import Dodge.SoundLogic
|
||||
@@ -41,7 +41,7 @@ aFlameParticle
|
||||
-> Point2 -- ^ Velocity
|
||||
-> Maybe Int -- ^ Creature id
|
||||
-> Particle
|
||||
aFlameParticle t pos vel maycid = Pt'
|
||||
aFlameParticle t pos vel maycid = PtZ
|
||||
{ _ptDraw = drawFlame vel
|
||||
, _ptUpdate' = moveFlame vel
|
||||
, _btVel' = vel
|
||||
@@ -51,10 +51,12 @@ aFlameParticle t pos vel maycid = Pt'
|
||||
, _btWidth' = 4
|
||||
, _btTimer' = t
|
||||
, _btHitEffect' = destroyOnImpact (doFlameDam 1) noEff noEff
|
||||
, _ptZ = 20
|
||||
}
|
||||
drawFlame
|
||||
:: Point2 -- ^ Rotate direction
|
||||
-> Particle -> Picture
|
||||
-> Particle
|
||||
-> Picture
|
||||
drawFlame rotd pt = thePic
|
||||
where
|
||||
ep = _btPos' pt
|
||||
@@ -300,13 +302,13 @@ cloudPoisonDamage c w = w & creatures %~ flip (foldr (IM.adjust doDam)) damagedC
|
||||
damagedCrs = IM.keys $ IM.filter f $ creaturesNearPoint (stripZ $ _clPos c) w
|
||||
f cr = dist3 (addZ 20 $ _crPos cr) (_clPos c) < _crRad cr + _clRad c + 10
|
||||
doDam cr = cr & crState . crDamage %~ (:) (PoisonDam 1)
|
||||
makeTeslaArcAt :: Point2 -> Float -> Particle
|
||||
makeTeslaArcAt pos dir = LinearParticle
|
||||
makeTeslaArcAt :: Color -> Point2 -> Float -> Particle
|
||||
makeTeslaArcAt col pos dir = LinearParticle
|
||||
{ _ptPoints = [pos]
|
||||
, _ptDraw = drawTeslaArc
|
||||
, _ptUpdate' = moveTeslaArc pos dir
|
||||
, _ptTimer = 2
|
||||
, _ptColor = white
|
||||
, _ptColor = brightX 100 1.5 col
|
||||
}
|
||||
drawTeslaArc :: Particle -> Picture
|
||||
drawTeslaArc pt = pic
|
||||
@@ -328,10 +330,11 @@ moveTeslaArc
|
||||
moveTeslaArc p d w pt
|
||||
| t == 2 =
|
||||
(foldr damCrs w hitCrs & randGen .~ g
|
||||
& createSpark 8 nc q2 (argV sv + d1) Nothing
|
||||
, Just $ pt & ptTimer -~ 1
|
||||
& ptPoints .~ ps'
|
||||
& ptColor .~ theColor)
|
||||
& createSparkCol 8 nc q2 (argV sv + d1) Nothing
|
||||
, Just $ pt
|
||||
& ptTimer -~ 1
|
||||
& ptPoints .~ ps'
|
||||
)
|
||||
| t < 1 = (w , Nothing)
|
||||
| otherwise = (w , Just $ pt & ptTimer -~ 1)
|
||||
where
|
||||
@@ -342,11 +345,8 @@ moveTeslaArc p d w pt
|
||||
f (E3x3 p1) = p1
|
||||
ps' = lightningMids d pers ps
|
||||
pers = evalState (sequence $ repeat $ randInCirc 5) $ _randGen w
|
||||
(nc,g) = randomR (0::Int,5) $ _randGen w
|
||||
theColor = f2 nc
|
||||
f2 0 = cyan
|
||||
f2 1 = azure
|
||||
f2 _ = white
|
||||
nc = brightX 100 1.5 $ numColor colid
|
||||
(colid,g) = randomR (0::Int,5) $ _randGen w
|
||||
f1 (E3x1 cr) = Just $ _crID cr
|
||||
f1 _ = Nothing
|
||||
hitCrs = mapMaybe f1 $ take 14 $ crsLightChain p d 0 w
|
||||
@@ -453,32 +453,11 @@ crOrWall p dir w = fromMaybe (E3x3 $ p +.+ rotateV dir (V2 arcLen 0))
|
||||
-- | Create a spark.
|
||||
-- If the spark is created by another Particle, it cannot be directly added to
|
||||
-- the list, hence the redirect through worldEvents.
|
||||
createSpark :: Int -> Int -> Point2 -> Float -> Maybe Int -> World -> World
|
||||
createSpark time colid pos dir maycid w
|
||||
= w & worldEvents %~ ( (over particles (spark :) . sparkFlashAt pos') . )
|
||||
where
|
||||
spark = Bul'
|
||||
{ _ptDraw = drawBul
|
||||
, _ptUpdate' = mvGenBullet
|
||||
, _btVel' = rotateV dir (V2 5 0)
|
||||
, _btColor' = brightX 100 1.5 $ numColor colid
|
||||
, _btTrail' = [pos]
|
||||
, _btPassThrough' = maycid
|
||||
, _btWidth' = 1
|
||||
, _btTimer' = time
|
||||
, _btHitEffect' = destroyOnImpact sparkEff noEff noEff
|
||||
}
|
||||
pos' = pos +.+ rotateV dir (V2 5 0)
|
||||
sparkEff bt p cr
|
||||
= creatures . ix (_crID cr) . crState . crDamage %~ ( SparkDam 1 sp p ep : )
|
||||
where
|
||||
sp = head (_btTrail' bt)
|
||||
ep = sp +.+ _btVel' bt
|
||||
createSparkCol :: Int -> Color -> Point2 -> Float -> Maybe Int -> World -> World
|
||||
createSparkCol time col pos dir maycid w
|
||||
= w & worldEvents %~ ( (over particles (spark :) . sparkFlashAt pos') . )
|
||||
= w & worldEvents %~ ( over particles (spark :) . )
|
||||
where
|
||||
spark = Bul'
|
||||
spark = BulletPt
|
||||
{ _ptDraw = drawBul
|
||||
, _ptUpdate' = mvGenBullet
|
||||
, _btVel' = rotateV dir (V2 5 0)
|
||||
@@ -489,7 +468,6 @@ createSparkCol time col pos dir maycid w
|
||||
, _btTimer' = time
|
||||
, _btHitEffect' = destroyOnImpact sparkEff noEff noEff
|
||||
}
|
||||
pos' = pos +.+ rotateV dir (V2 5 0)
|
||||
sparkEff bt p cr
|
||||
= creatures . ix (_crID cr) . crState . crDamage %~ ( SparkDam 1 sp p ep : )
|
||||
where
|
||||
|
||||
Reference in New Issue
Block a user