Files
loop/src/Dodge/Data/Projectile.hs
T
2024-12-28 10:31:58 +00:00

58 lines
1.4 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Projectile where
import Dodge.Data.Item.Location
import NewInt
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Dodge.Data.Item.Use.Consumption.Ammo
import Geometry.Data
data Projectile
= Shell
{ _pjPos :: Point2
, _pjVel :: Point2
, _pjDir :: Float
, _pjSpin :: Float
, _pjID :: Int
, _pjPayload :: Payload
, _pjTimer :: Int
, _pjZ :: Float
, _pjZVel :: Float
, _pjUpdates :: [ProjectileUpdate]
, _pjType :: ProjectileType
}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data ProjectileType
= Grenade
| Rocket
{_rkHoming :: RocketHoming
,_rkSmoke :: Maybe RocketSmoke
}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data RocketHoming
= NoHoming
| HomeUsingRemoteScreen {_phRemoteID :: NewInt ItmInt}
| HomeUsingTargeting {_phTargetingID :: NewInt ItmInt}
deriving (Show, Eq, Ord, Read) --Generic, Flat)
data RocketSmoke
= ReducedRocketSmoke
deriving (Show, Eq, Ord, Read) --Generic, Flat)
makeLenses ''Projectile
makeLenses ''ProjectileType
makeLenses ''RocketHoming
deriveJSON defaultOptions ''RocketHoming
deriveJSON defaultOptions ''RocketSmoke
deriveJSON defaultOptions ''ProjectileType
deriveJSON defaultOptions ''Projectile