scene selection from pause menu

This commit is contained in:
Trent Nelson
2023-08-02 12:34:07 -07:00
parent c0d682ab89
commit 56e2337aee
3 changed files with 32 additions and 20 deletions

View File

@@ -79,6 +79,18 @@
(prop &mut :SimpleWindow pauseMenu null)
(method :Void sceneSelection []
// TODO map escape: back to pause menu and highlight sceneSelectionIndex
(let [runners (movie.labelRunners)]
(chooseString
"Skip to scene?"
(sort (collect (runners.keys)))
->label {
(let [m flxMovie]
(m.prepareForSkip)
((dictGet runners label) m.skipMovie))
})))
(method :Void showPauseMenu [:Continuation resume]
// register escape to resume (and register escape to pause when resuming lol)
(sh.registerItem "{escape} resume" ->cc {
@@ -86,7 +98,8 @@
(sh.registerItem "{escape} pause" ->cc (showPauseMenu cc) true)
(resume)
} true)
(let [choices ["" "Resume" "Options" "Main Menu" "Quit to Desktop"]
(let [choices ["" "Resume" "Scene Selection" "Options" "Main Menu" "Quit to Desktop"]
sceneSelectionIndex (choices.indexOf "Scene Selection")
optsIdx (choices.indexOf "Options")]
// chooseString automatically sets pauseMenu
(chooseString "PAUSED" choices
@@ -95,6 +108,9 @@
("Resume"
(sh.registerItem "{escape} pause" ->cc (showPauseMenu cc) true)
(resume))
("Scene Selection"
(sh.cancel)
(sceneSelection))
("Options"
(sh.cancel)
(MenuState.optionsMenu

View File

@@ -55,5 +55,6 @@ class FlxMovie extends Movie<FlxSprite, ActorFlxSprite, FlxSound, FlxSound, FlxS
public function update(elapsed:Float):Void {}
// Such a hack:
private var skipMovie:FlxMovie = null;
public var skipMovie:FlxMovie = null;
public function prepareForSkip():Void {}
}

View File

@@ -416,29 +416,24 @@
(linearMotion skipping inCameraPos 0 0 speed finish soundLoop volumeMod [outCameraPos])))))
(defMacro addSkips [flxMovieClass]
`(#when debug
(method prepareForSkip []
`{
(method &override :Void prepareForSkip []
(kiss_tools.TimerWithPause.stopAll)
(flxDirector.pause)
(.clear (director.shortcutHandler))
(doCleanup)
(set skipMovie (new ,flxMovieClass flxDirector)))
(preload
(.registerItem (director.shortcutHandler) "[n]ext label"
->cc {
(prepareForSkip)
(runFromNextLabel skipMovie)
})
(#when debug
(preload
(.registerItem (director.shortcutHandler) "[n]ext label"
->cc {
(prepareForSkip)
(runFromNextLabel skipMovie)
})
(.registerItem (director.shortcutHandler) "skip to [l]abel"
->cc
(let [runners (labelRunners)]
(director.chooseString
"Skip to scene?"
(sort (collect (runners.keys)))
->label {
(prepareForSkip)
((dictGet runners label) skipMovie)
}))))))
(.registerItem (director.shortcutHandler) "skip to [l]abel"
->cc
(flxDirector.sceneSelection))))
})