From e8c0b5566a63f6f565c97df1063ab8b0b76302d8 Mon Sep 17 00:00:00 2001 From: Jacek Olszak Date: Sun, 13 Aug 2023 15:56:14 +0200 Subject: [PATCH] Add next [n] - go to next frame from devtools User can go to next frame when the game is paused. To do so he can: * issue next command in REPL terminal (or 'n') * press n in game window --- devtools/control.go | 14 ++++++++++++-- devtools/internal/help/help.go | 2 +- devtools/internal/interpreter/interpreter.go | 3 +++ devtools/scripting.go | 2 ++ devtools/update.go | 9 +++++++++ 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/devtools/control.go b/devtools/control.go index d5cdb342..fcfb9809 100644 --- a/devtools/control.go +++ b/devtools/control.go @@ -11,8 +11,9 @@ import ( ) var ( - gamePaused bool - timeWhenPaused float64 + gamePaused bool + pauseOnNextFrame bool + timeWhenPaused float64 ) var helpShown bool @@ -35,3 +36,12 @@ func resumeGame() { snapshot.Draw() fmt.Println("Game resumed") } + +func resumeUntilNextFrame() { + if gamePaused { + resumeGame() + pauseOnNextFrame = true + } else { + fmt.Println("Game not paused") + } +} diff --git a/devtools/internal/help/help.go b/devtools/internal/help/help.go index fed74f34..055c65de 100644 --- a/devtools/internal/help/help.go +++ b/devtools/internal/help/help.go @@ -27,7 +27,7 @@ func PrintHelp(topic string) error { "\n\n" + "Type help topic for more information. For example: help pi or help pi.Spr" + "\n\n" + - "Available commands: help [h], pause [p], resume [r], undo [u]", + "Available commands: help [h], pause [p], resume [r], undo [u], next [n]", ) return nil default: diff --git a/devtools/internal/interpreter/interpreter.go b/devtools/internal/interpreter/interpreter.go index 712c98d9..d1f93765 100644 --- a/devtools/internal/interpreter/interpreter.go +++ b/devtools/internal/interpreter/interpreter.go @@ -191,6 +191,7 @@ const ( Paused EvalResult = 3 Undoed EvalResult = 4 Continued EvalResult = 5 + NextFrame EvalResult = 6 ) func (i Instance) Eval(cmd string) (EvalResult, error) { @@ -199,6 +200,8 @@ func (i Instance) Eval(cmd string) (EvalResult, error) { if isHelpCommand(trimmedCmd) { topic := strings.Trim(strings.TrimLeft(trimmedCmd, "help"), " ") return HelpPrinted, i.printHelp(topic) + } else if trimmedCmd == "next" || trimmedCmd == "n" { + return NextFrame, nil } else if trimmedCmd == "resume" || trimmedCmd == "r" { return Resumed, nil } else if trimmedCmd == "pause" || trimmedCmd == "p" { diff --git a/devtools/scripting.go b/devtools/scripting.go index 3a4492e9..af2b3f79 100644 --- a/devtools/scripting.go +++ b/devtools/scripting.go @@ -70,6 +70,8 @@ func evaluateNextCommandFromTerminal() { case interpreter.Undoed: snapshot.Undo() fmt.Println("Undoed last draw operation") + case interpreter.NextFrame: + resumeUntilNextFrame() } if result == interpreter.Continued { diff --git a/devtools/update.go b/devtools/update.go index 98c3f240..a8324e40 100644 --- a/devtools/update.go +++ b/devtools/update.go @@ -17,7 +17,16 @@ func updateDevTools() { } } + if pauseOnNextFrame { + pauseGame() + pauseOnNextFrame = false + } + if gamePaused { + if key.Btnp(key.N) { + resumeUntilNextFrame() + } + inspector.Update() }