Cleanup, redo damage direction
This commit is contained in:
+17
-34
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user