diff --git a/projects/flixel-desktop-habit-puzzle-game/Project.xml b/projects/flixel-desktop-habit-puzzle-game/Project.xml
index 085cd084..db7e2c02 100644
--- a/projects/flixel-desktop-habit-puzzle-game/Project.xml
+++ b/projects/flixel-desktop-habit-puzzle-game/Project.xml
@@ -34,6 +34,7 @@
+
diff --git a/projects/flixel-desktop-habit-puzzle-game/source/HabitModel.kiss b/projects/flixel-desktop-habit-puzzle-game/source/HabitModel.kiss
index 021e6123..b78fb4ae 100644
--- a/projects/flixel-desktop-habit-puzzle-game/source/HabitModel.kiss
+++ b/projects/flixel-desktop-habit-puzzle-game/source/HabitModel.kiss
@@ -202,4 +202,15 @@
(filter bonusEntries isActive))
(method :Array activeTodoEntries []
- (filter todoEntries isActive))
\ No newline at end of file
+ (filter todoEntries isActive))
+
+(method addEntry [:EntryType type :Array 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))
\ No newline at end of file
diff --git a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx
index bbf0154e..dc4f94e7 100644
--- a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx
+++ b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx
@@ -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;
diff --git a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss
index cf8cc0e1..5f13d364 100644
--- a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss
+++ b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss
@@ -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)