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)