packages feed

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