{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Projectile where import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Item.Use.Consumption.Ammo import Geometry.Data data ProjectileType = Grenade | Rocket {_rocketHoming :: ProjectileHoming} deriving (Eq, Ord, Show, Read) --Generic, Flat) data Projectile = Shell { _prjPos :: Point2 , _prjVel :: Point2 , _prjDir :: Float , _prjSpin :: Float , _prjID :: Int , _prjPayload :: Payload , _prjTimer :: Int , _prjZ :: Float , _prjZVel :: Float , _prjUpdates :: [ProjectileUpdate] , _prjType :: ProjectileType } deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''Projectile makeLenses ''ProjectileType deriveJSON defaultOptions ''ProjectileType deriveJSON defaultOptions ''Projectile