From 6171f48dc59d4cfa80e90594c9ead08e5691222c Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 30 Aug 2022 17:01:45 +0000 Subject: [PATCH] Can add multiple labels for bonus and task --- .../source/HabitState.kiss | 42 +++++++++++++------ .../src/kiss_flixel/SimpleWindow.kiss | 23 ++++++---- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss index c54394d2..4f908344 100644 --- a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss +++ b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss @@ -37,6 +37,7 @@ (fHalf (max rewardSprite.pixels.width rewardSprite.pixels.height))) (prop &mut :EntryType typeAdding Todo) +(prop &mut :Array labelsAdding []) (prop &mut :FlxInputText entryNameText) (prop &mut :DebugLayer debugLayer null) @@ -44,6 +45,8 @@ (prop &mut t 1) (prop :FlxRect disableMouse (new FlxRect 0 0 0 0)) (method &override :Void update [:Float elapsed] + // workaround for text box somehow losing focus: + (when entryNameText (set entryNameText.hasFocus true)) (super.update elapsed) (if (windowIsShown) @@ -116,24 +119,24 @@ (method startAdding [:EntryType type] (set typeAdding type) + (set labelsAdding []) + (localVar &mut title "Alternating labels for this habit:") + (whenLet [Todo type] (set title "Steps for completing this task:")) + (set entryCreationWindow (new SimpleWindow title null null 0.9 0.9)) (set entryNameText (new FlxInputText 0 0 FlxG.width "" textSize true)) + (entryCreationWindow.addControl entryNameText) + (entryCreationWindow.makeText "Create" FlxColor.LIME ->:Void _ (addCreatedEntry)) (when entryWindow (set entryWindow.keyboardEnabled false)) - (set entryNameText.cameras [uiCamera]) - (set entryNameText.hasFocus true) - (add entryNameText)) + (entryCreationWindow.show) + (set entryNameText.hasFocus true)) (when (and entryNameText FlxG.keys.justPressed.ENTER) - // addEntry() calls save() - (model.addEntry typeAdding [entryNameText.text]) - (refreshModel) - (entryNameText.kill) - (set entryNameText null) - (when entryWindow - (set entryWindow.keyboardEnabled true) - (entryWindow.show))) + (entryCreationWindow.makeText entryNameText.text) + (labelsAdding.push entryNameText.text) + (set entryNameText.text "") + (set entryNameText.caretIndex 0)) } - // Left and right arrow keys can switch between unlocked puzzles (unless (or entryNameText (tempWindowIsShown)) @@ -761,4 +764,17 @@ tallies (Math.floor (/ points scaledTallyUnit))] (+= str (* (nth symbols i) tallies)) (-= points (* tallies scaledTallyUnit)))) - str)) \ No newline at end of file + str)) + +(method addCreatedEntry [] + // addEntry() calls save() + (unless labelsAdding + (return)) + (model.addEntry typeAdding labelsAdding) + (refreshModel) + (entryNameText.kill) + (set entryNameText null) + (entryCreationWindow.hide) + (when entryWindow + (set entryWindow.keyboardEnabled true) + (entryWindow.show))) \ No newline at end of file diff --git a/projects/kiss-flixel/src/kiss_flixel/SimpleWindow.kiss b/projects/kiss-flixel/src/kiss_flixel/SimpleWindow.kiss index 24667b8d..4ad5a46d 100644 --- a/projects/kiss-flixel/src/kiss_flixel/SimpleWindow.kiss +++ b/projects/kiss-flixel/src/kiss_flixel/SimpleWindow.kiss @@ -50,6 +50,20 @@ // TODO show which shortcuts' prefixes are partially highlighted? ) +// TODO could make a camera on the window so the controls are clipped by the camera + +(method addControl [:FlxSprite control] + (set control.x nextControlX) + (set control.y nextControlY) + (controls.add control) + (+= nextControlY control.height) + // TODO controls that aren't the same height as text will be able to vertically overflow + (when (= 0 (% controls.length controlsPerColumn)) + (set nextControlY y) + (when title (+= nextControlY control.height)) + (+= nextControlX (apply max + (for control (last (groups controls.members controlsPerColumn)) + control.width)) textSize))) (prop :Map _actions (new Map)) (prop :Map _colors (new Map)) @@ -58,14 +72,7 @@ (set ftext.color (or color textColor)) (dictSet _colors ftext ftext.color) (set ftext.cameras this.cameras) - (controls.add ftext) - (+= nextControlY ftext.height) - (when (= 0 (% controls.length controlsPerColumn)) - (set nextControlY y) - (when title (+= nextControlY ftext.height)) - (+= nextControlX (apply max - (for control (last (groups controls.members controlsPerColumn)) - control.width)) textSize)) + (addControl ftext) (when onClick (dictSet _actions ftext onClick) // TODO right click?