From 4e1068c41b84f0813b82fe61816271b92ca76f48 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Thu, 30 Jul 2020 14:43:25 +0200 Subject: Basic syncing --- server/lib/Cafp/Game.hs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 server/lib/Cafp/Game.hs (limited to 'server/lib/Cafp/Game.hs') diff --git a/server/lib/Cafp/Game.hs b/server/lib/Cafp/Game.hs new file mode 100644 index 0000000..a5f367a --- /dev/null +++ b/server/lib/Cafp/Game.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} +module Cafp.Game + ( PlayerId + , Game (..) + + , newGame + , joinGame + , leaveGame + + , gameViewForPlayer + ) where + +import Cafp.Messages +import qualified Data.HashMap.Strict as HMS +import Data.Text (Text) +import qualified Data.Text as T + +type PlayerId = Int + +data Game = Game + { gamePlayers :: !(HMS.HashMap Int Text) + , gameNextPlayerId :: !Int + } deriving (Show) + +newGame :: Game +newGame = Game HMS.empty 1 + +joinGame :: Game -> (PlayerId, Game) +joinGame game@Game {..} = + let pid = gameNextPlayerId + name = "Player " <> T.pack (show pid) + players = HMS.insert pid name gamePlayers in + (pid, game {gameNextPlayerId = pid + 1, gamePlayers = players}) + +leaveGame :: PlayerId -> Game -> Game +leaveGame pid game = game {gamePlayers = HMS.delete pid $ gamePlayers game} + +gameViewForPlayer :: PlayerId -> Game -> GameView +gameViewForPlayer _ = GameView . map snd . HMS.toList . gamePlayers -- cgit v1.2.3