Don't run initEvent when loading the game

Rather than having a single sentWelcome boolean, avoid running the
initEvent entirely when loading an already-initialized game. Among other
things, this stops us from re-generating a level and then merging it
with the existing one when the game is loaded (oops).
This commit is contained in:
Griffin Smith 2020-02-17 13:24:31 -05:00
parent 69ccf3a77d
commit 1265155ae4
5 changed files with 17 additions and 18 deletions

View file

@ -2,7 +2,10 @@
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE RecordWildCards #-}
--------------------------------------------------------------------------------
module Xanthous.App (makeApp) where
module Xanthous.App
( makeApp
, RunType(..)
) where
--------------------------------------------------------------------------------
import Xanthous.Prelude
import Brick hiding (App, halt, continue, raw)
@ -66,12 +69,17 @@ import qualified Xanthous.Generators.Dungeon as Dungeon
type App = Brick.App GameState () Name
makeApp :: IO App
makeApp = pure $ Brick.App
data RunType = NewGame | LoadGame
deriving stock (Eq)
makeApp :: RunType -> IO App
makeApp rt = pure $ Brick.App
{ appDraw = drawGame
, appChooseCursor = const headMay
, appHandleEvent = \game event -> runAppM (handleEvent event) game
, appStartEvent = runAppM $ startEvent >> get
, appStartEvent = case rt of
NewGame -> runAppM $ startEvent >> get
LoadGame -> pure
, appAttrMap = const $ attrMap defAttr []
}
@ -86,12 +94,8 @@ startEvent = do
Nothing -> prompt_ @'StringPrompt ["character", "namePrompt"] Uncancellable
$ \(StringResult s) -> do
character . characterName ?= s
whenM (uses sentWelcome not) $ say ["welcome"] =<< use character
sentWelcome .= True
Just n ->
whenM (uses sentWelcome not) $ do
say ["welcome"] $ object [ "characterName" A..= n ]
sentWelcome .= True
say ["welcome"] =<< use character
Just n -> say ["welcome"] $ object [ "characterName" A..= n ]
initLevel :: AppM ()
initLevel = do