From 3a9592f9585b842b09643684e0060199233416e4 Mon Sep 17 00:00:00 2001 From: Dennis Frieberg Date: Tue, 30 Mar 2021 14:21:28 +0200 Subject: [PATCH] added removePlayer --- tickLeiste/src/Data/TickLeiste.hs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tickLeiste/src/Data/TickLeiste.hs b/tickLeiste/src/Data/TickLeiste.hs index ef5a65d..ecfe4ea 100644 --- a/tickLeiste/src/Data/TickLeiste.hs +++ b/tickLeiste/src/Data/TickLeiste.hs @@ -22,7 +22,7 @@ module Data.TickLeiste where import qualified Data.Map.Strict as M -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe,maybe) import qualified Data.Text as T import qualified Data.UUID as U @@ -110,7 +110,14 @@ setPlayerTick p t tl@(TickLeiste l pl) = TickLeiste (insertPlayerToLeiste p t l' -- TODO removePlayer :: Player -> TickLeiste -> TickLeiste -removePlayer = error "removePlayer not yet implemented (Franzi?)" +removePlayer p tl@(TickLeiste {leiste = l, player = pm}) = TickLeiste l' pm' + where + pt = getPlayerTick p tl + l' = maybe + l + (flip (removePlayerFromLeiste p) l) + pt + pm' = removePlayerFromPlayerMap p pm -- | convert the Tick[eiste to a list of 'Tick' and 'Player' list pairs. These list are ordered toList :: TickLeiste -> [(Tick, [Player])] @@ -120,7 +127,7 @@ toList (TickLeiste l _) = M.toAscList l -- TODO fromList :: [(Tick, [Player])] -> TickLeiste -fromList = error "not implemented" +fromList = error "not implemented (Franzi?)" -- | convert from 'TickLeiste' to a map from 'Tick' to list of 'Player' toMap :: TickLeiste -> M.Map Tick [Player] @@ -130,6 +137,7 @@ toMap = leiste -- it removes a player from a specific tick, if the player -- wasn't at the tick it is the identity. +-- TODO this can be written more beautifully with something like M.update removePlayerFromLeiste :: Player -> Tick -> M.Map Tick [Player] -> M.Map Tick [Player] removePlayerFromLeiste p t l = fromMaybe l $ do list <- l M.!? t @@ -138,6 +146,9 @@ removePlayerFromLeiste p t l = fromMaybe l $ do then return $ M.delete t l else return $ M.insert t list' l +removePlayerFromPlayerMap :: Player -> M.Map Player Tick -> M.Map Player Tick +removePlayerFromPlayerMap = M.delete + insertPlayerToLeiste :: Player -> Tick -> M.Map Tick [Player] -> M.Map Tick [Player] insertPlayerToLeiste p t l = M.insert t (M.findWithDefault [] t l ++ [p]) l