From e6b0a5f37f0cd076ede2cc0627d4667a5e8916df Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 21 Feb 2025 18:32:48 +0000 Subject: [PATCH] add 'saveKeys' boolean to GameType.game_type, which should tell us to assign the new userKeys record to the InputState (which is implemented), and should also tell us to convert the keys to a string and save it to controls.config --- fcore/game-type.sml | 6 +++--- fcore/game-update.sml | 2 +- fcore/level/level-update.sml | 2 +- fcore/options/options-update.sml | 12 ++++++------ fcore/title/title-update.sml | 4 ++-- shell/gl-draw.sml | 11 +++++++++++ 6 files changed, 24 insertions(+), 13 deletions(-) diff --git a/fcore/game-type.sml b/fcore/game-type.sml index 1b1d4a9..827bb6a 100644 --- a/fcore/game-type.sml +++ b/fcore/game-type.sml @@ -5,7 +5,7 @@ sig | TITLE of TitleType.title_type | OPTIONS of OptionsType.options_type - type game_type = {userKeys: CoreKey.user_key, mode: mode} + type game_type = {mode: mode, userKeys: CoreKey.user_key, saveKeys: bool} val init: CoreKey.user_key -> game_type end @@ -17,10 +17,10 @@ struct | TITLE of TitleType.title_type | OPTIONS of OptionsType.options_type - type game_type = {userKeys: CoreKey.user_key, mode: mode} + type game_type = {mode: mode, userKeys: CoreKey.user_key, saveKeys: bool} fun init userKeys = let val mode = TITLE TitleType.initial - in {mode = mode, userKeys = userKeys} + in {mode = mode, userKeys = userKeys, saveKeys = false} end end diff --git a/fcore/game-update.sml b/fcore/game-update.sml index 22c9936..e6a5199 100644 --- a/fcore/game-update.sml +++ b/fcore/game-update.sml @@ -4,7 +4,7 @@ struct fun update (game: GameType.game_type, input, time) = let - val {mode, userKeys} = game + val {mode, userKeys, saveKeys = _} = game in case mode of LEVEL level => LevelUpdate.update (level, input, userKeys, time) diff --git a/fcore/level/level-update.sml b/fcore/level/level-update.sml index d8f2370..d2300da 100644 --- a/fcore/level/level-update.sml +++ b/fcore/level/level-update.sml @@ -42,6 +42,6 @@ struct , fallingEnemies = fallingEnemies } in - {mode = GameType.LEVEL mode, userKeys = userKeys} + {mode = GameType.LEVEL mode, userKeys = userKeys, saveKeys = false} end end diff --git a/fcore/options/options-update.sml b/fcore/options/options-update.sml index 06abec9..0939d77 100644 --- a/fcore/options/options-update.sml +++ b/fcore/options/options-update.sml @@ -20,7 +20,7 @@ struct , tempKeys = tempKeys } in - {mode = GameType.OPTIONS options, userKeys = userKeys} + {mode = GameType.OPTIONS options, userKeys = userKeys, saveKeys = false} end fun onSelected (options, input: FrameInputType.t, userKeys, time) = @@ -56,7 +56,7 @@ struct , tempKeys = userKeys } in - {mode = GameType.OPTIONS options, userKeys = userKeys} + {mode = GameType.OPTIONS options, userKeys = userKeys, saveKeys = false} end fun moveFocusUp (options: OptionsType.options_type, newFocus, userKeys, time) = @@ -81,7 +81,7 @@ struct , tempKeys = userKeys } in - {mode = GameType.OPTIONS options, userKeys = userKeys} + {mode = GameType.OPTIONS options, userKeys = userKeys, saveKeys = false} end fun moveFocusDown @@ -104,7 +104,7 @@ struct , tempKeys = userKeys } in - {mode = GameType.OPTIONS options, userKeys = userKeys} + {mode = GameType.OPTIONS options, userKeys = userKeys, saveKeys = false} end fun select (options: OptionsType.options_type, userKeys) = @@ -118,7 +118,7 @@ struct , tempKeys = userKeys } in - {mode = GameType.OPTIONS options, userKeys = userKeys} + {mode = GameType.OPTIONS options, userKeys = userKeys, saveKeys = false} end fun deselect (options: OptionsType.options_type, userKeys) = @@ -132,7 +132,7 @@ struct , tempKeys = userKeys } in - {mode = GameType.OPTIONS options, userKeys = userKeys} + {mode = GameType.OPTIONS options, userKeys = userKeys, saveKeys = false} end fun withLeftKeys (newLeft, userKeys: CoreKey.user_key) = diff --git a/fcore/title/title-update.sml b/fcore/title/title-update.sml index 31e4e8b..6d04b96 100644 --- a/fcore/title/title-update.sml +++ b/fcore/title/title-update.sml @@ -18,7 +18,7 @@ struct GameType.TITLE titleState end in - {mode = mode, userKeys = userKeys} + {mode = mode, userKeys = userKeys, saveKeys = false} end | OPTIONS_BUTTON => let @@ -35,6 +35,6 @@ struct GameType.TITLE titleState end in - {mode = mode, userKeys = userKeys} + {mode = mode, userKeys = userKeys, saveKeys = false} end end diff --git a/shell/gl-draw.sml b/shell/gl-draw.sml index 02a7eb3..6001db0 100644 --- a/shell/gl-draw.sml +++ b/shell/gl-draw.sml @@ -286,6 +286,16 @@ struct | OPTIONS options => drawOptions (shellState, options) end + fun saveKeys game = + let val () = InputState.setControls (#userKeys game) + in () + end + + fun runEffects game = + let val () = if #saveKeys game then saveKeys game else () + in () + end + fun helpLoop (shellState as {window, ...}: t, game) = case Glfw.windowShouldClose window of false => @@ -298,6 +308,7 @@ struct val game = GameUpdate.update (game, input, time) val shellState = drawMode (shellState, game) + val () = runEffects game val _ = Glfw.swapBuffers window val _ = Glfw.pollEvents ()