diff --git a/src/Waterdeep/Actions.hs b/src/Waterdeep/Actions.hs index 8ac4cb1..11a2679 100644 --- a/src/Waterdeep/Actions.hs +++ b/src/Waterdeep/Actions.hs @@ -152,7 +152,7 @@ distributeQuests = do activePlayerState . playerIncompleteQuests <>= [quest] name <- use $ activePlayerName broadcast $ printf "%s chose the %s quest." name (quest ^. questTitle) - p' <- getNextPlayer =<< use gameActivePlayer + p' <- nextPlayerID <$> use gameActivePlayer <*> get withActivePlayer p' $ distribute (deleteAt i remQuests) distribute =<< catMaybes <$> (flip replicateM drawQuest' =<< use gameNumberOfPlayers) diff --git a/src/Waterdeep/Logic.hs b/src/Waterdeep/Logic.hs index e995146..31bb7c2 100644 --- a/src/Waterdeep/Logic.hs +++ b/src/Waterdeep/Logic.hs @@ -105,17 +105,22 @@ waterdeepGame = do , ("No", return ()) ] gameConsecutivePasses .= 0 - gameCurrentPlayer <~ (getNextPlayer =<< use gameCurrentPlayer) + advanceToNextPlayer loop Nothing -> do passes <- gameConsecutivePasses <+= 1 when (passes < np) $ do - gameCurrentPlayer <~ (getNextPlayer =<< use gameCurrentPlayer) + advanceToNextPlayer loop scoreFinalPoints notifyState determineWinners +advanceToNextPlayer :: Waterdeep () +advanceToNextPlayer = do + p' <- nextPlayerID <$> use gameCurrentPlayer <*> get + gameCurrentPlayer .= p' + beginRound :: Int -> Waterdeep () beginRound round = do broadcast $ "Starting round " ++ show round ++ "." diff --git a/src/Waterdeep/Types.hs b/src/Waterdeep/Types.hs index ab7f5f2..9c27f09 100644 --- a/src/Waterdeep/Types.hs +++ b/src/Waterdeep/Types.hs @@ -86,8 +86,8 @@ module Waterdeep.Types , activePlayerState , activePlayerName , withActivePlayer + , nextPlayerID , noPlayerID - , getNextPlayer , newPlayerState , newBuildingState , notifyState @@ -325,10 +325,8 @@ withActivePlayer p m = do gameActivePlayer .= p0 return r -getNextPlayer :: PlayerID -> Waterdeep PlayerID -getNextPlayer p = do - np <- use gameNumberOfPlayers - return $ (p `mod` np) + 1 +nextPlayerID :: PlayerID -> WaterdeepState -> PlayerID +nextPlayerID p w = (p `mod` (w ^. gameNumberOfPlayers)) + 1 noPlayerID :: PlayerID noPlayerID = 0