gore-and-ash-demo-1.0.0.0: src/server/Game/Bullet/Data.hs
module Game.Bullet.Data(
BulletId(..)
, Bullet(..)
, BulletMessage(..)
, BulletNetMessage
, bulletSpeed
, bulletLifespan
) where
import Control.DeepSeq
import Data.Hashable
import Data.Time.Clock (NominalDiffTime)
import Data.Typeable
import GHC.Generics (Generic)
import Linear
import Prelude hiding (id, (.))
import Game.GoreAndAsh.Actor
import Game.GoreAndAsh.Sync
import Game.Player.Data
import Game.Bullet.Shared
data Bullet = Bullet {
bulletId :: !BulletId
, bulletPos :: !(V2 Double)
, bulletVel :: !(V2 Double)
, bulletOwner :: !PlayerId
} deriving (Generic)
instance NFData Bullet
newtype BulletId = BulletId { unBulletId :: Int } deriving (Eq, Show, Generic)
instance NFData BulletId
instance Hashable BulletId
data BulletMessage = BulletMessageStub deriving (Typeable, Generic)
instance NFData BulletMessage
instance ActorMessage BulletId where
type ActorMessageType BulletId = BulletMessage
toCounter = unBulletId
fromCounter = BulletId
instance NetworkMessage BulletId where
type NetworkMessageType BulletId = BulletNetMessage
instance ElementWithId Bullet BulletId where
elementId = bulletId
bulletSpeed :: Double
bulletSpeed = 20
bulletLifespan :: NominalDiffTime
bulletLifespan = 5