NAT playground accept commands with TextInput

This commit is contained in:
2021-09-16 22:25:05 -06:00
parent 6d8c69e4a8
commit 96ff07034f
3 changed files with 49 additions and 8 deletions

View File

@@ -1,3 +1,3 @@
(method new [] (method new []
(super) (super)
(addChild (new FlxGame 320 240 PlayState))) (addChild (new FlxGame 320 240 PlayState 1 60 60 true false)))

View File

@@ -8,6 +8,10 @@ import nat.BoolExpInterp;
import nat.Archive; import nat.Archive;
import nat.ArchiveUI; import nat.ArchiveUI;
import nat.ArchiveController; import nat.ArchiveController;
import flixel.addons.ui.FlxInputText;
import flixel.addons.ui.FlxUIPopup;
import flixel.text.FlxText;
import flixel.util.FlxColor;
using StringTools; using StringTools;

View File

@@ -2,21 +2,51 @@
(method &override :Void create [] (method &override :Void create []
(super.create) (super.create)
// TODO find a way to pass the archiveDir to a HaxeFlixel game // TODO find a better way to pass the archiveDir to a HaxeFlixel game
/*(let [[archiveDir] (Sys.args)] (let [archiveDir (or (Sys.getEnv "NAT_DIR") (throw "NAT_DIR environment variable must be set"))]
(new ArchiveController (new ArchiveController
(new Archive archiveDir) (new Archive archiveDir)
this))*/) this))
(add messages)
// TODO make a button that can be clicked to run typeCommand()
// TODO make sprites for entries that have images
)
(method &override :Void update [:Float elapsed] (method &override :Void update [:Float elapsed]
(super.update elapsed)) (super.update elapsed)
// Press ENTER to type a command to run
(when (and !textInput FlxG.keys.justPressed.ENTER)
(typeCommand))
(when (and textInput !textInput.alive)
(set textInput.callback null)
(set textInput null)))
(method :Void typeCommand []
(enterText
"command to run"
->commandName (controller.tryRunCommand commandName)
Math.POSITIVE_INFINITY))
(prop &mut :ArchiveController controller) (prop &mut :ArchiveController controller)
(method :Void setController [controller] (set this.controller controller)) (method :Void setController [controller] (set this.controller controller))
(prop &mut :FlxInputText textInput null)
(method :Void enterText [prompt resolve maxLength] (method :Void enterText [prompt resolve maxLength]
(resolve "")) (set textInput (new FlxInputText 0 0 300 prompt))
(textInput.screenCenter)
(set textInput.callback
->:Void [text action]
(case [text action]
([text FlxInputText.ENTER_ACTION]
(textInput.kill)
(resolve text))
(otherwise {})))
(add textInput))
(method :Void enterNumber [prompt resolve min max &opt inStepsOf] (method :Void enterNumber [prompt resolve min max &opt inStepsOf]
(resolve 0)) (resolve 0))
@@ -27,6 +57,7 @@
(method :Void chooseEntries [prompt archive resolve min max] (method :Void chooseEntries [prompt archive resolve min max]
(_chooseEntries prompt archive resolve min max [])) (_chooseEntries prompt archive resolve min max []))
// TODO is it possible to resolve with less than max?
(method :Void _chooseEntries [prompt archive resolve min max :Array<Entry> collectedEntries] (method :Void _chooseEntries [prompt archive resolve min max :Array<Entry> collectedEntries]
(let [&mut :Void->Void chooseNextEntry (let [&mut :Void->Void chooseNextEntry
null null
@@ -48,8 +79,14 @@
(doFor e changeSet (doFor e changeSet
(print (archive.fullString e)))) (print (archive.fullString e))))
(prop &mut :Int messageY 0)
(prop :FlxGroup messages (new FlxGroup))
(method :Void displayMessage [message] (method :Void displayMessage [message]
(print message)) (messages.add (new FlxText 0 messageY 0 message))
(+= messageY 8))
(method :Void reportError [error] (method :Void reportError [error]
(print error)) (let [text (new FlxText 0 messageY 0 error)]
(text.setFormat null 8 FlxColor.RED)
(messages.add text)
(+= messageY 8)))