{-# 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