diff options
author | Griffin Smith <grfn@gws.fyi> | 2021-11-06T15·44-0400 |
---|---|---|
committer | grfn <grfn@gws.fyi> | 2021-11-06T15·52+0000 |
commit | ff6c008d7884975f3dc0295a75b9383fd2c3a2ed (patch) | |
tree | 7b84c368db6c152f9e871cae8b9faa676262e1a1 /users/grfn/xanthous/src/Xanthous/App.hs | |
parent | 099f36e5ee8b18126e006219153e3cf6fb6e7a50 (diff) |
feat(gs/xanthous): Default to the current save file r/3008
When saving, default to the save file that was loaded for the game if any. To support this, this also makes text prompts support a default, which will be used if no value is input. Change-Id: I72a826499d6e987b939e3465a2d29167e53416be Reviewed-on: https://cl.tvl.fyi/c/depot/+/3801 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
Diffstat (limited to 'users/grfn/xanthous/src/Xanthous/App.hs')
-rw-r--r-- | users/grfn/xanthous/src/Xanthous/App.hs | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/users/grfn/xanthous/src/Xanthous/App.hs b/users/grfn/xanthous/src/Xanthous/App.hs index bb6d6cf4ddda..369f6ae2ff9e 100644 --- a/users/grfn/xanthous/src/Xanthous/App.hs +++ b/users/grfn/xanthous/src/Xanthous/App.hs @@ -73,7 +73,7 @@ import qualified Xanthous.Generators.Level.Dungeon as Dungeon type App = Brick.App GameState AppEvent ResourceName -data RunType = NewGame | LoadGame +data RunType = NewGame | LoadGame FilePath deriving stock (Eq) makeApp :: GameEnv -> RunType -> IO App @@ -83,7 +83,7 @@ makeApp env rt = pure $ Brick.App , appHandleEvent = \game event -> runAppM (handleEvent event) env game , appStartEvent = case rt of NewGame -> runAppM (startEvent >> get) env - LoadGame -> pure + LoadGame save -> pure . (savefile ?~ save) , appAttrMap = const $ attrMap defAttr [] } @@ -334,15 +334,24 @@ handleCommand Fire = do handleCommand Save = do -- TODO default save locations / config file? - prompt_ @'StringPrompt ["save", "location"] Cancellable - $ \(StringResult filename) -> do - exists <- liftIO . doesFileExist $ unpack filename - if exists - then confirm ["save", "overwrite"] (object ["filename" A..= filename]) - $ doSave filename - else doSave filename + use savefile >>= \case + Just filepath -> + stringPromptWithDefault_ + ["save", "location"] + Cancellable + (pack filepath) + promptCallback + Nothing -> prompt_ @'StringPrompt ["save", "location"] Cancellable promptCallback continue where + promptCallback :: PromptResult 'StringPrompt -> AppM () + promptCallback (StringResult filename) = do + sf <- use savefile + exists <- liftIO . doesFileExist $ unpack filename + if exists && sf /= Just (unpack filename) + then confirm ["save", "overwrite"] (object ["filename" A..= filename]) + $ doSave filename + else doSave filename doSave filename = do src <- gets saveGame lift . liftIO $ do |