{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Bullet ( module Dodge.Data.Bullet, module Dodge.Data.Damage, ) where import Dodge.Data.EnergyBall.Type import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Damage import Geometry.Data data Bullet = Bullet { _buEffect :: BulletEffect , _buPayload :: BulletPayload , _buVel :: Point2 , _buDrag :: Float , _buPos :: Point2 , _buOldPos :: Point2 } deriving (Show, Eq, Ord, Read) --Generic, Flat) data BulletEffect = DestroyBullet | BounceBullet | PenetrateBullet deriving (Eq, Ord, Show, Enum, Bounded, Read) --Generic, Flat) data BulletPayload = BulBall {_spawnEBT :: EnergyBallType} | BulPlain {_buDam :: Int} | BulFlak | BulFrag | BulGas deriving (Show, Eq, Ord, Read) --Generic, Flat) data BulletTrajectory = BasicBulletTrajectory | BezierTrajectory Point2 Point2 Point2 | FlechetteTrajectory Point2 | MagnetTrajectory Point2 deriving (Show, Eq, Ord, Read) --Generic, Flat) data BulletTrajectoryType = BasicBulletTrajectoryType | BezierTrajectoryType | FlechetteTrajectoryType | MagnetTrajectoryType deriving (Show, Eq, Ord, Read, Enum, Bounded) --Generic, Flat) makeLenses ''Bullet makeLenses ''BulletPayload deriveJSON defaultOptions ''BulletEffect deriveJSON defaultOptions ''BulletPayload deriveJSON defaultOptions ''BulletTrajectory deriveJSON defaultOptions ''BulletTrajectoryType deriveJSON defaultOptions ''Bullet