habit game add bonus/todo entries with flxinputtext. close #99

This commit is contained in:
2022-07-27 17:38:02 +00:00
parent b368f9a50a
commit c9df1e81ab
4 changed files with 48 additions and 14 deletions

View File

@@ -34,6 +34,7 @@
<haxelib name="flixel" />
<haxelib name="flixel-addons" />
<haxelib name="flixel-ui" />
<haxelib name="haxe-strings" />
<haxelib name="kiss" />
<haxelib name="kiss-tools" />

View File

@@ -202,4 +202,15 @@
(filter bonusEntries isActive))
(method :Array<Entry> activeTodoEntries []
(filter todoEntries isActive))
(filter todoEntries isActive))
(method addEntry [:EntryType type :Array<String> labels]
(.push (case type
(Todo todoEntries)
(Bonus bonusEntries)
((Interval _ _) intervalEntries)
((Daily _ _) dailyEntries)
((Monthly _ _) monthlyEntries)
(otherwise (throw "")))
(objectWith [labels (for label labels (objectWith [points 0] label))] type))
(save))

View File

@@ -21,6 +21,7 @@ import flixel.util.FlxSave;
import flixel.input.mouse.FlxMouseEventManager;
import flixel.addons.display.FlxExtendedSprite;
import flixel.addons.plugin.FlxMouseControl;
import flixel.addons.ui.FlxInputText;
import kiss.Prelude;
import kiss.List;
import kiss_tools.FlxKeyShortcutHandler;

View File

@@ -17,6 +17,9 @@
(var KEYBOARD_SCROLL_SPEED 200)
(prop &mut :EntryType typeAdding Todo)
(prop &mut :FlxInputText entryNameText)
(method &override :Void update [:Float elapsed]
(super.update elapsed)
@@ -31,17 +34,33 @@
// TODO provide a saner/configurable set of bindings to trigger these ui action functions
{
(when FlxG.keys.justPressed.SPACE
(when (and FlxG.keys.justPressed.SPACE !entryNameText)
(defAndCall method toggleBackgroundColor
(set save.data.backgroundIndex #{(save.data.backgroundIndex + 1) % backgroundOptions.length;}#)
(save.flush)
// setModel so the entry text gets remade in inverted/lightened colors when necessary
(setModel model (nth model.rewardFiles rewardFileIndex))))
(method startAdding [:EntryType type]
(set typeAdding type)
(set entryNameText (new FlxInputText 0 0 FlxG.width "" textSize true))
(set entryNameText.cameras [uiCamera])
(set entryNameText.hasFocus true)
(add entryNameText))
(when FlxG.keys.justPressed.ENTER
0)
(cond
(entryNameText
(model.addEntry typeAdding [entryNameText.text])
(setModel model (nth model.rewardFiles rewardFileIndex))
(entryNameText.kill)
(set entryNameText null))
(true
(startAdding Todo))))
(when FlxG.keys.justPressed.UP
(startAdding Bonus))
}
// drag along connected pieces
(when draggingSprite
(let [dx (- draggingSprite.x draggingLastPos.x)
@@ -56,16 +75,17 @@
// Left and right arrow keys can switch between unlocked puzzles
(when FlxG.keys.justPressed.LEFT
(unless (= rewardFileIndex 0)
(-= rewardFileIndex 1)
(setModel model (nth model.rewardFiles rewardFileIndex))))
(when FlxG.keys.justPressed.RIGHT
(unless (= rewardFileIndex maxRewardFile)
(+= rewardFileIndex 1)
(setModel model (nth model.rewardFiles rewardFileIndex))))
(unless entryNameText
(when FlxG.keys.justPressed.LEFT
(unless (= rewardFileIndex 0)
(-= rewardFileIndex 1)
(setModel model (nth model.rewardFiles rewardFileIndex))))
(when FlxG.keys.justPressed.RIGHT
(unless (= rewardFileIndex maxRewardFile)
(+= rewardFileIndex 1)
(setModel model (nth model.rewardFiles rewardFileIndex)))))
// Handle keyboard input:
(when shortcutHandler
(when (and shortcutHandler !entryNameText)
(shortcutHandler.update)))
(prop &mut :FlxSave save null)
@@ -318,8 +338,9 @@
(let [label (HabitModel.activeLabel e)]
(_makeText label.label label.points)))
// TODO configurable text size
(method _makeText [:String s :Int points]
(let [text (new FlxText 0 textY 0 (+ s (* points "+")) 16)]
(let [text (new FlxText 0 textY 0 (+ s (* points "+")) (defAndReturn var &mut textSize 16))]
(set text.color color)
(set text.cameras [uiCamera])
(+= textY text.height)