{-# OPTIONS_GHC -fno-warn-orphans #-} module Game.Data( Game(..) , GameMessage(..) , PlayerMap , PlayerPeerMap , BulletsMap -- | Helpers , isGameSpawnBullet , isGameDeleteBullet ) where import Control.DeepSeq import GHC.Generics (Generic) import Prelude hiding (id, (.)) import qualified Data.HashMap.Strict as H import Linear import Game.Bullet.Data import Game.Player.Data import Game.Shared import Game.GoreAndAsh.Actor import Game.GoreAndAsh.Network import Game.GoreAndAsh.Sync type PlayerMap = H.HashMap PlayerId Player type PlayerPeerMap = H.HashMap Peer PlayerId type BulletsMap = H.HashMap BulletId Bullet -- | Server local messages to game actor data GameMessage = -- | Spawn bullet at given pos with given velocity and owner GameSpawnBullet !(V2 Double) !(V2 Double) !PlayerId -- | Deletes bullet with specified id | GameDeleteBullet !BulletId deriving (Generic, Show) instance ActorMessage GameId where type ActorMessageType GameId = GameMessage toCounter = unGameId fromCounter = GameId instance NetworkMessage GameId where type NetworkMessageType GameId = GameNetMessage data Game = Game { gameId :: !GameId , gamePlayers :: !PlayerMap , gamePlayerPeers :: !PlayerPeerMap , gameBullets :: !BulletsMap , gameBulletColId :: !RemActorCollId , gamePlayerColId :: !RemActorCollId } deriving (Generic) instance NFData Game -- | Detect specific message isGameSpawnBullet :: GameMessage -> Bool isGameSpawnBullet m = case m of GameSpawnBullet _ _ _ -> True _ -> False -- | Detect specific message isGameDeleteBullet :: GameMessage -> Bool isGameDeleteBullet m = case m of GameDeleteBullet _ -> True _ -> False