Cleanup, redo damage direction

This commit is contained in:
2025-06-08 20:40:58 +01:00
parent 5b1e4fba4e
commit 70c78824f3
12 changed files with 105 additions and 147 deletions
+17 -34
View File
@@ -1,21 +1,19 @@
module Dodge.Spark (
updateSpark,
sparkRandDir,
createBarrelSpark,
randDirSpark,
randSpark,
makeSpark,
) where
import Dodge.Damage
import Control.Monad.State
import Dodge.Damage
import Dodge.Data.World
import Dodge.WorldEvent.ThingsHit
import Geometry
import LensHelp
import System.Random
updateSpark :: World -> Spark -> (World, Maybe Spark)
updateSpark w sk
| magV (_skVel sk) < 1 = (w, Nothing)
@@ -29,36 +27,26 @@ updateSpark w sk
sp = _skPos sk
ep = sp + _skVel sk
sparkDam ::
Spark ->
Either Creature Wall ->
World ->
World
sparkDam sk x = damageCrWl (sparkToDamage sk) x
sparkDam :: Spark -> Either Creature Wall -> World -> World
sparkDam sk = damageCrWl (sparkToDamage sk)
sparkToDamage :: Spark -> Damage
sparkToDamage sp = case _skType sp of
ElectricSpark -> Electrical 10
FireSpark -> Flaming 1
NormalSpark -> Sparking 10
createBarrelSpark :: Point2 -> Float -> World -> World
createBarrelSpark pos dir = sparkRandDir 0.1 pos dir
ElectricSpark -> Electrical 10
FireSpark -> Flaming 1
NormalSpark -> Sparking 10
makeSpark :: SparkType -> Point2 -> Float -> World -> World
makeSpark st p d = cWorld . lWorld . sparks
.:~ Spark
{ _skVel = rotateV d (V2 5 0)
, _skPos = p
, _skOldPos = p
, _skType = st
}
makeSpark st p d =
cWorld . lWorld . sparks
.:~ Spark
{ _skVel = rotateV d (V2 5 0)
, _skPos = p
, _skOldPos = p
, _skType = st
}
randDirSpark ::
State StdGen Float ->
Point2 ->
World ->
World
randDirSpark :: State StdGen Float -> Point2 -> World -> World
randDirSpark randdir pos w =
w
& randGen .~ g
@@ -70,9 +58,7 @@ randDirSpark randdir pos w =
, _skType = NormalSpark
}
where
(dir, g) = (`runState` _randGen w) $ do
d <- randdir
return d
(dir, g) = randdir `runState` _randGen w
randSpark ::
SparkType ->
@@ -98,7 +84,4 @@ randSpark dt randspeed randdir pos w =
return (d, x)
sparkRandDir :: Float -> Point2 -> Float -> World -> World
sparkRandDir a pos dir =
randDirSpark
(state $ randomR (dir - a, dir + a))
pos
sparkRandDir a pos dir = randDirSpark (state $ randomR (dir - a, dir + a)) pos