diff --git a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx index e0e8bab4..bbf0154e 100644 --- a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx +++ b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.hx @@ -28,6 +28,7 @@ import HabitModel; import hx.strings.Strings; import datetime.DateTime; using kiss_flixel.CameraTools; +using kiss_flixel.GroupTools; import jigsawx.JigsawPiece; import jigsawx.Jigsawx; diff --git a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss index 9a2fcfa7..21c3f560 100644 --- a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss +++ b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss @@ -173,6 +173,11 @@ (set s.mouseStartDragCallback ->:Void [s x y] { + // Bring currently held pieces to the front: + (rewardSprites.bringToFront s) + (doFor connected (recursivelyConnectedPieces s) + (rewardSprites.bringToFront connected)) + (set draggingSprite s) (set draggingLastPos (new FlxPoint s.x s.y)) }) diff --git a/projects/kiss-flixel/src/kiss_flixel/GroupTools.kiss b/projects/kiss-flixel/src/kiss_flixel/GroupTools.kiss index 941e5386..38473d74 100644 --- a/projects/kiss-flixel/src/kiss_flixel/GroupTools.kiss +++ b/projects/kiss-flixel/src/kiss_flixel/GroupTools.kiss @@ -1,3 +1,18 @@ +(function :Void clearNulls <>[:FlxObject T] [:FlxTypedGroup group] + (while (contains group.members null) + (group.members.splice (group.members.lastIndexOf null) 1))) + +// Because FlxGroup will fill elements into null gaps in groups, this method inefficiently clears null gaps +(function :Void bringToFront <>[:FlxObject T] [:FlxTypedGroup group :T obj] + (group.remove obj true) + (clearNulls group) + (group.add obj)) + +// Because FlxGroup will fill elements into null gaps in groups, this method throws an error when a null gap is present +(function :Void sendToBack <>[:FlxObject T] [:FlxTypedGroup group :T obj] + (group.remove obj true) + (group.insert 0 obj)) + (function :FlxRect calculateBounds <>[:FlxObject T] [:FlxTypedGroup group &opt :Float margin] (unless margin (set margin 0)) (let [&mut minX 0