implemented assist prompt

This commit is contained in:
Jonathan Lamothe 2019-09-26 01:23:34 -04:00
parent ffdb8e1e8c
commit 75803edfe7
3 changed files with 55 additions and 7 deletions

View File

@ -32,6 +32,7 @@ module Mtlstats.Actions
, validateGameDate , validateGameDate
, createPlayer , createPlayer
, addPlayer , addPlayer
, recordGoalAssists
, awardGoal , awardGoal
) where ) where
@ -149,6 +150,10 @@ addPlayer s = fromMaybe s $ do
Just $ s & database.dbPlayers Just $ s & database.dbPlayers
%~ (player:) %~ (player:)
-- | Awards the goal and assists to the players
recordGoalAssists :: ProgState -> ProgState
recordGoalAssists = undefined
-- | Awards a goal to a player -- | Awards a goal to a player
awardGoal awardGoal
:: Int :: Int

View File

@ -190,18 +190,24 @@ goalInput gs
recordGoalC :: Controller recordGoalC :: Controller
recordGoalC = Controller recordGoalC = Controller
{ drawController = \s -> let { drawController = \s -> let
game = s^.database.dbGames (game, goal) = gameGoal s
goal = succ $ s^.progMode.gameStateL.pointsAccounted
in drawPrompt (recordGoalPrompt game goal) s in drawPrompt (recordGoalPrompt game goal) s
, handleController = \e -> do , handleController = \e -> do
game <- gets $ view $ database.dbGames (game, goal) <- gets gameGoal
goal <- succ <$> gets (view $ progMode.gameStateL.pointsAccounted)
promptHandler (recordGoalPrompt game goal) e promptHandler (recordGoalPrompt game goal) e
return True return True
} }
recordAssistC :: Controller recordAssistC :: Controller
recordAssistC = undefined recordAssistC = Controller
{ drawController = \s -> let
(game, goal, assist) = gameGoalAssist s
in drawPrompt (recordAssistPrompt game goal assist) s
, handleController = \e -> do
(game, goal, assist) <- gets gameGoalAssist
promptHandler (recordAssistPrompt game goal assist) e
return True
}
reportC :: Controller reportC :: Controller
reportC = Controller reportC = Controller
@ -266,3 +272,15 @@ confirmCreatePlayerC = Controller
Nothing -> return () Nothing -> return ()
return True return True
} }
gameGoal :: ProgState -> (Int, Int)
gameGoal s =
( s^.database.dbGames
, succ $ s^.progMode.gameStateL.pointsAccounted
)
gameGoalAssist :: ProgState -> (Int, Int, Int)
gameGoalAssist s = let
(game, goal) = gameGoal s
assist = succ $ length $ s^.progMode.gameStateL.assistsBy
in (game, goal, assist)

View File

@ -38,6 +38,7 @@ module Mtlstats.Prompt (
playerPosPrompt, playerPosPrompt,
selectPlayerPrompt, selectPlayerPrompt,
recordGoalPrompt, recordGoalPrompt,
recordAssistPrompt
) where ) where
import Control.Monad (when) import Control.Monad (when)
@ -205,8 +206,8 @@ recordGoalPrompt
-- ^ The goal number -- ^ The goal number
-> Prompt -> Prompt
recordGoalPrompt game goal = selectPlayerPrompt recordGoalPrompt game goal = selectPlayerPrompt
( "*** GAME " ++ padNum 2 game ++ " ***\n" ++ ( "*** GAME " ++ padNum 2 game ++ " ***\n"
"Who scored goal number " ++ show goal ++ "? " ++ "Who scored goal number " ++ show goal ++ "? "
) $ \case ) $ \case
Nothing -> return () Nothing -> return ()
Just n -> nth n <$> gets (view $ database.dbPlayers) Just n -> nth n <$> gets (view $ database.dbPlayers)
@ -214,5 +215,29 @@ recordGoalPrompt game goal = selectPlayerPrompt
(return ()) (return ())
(\p -> modify $ progMode.gameStateL.goalBy .~ p^.pName) (\p -> modify $ progMode.gameStateL.goalBy .~ p^.pName)
-- | Prompts for a player who assisted the goal
recordAssistPrompt
:: Int
-- ^ The game number
-> Int
-- ^ The goal nuber
-> Int
-- ^ The assist number
-> Prompt
recordAssistPrompt game goal assist = selectPlayerPrompt
( "*** GAME " ++ padNum 2 game ++ " ***\n"
++ "Goal: " ++ show goal ++ "\n"
++ "Assist #" ++ show assist ++ ": "
) $ \case
Nothing -> modify recordGoalAssists
Just n -> nth n <$> gets (view $ database.dbPlayers)
>>= maybe
(return ())
(\p -> do
modify $ progMode.gameStateL.assistsBy %~ (++[p^.pName])
nAssists <- length <$> gets (view $ progMode.gameStateL.assistsBy)
when (nAssists >= maxAssists) $
modify recordGoalAssists)
drawSimplePrompt :: String -> ProgState -> C.Update () drawSimplePrompt :: String -> ProgState -> C.Update ()
drawSimplePrompt pStr s = C.drawString $ pStr ++ s^.inputBuffer drawSimplePrompt pStr s = C.drawString $ pStr ++ s^.inputBuffer