Start projectile refactor
This commit is contained in:
+4
-2
@@ -10,6 +10,7 @@ circular imports are probably not a good idea.
|
|||||||
{-# LANGUAGE DerivingStrategies #-}
|
{-# LANGUAGE DerivingStrategies #-}
|
||||||
module Dodge.Data
|
module Dodge.Data
|
||||||
( module Dodge.Data
|
( module Dodge.Data
|
||||||
|
, module Dodge.Data.Ammo
|
||||||
, module Dodge.Data.Payload
|
, module Dodge.Data.Payload
|
||||||
, module Dodge.Data.RadarSweep
|
, module Dodge.Data.RadarSweep
|
||||||
, module Dodge.Data.PosEvent
|
, module Dodge.Data.PosEvent
|
||||||
@@ -54,6 +55,7 @@ module Dodge.Data
|
|||||||
, module Dodge.Data.RadarBlip
|
, module Dodge.Data.RadarBlip
|
||||||
, module Dodge.Data.PathGraph
|
, module Dodge.Data.PathGraph
|
||||||
) where
|
) where
|
||||||
|
import Dodge.Data.Ammo
|
||||||
import Dodge.Data.Payload
|
import Dodge.Data.Payload
|
||||||
import Dodge.Data.RadarSweep
|
import Dodge.Data.RadarSweep
|
||||||
import Dodge.Data.PosEvent
|
import Dodge.Data.PosEvent
|
||||||
@@ -590,9 +592,9 @@ type HitEffect' = Flame
|
|||||||
|
|
||||||
data AmmoType
|
data AmmoType
|
||||||
= ProjectileAmmo
|
= ProjectileAmmo
|
||||||
{ _amPayload :: Point2 -> World -> World
|
{ _amPayload :: Payload
|
||||||
, _amString :: String
|
, _amString :: String
|
||||||
, _amPjDraw :: Prop -> SPic
|
, _amPjDraw :: ProjectileDraw
|
||||||
, _amPjCreation :: Item -> Creature -> World -> World
|
, _amPjCreation :: Item -> Creature -> World -> World
|
||||||
}
|
}
|
||||||
| BulletAmmo
|
| BulletAmmo
|
||||||
|
|||||||
@@ -2,3 +2,6 @@
|
|||||||
--{-# LANGUAGE StrictData #-}
|
--{-# LANGUAGE StrictData #-}
|
||||||
module Dodge.Data.Ammo where
|
module Dodge.Data.Ammo where
|
||||||
|
|
||||||
|
data ProjectileDraw = DrawShell | DrawRemoteShell
|
||||||
|
data ProjectileCreate = CreateShell
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
module Dodge.Item.Weapon.Drone where
|
module Dodge.Item.Weapon.Drone where
|
||||||
|
import Dodge.Projectile.Draw
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Default.Weapon
|
import Dodge.Default.Weapon
|
||||||
--import Dodge.Default
|
--import Dodge.Default
|
||||||
@@ -59,7 +60,7 @@ aDroneWithItemParams it cr w = over props (IM.insert i theShell) w
|
|||||||
{ _prPos = pos
|
{ _prPos = pos
|
||||||
, _pjStartPos = pos
|
, _pjStartPos = pos
|
||||||
, _pjVel = rotateV dir (V2 1 0)
|
, _pjVel = rotateV dir (V2 1 0)
|
||||||
, _prDraw = _amPjDraw $ _laAmmoType am
|
, _prDraw = drawProjectile (_amPjDraw $ _laAmmoType am)
|
||||||
, _pjID = i
|
, _pjID = i
|
||||||
, _pjUpdate = const id
|
, _pjUpdate = const id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,13 @@ module Dodge.Item.Weapon.Launcher
|
|||||||
, fireTrackingShell
|
, fireTrackingShell
|
||||||
) where
|
) where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
|
import Dodge.Payload
|
||||||
|
import Dodge.Projectile.Draw
|
||||||
import Dodge.Reloading.Action
|
import Dodge.Reloading.Action
|
||||||
import Dodge.EnergyBall
|
import Dodge.EnergyBall
|
||||||
import Dodge.Default.Weapon
|
import Dodge.Default.Weapon
|
||||||
import Dodge.Item.Location
|
import Dodge.Item.Location
|
||||||
import Dodge.SoundLogic.LoadSound
|
import Dodge.SoundLogic.LoadSound
|
||||||
import Dodge.WorldEvent.Explosion
|
|
||||||
import Dodge.Item.Weapon.Shell
|
import Dodge.Item.Weapon.Shell
|
||||||
import Dodge.Item.Weapon.Remote
|
import Dodge.Item.Weapon.Remote
|
||||||
import Dodge.Item.Weapon.TriggerType
|
import Dodge.Item.Weapon.TriggerType
|
||||||
@@ -21,11 +22,7 @@ import Dodge.SoundLogic
|
|||||||
import Dodge.WorldEvent.Cloud
|
import Dodge.WorldEvent.Cloud
|
||||||
import RandomHelp
|
import RandomHelp
|
||||||
import Geometry
|
import Geometry
|
||||||
import Picture
|
|
||||||
import qualified IntMapHelp as IM
|
import qualified IntMapHelp as IM
|
||||||
--import Padding
|
|
||||||
import ShapePicture
|
|
||||||
import Shape
|
|
||||||
|
|
||||||
import qualified Streaming.Prelude as S
|
import qualified Streaming.Prelude as S
|
||||||
--import qualified Data.Set as S
|
--import qualified Data.Set as S
|
||||||
@@ -38,9 +35,9 @@ launcher :: Item
|
|||||||
launcher = defaultWeapon
|
launcher = defaultWeapon
|
||||||
{ _itConsumption = defaultLoadable
|
{ _itConsumption = defaultLoadable
|
||||||
& laAmmoType .~ ProjectileAmmo
|
& laAmmoType .~ ProjectileAmmo
|
||||||
{ _amPayload = makeExplosionAt
|
{ _amPayload = ExplosionPayload
|
||||||
, _amString = "EXPLOSIVE SHELL"
|
, _amString = "EXPLOSIVE SHELL"
|
||||||
, _amPjDraw = drawShell
|
, _amPjDraw = DrawShell
|
||||||
, _amPjCreation = fireShell
|
, _amPjCreation = fireShell
|
||||||
}
|
}
|
||||||
& laMax .~ 1
|
& laMax .~ 1
|
||||||
@@ -202,30 +199,10 @@ moveShell pj w
|
|||||||
reduceSpinBy :: Float -> Prop -> World -> World
|
reduceSpinBy :: Float -> Prop -> World -> World
|
||||||
reduceSpinBy x pj = props . ix (_pjID pj) . pjSpin *~ x
|
reduceSpinBy x pj = props . ix (_pjID pj) . pjSpin *~ x
|
||||||
|
|
||||||
drawShell :: Prop -> SPic
|
|
||||||
drawShell pj = noPic
|
|
||||||
. translateSHz 18
|
|
||||||
. uncurryV translateSHf (_prPos pj)
|
|
||||||
$ rotateSH (argV $ _pjAcc pj) shellShape
|
|
||||||
|
|
||||||
shellShape :: Shape
|
--shellShape :: Shape
|
||||||
shellShape = colorSH black $ upperPrismPoly 4 $ map toV2 [(-6,4),(-6,-4),(6,-4),(8,0),(6,4)]
|
--shellShape = colorSH black $ upperPrismPoly 4 $ map toV2 [(-6,4),(-6,-4),(6,-4),(8,0),(6,4)]
|
||||||
|
|
||||||
remoteShellShape :: Color -> SPic
|
|
||||||
remoteShellShape col = (shellShape
|
|
||||||
, setLayer BloomNoZWrite . setDepth 4.5 . color col $ circleSolid 3
|
|
||||||
)
|
|
||||||
|
|
||||||
drawRemoteShell :: Prop -> SPic
|
|
||||||
drawRemoteShell pj
|
|
||||||
| rem (t+200) 20 < 9
|
|
||||||
= doposition $ noPic shellShape
|
|
||||||
| otherwise = doposition $ remoteShellShape col
|
|
||||||
where
|
|
||||||
col | t > (-99) = green
|
|
||||||
| otherwise = red
|
|
||||||
t = _pjTimer pj
|
|
||||||
doposition = translateSPz 18 . uncurryV translateSPf (_prPos pj) . rotateSP (_pjDir pj)
|
|
||||||
|
|
||||||
pjEffTimeRange
|
pjEffTimeRange
|
||||||
:: (Int,Int)
|
:: (Int,Int)
|
||||||
@@ -269,7 +246,7 @@ remoteLauncher = launcher
|
|||||||
& itType . iyBase .~ HELD REMOTELAUNCHER
|
& itType . iyBase .~ HELD REMOTELAUNCHER
|
||||||
& itUse . rUse .~ fireRemoteShell
|
& itUse . rUse .~ fireRemoteShell
|
||||||
& itScope .~ RemoteScope (V2 0 0) 1 True
|
& itScope .~ RemoteScope (V2 0 0) 1 True
|
||||||
& itConsumption . laAmmoType . amPjDraw .~ drawRemoteShell
|
& itConsumption . laAmmoType . amPjDraw .~ DrawRemoteShell
|
||||||
-- TODO consider allowing tweaking rocket speed
|
-- TODO consider allowing tweaking rocket speed
|
||||||
|
|
||||||
fireRemoteShell :: Item -> Creature -> World -> World
|
fireRemoteShell :: Item -> Creature -> World -> World
|
||||||
@@ -363,13 +340,13 @@ makeShell it cr theupdate w = w & props %~ IM.insert i Shell
|
|||||||
, _pjZ = 20
|
, _pjZ = 20
|
||||||
, _pjStartPos = pos
|
, _pjStartPos = pos
|
||||||
, _pjVel = rotateV dir (V2 1 0)
|
, _pjVel = rotateV dir (V2 1 0)
|
||||||
, _prDraw = _amPjDraw $ _laAmmoType am
|
, _prDraw = drawProjectile (_amPjDraw $ _laAmmoType am)
|
||||||
, _pjID = i
|
, _pjID = i
|
||||||
, _pjUpdate = theupdate
|
, _pjUpdate = theupdate
|
||||||
, _pjAcc = rotateV dir (V2 3 0)
|
, _pjAcc = rotateV dir (V2 3 0)
|
||||||
, _pjDir = dir
|
, _pjDir = dir
|
||||||
, _pjSpin = 0
|
, _pjSpin = 0
|
||||||
, _pjPayload = _amPayload $ _laAmmoType am
|
, _pjPayload = usePayload $ _amPayload $ _laAmmoType am
|
||||||
, _pjTimer = 50
|
, _pjTimer = 50
|
||||||
}
|
}
|
||||||
where
|
where
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
module Dodge.Projectile where
|
module Dodge.Projectile where
|
||||||
|
import Dodge.Data
|
||||||
|
|
||||||
--createProjectile :: ProjectileType -> Item -> Creature -> World -> World
|
createProjectile :: ProjectileCreate -> Item -> Creature -> World -> World
|
||||||
--createProjectile pt = case pt of
|
createProjectile pt = case pt of
|
||||||
-- ShellType -> fireShell
|
CreateShell -> undefined
|
||||||
--
|
--
|
||||||
--fireShell :: Item -> Creature -> World -> World
|
--fireShell :: Item -> Creature -> World -> World
|
||||||
--fireShell it cr = makeShell it cr $ \pj -> pjEffAtTime 35 (trySpinByCID (_crID cr) spinamount) pj
|
--fireShell it cr = makeShell it cr $ \pj -> pjEffAtTime 35 (trySpinByCID (_crID cr) spinamount) pj
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
module Dodge.Projectile.Draw where
|
||||||
|
import Dodge.Data
|
||||||
|
import Geometry
|
||||||
|
import Picture
|
||||||
|
import Shape
|
||||||
|
import ShapePicture
|
||||||
|
|
||||||
|
drawProjectile :: ProjectileDraw -> Prop -> SPic
|
||||||
|
drawProjectile pd = case pd of
|
||||||
|
DrawShell -> drawShell
|
||||||
|
DrawRemoteShell -> drawRemoteShell
|
||||||
|
|
||||||
|
drawShell :: Prop -> SPic
|
||||||
|
drawShell pj = noPic
|
||||||
|
. translateSHz 18
|
||||||
|
. uncurryV translateSHf (_prPos pj)
|
||||||
|
$ rotateSH (argV $ _pjAcc pj) shellShape
|
||||||
|
shellShape :: Shape
|
||||||
|
shellShape = colorSH black $ upperPrismPoly 4 $ map toV2 [(-6,4),(-6,-4),(6,-4),(8,0),(6,4)]
|
||||||
|
drawRemoteShell :: Prop -> SPic
|
||||||
|
drawRemoteShell pj
|
||||||
|
| rem (t+200) 20 < 9
|
||||||
|
= doposition $ noPic shellShape
|
||||||
|
| otherwise = doposition $ remoteShellShape col
|
||||||
|
where
|
||||||
|
col | t > (-99) = green
|
||||||
|
| otherwise = red
|
||||||
|
t = _pjTimer pj
|
||||||
|
doposition = translateSPz 18 . uncurryV translateSPf (_prPos pj) . rotateSP (_pjDir pj)
|
||||||
|
remoteShellShape :: Color -> SPic
|
||||||
|
remoteShellShape col = (shellShape
|
||||||
|
, setLayer BloomNoZWrite . setDepth 4.5 . color col $ circleSolid 3
|
||||||
|
)
|
||||||
|
|
||||||
Reference in New Issue
Block a user