gameServer/Actions.hs
changeset 1827 3bb5e22b7f9a
parent 1823 1938ef375350
child 1834 71cb978dc85f
equal deleted inserted replaced
1826:85ba91b803ea 1827:3bb5e22b7f9a
   157 		serverInfo,
   157 		serverInfo,
   158 		adjust (\cl -> cl{roomID = 0}) clID clients,
   158 		adjust (\cl -> cl{roomID = 0}) clID clients,
   159 		adjust (\r -> r{
   159 		adjust (\r -> r{
   160 				playersIDs = IntSet.delete clID (playersIDs r),
   160 				playersIDs = IntSet.delete clID (playersIDs r),
   161 				playersIn = (playersIn r) - 1,
   161 				playersIn = (playersIn r) - 1,
   162 				readyPlayers = if isReady client then readyPlayers r - 1 else readyPlayers r
   162 				readyPlayers = if isReady client then (readyPlayers r) - 1 else readyPlayers r
   163 				}) rID $
   163 				}) rID $
   164 			adjust (\r -> r{playersIDs = IntSet.insert clID (playersIDs r)}) 0 rooms
   164 			adjust (\r -> r{playersIDs = IntSet.insert clID (playersIDs r)}) 0 rooms
   165 		)
   165 		)
   166 	where
   166 	where
   167 		rID = roomID client
   167 		rID = roomID client
   193 processAction (clID, serverInfo, clients, rooms) (RemoveRoom) = do
   193 processAction (clID, serverInfo, clients, rooms) (RemoveRoom) = do
   194 	processAction (clID, serverInfo, clients, rooms) $ AnswerLobby ["ROOM", "DEL", name room]
   194 	processAction (clID, serverInfo, clients, rooms) $ AnswerLobby ["ROOM", "DEL", name room]
   195 	processAction (clID, serverInfo, clients, rooms) $ AnswerOthersInRoom ["ROOMABANDONED", name room]
   195 	processAction (clID, serverInfo, clients, rooms) $ AnswerOthersInRoom ["ROOMABANDONED", name room]
   196 	return (clID,
   196 	return (clID,
   197 		serverInfo,
   197 		serverInfo,
   198 		Data.IntMap.map (\cl -> if roomID cl == rID then cl{roomID = 0, isMaster = False} else cl) clients,
   198 		Data.IntMap.map (\cl -> if roomID cl == rID then cl{roomID = 0, isMaster = False, isReady = False} else cl) clients,
   199 		delete rID $ adjust (\r -> r{playersIDs = IntSet.union (playersIDs room) (playersIDs r)}) 0 rooms
   199 		delete rID $ adjust (\r -> r{playersIDs = IntSet.union (playersIDs room) (playersIDs r)}) 0 rooms
   200 		)
   200 		)
   201 	where
   201 	where
   202 		room = rooms ! rID
   202 		room = rooms ! rID
   203 		rID = roomID client
   203 		rID = roomID client
   207 processAction (clID, serverInfo, clients, rooms) (UnreadyRoomClients) = do
   207 processAction (clID, serverInfo, clients, rooms) (UnreadyRoomClients) = do
   208 	processAction (clID, serverInfo, clients, rooms) $ AnswerThisRoom ("NOT_READY" : roomPlayers)
   208 	processAction (clID, serverInfo, clients, rooms) $ AnswerThisRoom ("NOT_READY" : roomPlayers)
   209 	return (clID,
   209 	return (clID,
   210 		serverInfo,
   210 		serverInfo,
   211 		Data.IntMap.map (\cl -> if roomID cl == rID then cl{isReady = False} else cl) clients,
   211 		Data.IntMap.map (\cl -> if roomID cl == rID then cl{isReady = False} else cl) clients,
   212 		rooms)
   212 		adjust (\r -> r{readyPlayers = 0}) rID rooms)
   213 	where
   213 	where
   214 		room = rooms ! rID
   214 		room = rooms ! rID
   215 		rID = roomID client
   215 		rID = roomID client
   216 		client = clients ! clID
   216 		client = clients ! clID
   217 		roomPlayers = Prelude.map (nick . (clients !)) roomPlayersIDs
   217 		roomPlayers = Prelude.map (nick . (clients !)) roomPlayersIDs