{-# 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 , _buSpawn :: BulletSpawn , _buUpdateMod :: BulletUpdateMod , _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 BulletUpdateMod = NoBulletUpdateMod | ABulletUpdateMod -- hack for template splicing deriving (Show, Eq, Ord, Enum, Bounded, Read) --Generic, Flat) data BulletEffect = DestroyBullet | BounceBullet | PenetrateBullet deriving (Eq, Ord, Show, Enum, Bounded, Read) --Generic, Flat) data BulletSpawn = 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) --Generic, Flat) makeLenses ''Bullet makeLenses ''BulletSpawn deriveJSON defaultOptions ''EnergyBallType deriveJSON defaultOptions ''BulletUpdateMod deriveJSON defaultOptions ''BulletEffect deriveJSON defaultOptions ''BulletSpawn deriveJSON defaultOptions ''BulletTrajectory deriveJSON defaultOptions ''BulletTrajectoryType deriveJSON defaultOptions ''Bullet