{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE StrictData #-} module Dodge.Data.Bullet where import Dodge.Data.Damage import Geometry.Data import Control.Lens data Bullet = Bullet { _buState :: BulletState , _buEffect :: BulletEffect , _buSpawn :: BulletSpawn , _buUpdateMod :: BulletUpdateMod , _buTrajectory :: BulletTrajectory , _buVel :: Point2 , _buDrag :: Float , _buPos :: Point2 , _buOldPos :: Point2 , _buWidth :: Float , _buTimer :: Int , _buDamages :: [Damage] } deriving (Show,Read,Eq,Ord) data EnergyBallType = IncBall | TeslaBall | ConcBall deriving (Show,Read,Eq,Ord,Enum,Bounded) data BulletState = NormalBulletState | DelayedBullet Float deriving (Show,Read,Eq,Ord) data BulletUpdateMod = NoBulletUpdateMod deriving (Show,Read,Eq,Ord,Enum,Bounded) data BulletEffect = DestroyBullet | BounceBullet | PenetrateBullet deriving (Eq,Ord,Show,Read,Enum,Bounded) data BulletSpawn = BulBall EnergyBallType | BulSpark deriving (Show,Read,Eq,Ord) data BulletTrajectory = BasicBulletTrajectory | BezierTrajectory Point2 Point2 Point2 | FlechetteTrajectory Point2 | MagnetTrajectory Point2 deriving (Show,Read,Eq,Ord) makeLenses ''Bullet