From 0ac7156366f1110f09e10c068e9764201fb05f7a Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 18 Dec 2022 05:39:15 +0000 Subject: [PATCH] Position arg type in NAT --- .../nat-archive-tool/src/nat/ArchiveController.hx | 3 +++ .../nat-archive-tool/src/nat/ArchiveController.kiss | 7 +++++-- projects/nat-archive-tool/src/nat/ArchiveUI.hx | 7 ++++++- .../source/PlayState.kiss | 12 +++++++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/projects/nat-archive-tool/src/nat/ArchiveController.hx b/projects/nat-archive-tool/src/nat/ArchiveController.hx index 896177d4..ef7ac843 100644 --- a/projects/nat-archive-tool/src/nat/ArchiveController.hx +++ b/projects/nat-archive-tool/src/nat/ArchiveController.hx @@ -3,6 +3,7 @@ package nat; import kiss.Prelude; import kiss.List; import kiss.Stream; +import nat.components.Position; import haxe.Constraints; import haxe.DynamicAccess; import uuid.Uuid; @@ -27,6 +28,8 @@ enum CommandArgType { // TODO playground name -- choose from archive.playgrounds + Position; + // Then again the more of these I add the more convoluted CollectAndValidateArgs gets, // and the more stream reader methods I need to write } diff --git a/projects/nat-archive-tool/src/nat/ArchiveController.kiss b/projects/nat-archive-tool/src/nat/ArchiveController.kiss index 6964137e..19111b6a 100644 --- a/projects/nat-archive-tool/src/nat/ArchiveController.kiss +++ b/projects/nat-archive-tool/src/nat/ArchiveController.kiss @@ -106,7 +106,9 @@ (continuation entries))) min max)) - (null))) + (Position + (ui.choosePosition "${arg.name}:" continuation)) + (never null))) // TODO try catch and ui.reportError // TODO maaaybe support escape sequences? @@ -176,7 +178,8 @@ ((exprOr (SelectedEntries _ _) (Entries _ _)) `:Array ,name) ((Text _) `:String ,name) ((VarText _) `:Array ,name) - ((Number _ _ _) `:Float ,name))) + ((Number _ _ _) `:Float ,name) + (Position `:Position ,name))) commandArgs (for [name type] argPairs `(object name ,(symbolName name) type ,type))] diff --git a/projects/nat-archive-tool/src/nat/ArchiveUI.hx b/projects/nat-archive-tool/src/nat/ArchiveUI.hx index 5ff2e5d7..592a5d6d 100644 --- a/projects/nat-archive-tool/src/nat/ArchiveUI.hx +++ b/projects/nat-archive-tool/src/nat/ArchiveUI.hx @@ -65,7 +65,12 @@ interface ArchiveUI { * Update UI to show that the set of selected entries has changed */ function onSelectionChanged(selectedEntries:Array, lastSelectedEntries:Array):Void; - + + /** + * Prompt the user to choose a position + */ + function choosePosition(prompt:String, resolve:Position->Void):Void; + /** * A way to tell NAT where the cursor is */ diff --git a/projects/nat-flixel-desktop-playground/source/PlayState.kiss b/projects/nat-flixel-desktop-playground/source/PlayState.kiss index 9fe35fa1..3440bf05 100644 --- a/projects/nat-flixel-desktop-playground/source/PlayState.kiss +++ b/projects/nat-flixel-desktop-playground/source/PlayState.kiss @@ -80,7 +80,12 @@ (when (and textInput !textInput.alive) (set textInput null)) - + (when resolvePosition + (when FlxG.mouse.justPressed + (whenLet [rp resolvePosition + (Some pos) (cursorPosition)] + (set resolvePosition null) + (rp pos)))) // Control the UI camera with WASD, and the playground camera with arrow keys: (var KEYBOARD_SCROLL_SPEED 800) @@ -214,6 +219,11 @@ (whenLet [sprite (dictGet spriteSystem.sprites e.id)] (sprite.updateColor)))) +(prop &mut :Position->Void resolvePosition) +(method :Void choosePosition [prompt resolve] + (displayMessage prompt) + (set resolvePosition resolve)) + (method :Option cursorPosition [] (let [pos (FlxG.mouse.getWorldPosition FlxG.camera)] (Some (object x pos.x y pos.y z 0.0)))) \ No newline at end of file