{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Bullet ( module Dodge.Data.Bullet , module Dodge.Data.Damage )where import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Damage import Geometry.Data data Bullet = Bullet { _buDelayFraction :: Float , _buEffect :: BulletEffect , _buPayload :: BulletPayload , _buTrajectory :: BulletTrajectory , _buVel :: Point2 , _buDrag :: Float , _buPos :: Point2 , _buOldPos :: Point2 , _buWidth :: Float , _buTimer :: Int , _buDamages :: [Damage] } deriving (Show, Eq, Ord, Read) --Generic, Flat) data EnergyBallType = IncBall | TeslaBall | ConcBall | FlashBall deriving (Show, Eq, Ord, Enum, Bounded, Read) --Generic, Flat) data BulletEffect = DestroyBullet | BounceBullet | PenetrateBullet deriving (Eq, Ord, Show, Enum, Bounded, Read) --Generic, Flat) data BulletPayload = BulBall {_spawnEBT :: EnergyBallType} | BulSpark | 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 ''EnergyBallType deriveJSON defaultOptions ''BulletEffect deriveJSON defaultOptions ''BulletPayload deriveJSON defaultOptions ''BulletTrajectory deriveJSON defaultOptions ''BulletTrajectoryType deriveJSON defaultOptions ''Bullet