Implement modules changing shell payloads
This commit is contained in:
+36
-1
@@ -1,10 +1,45 @@
|
||||
module Dodge.Payload where
|
||||
module Dodge.Payload (
|
||||
usePayload,
|
||||
) where
|
||||
|
||||
--import Geometry.Vector
|
||||
import Dodge.Item.Weapon.Bullet
|
||||
import RandomHelp
|
||||
import Control.Monad
|
||||
import Color
|
||||
import Dodge.WorldEvent.Shockwave
|
||||
import Geometry.Vector3D
|
||||
import Dodge.Data.World
|
||||
import Dodge.SoundLogic
|
||||
import Dodge.WorldEvent.Explosion
|
||||
import Geometry.Data
|
||||
import LensHelp
|
||||
|
||||
usePayload :: Payload -> Point2 -> Point2 -> World -> World
|
||||
usePayload payload = case payload of
|
||||
ExplosionPayload -> makeExplosionAt
|
||||
ShrapnelBomb -> makeShrapnelAt
|
||||
DudPayload -> const (const id)
|
||||
|
||||
makeShrapnelAt :: Point2 -> Point2 -> World -> World
|
||||
makeShrapnelAt p v w =
|
||||
w
|
||||
& soundMultiFrom [Explosion 0, Explosion 1] p bangS Nothing
|
||||
& cWorld . lWorld . worldEvents
|
||||
.:~ MakeTempLight (LSParam (addZ 20 p) 150 (V3 0.8 0.8 0.8)) 20
|
||||
& makeShockwaveAt [] p 50 5 0 white
|
||||
& cWorld . lWorld . bullets .++~ buls
|
||||
where
|
||||
-- speed = magV v
|
||||
vs = replicateM 75 (randInCirc $ 10) & evalState $ _randGen w
|
||||
drags :: [Float]
|
||||
drags = replicateM 75 (state $ randomR (0.85,0.9)) & evalState $ _randGen w
|
||||
buls = zipWith f vs drags
|
||||
f v' drag = defaultBullet
|
||||
& buEffect .~ BounceBullet
|
||||
& buVel .~ v + v'
|
||||
& buDrag .~ drag
|
||||
& buPos .~ (p - v)
|
||||
& buOldPos .~ (p - v)
|
||||
& buDamages .~ [Damage PIERCING 10 0 0 0 $ PushBackDamage 2]
|
||||
& buWidth .~ 1
|
||||
|
||||
Reference in New Issue
Block a user