From 6e7e413629b1e56ffc468d0be5baaf90e3839349 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 13 Aug 2022 01:44:08 +0000 Subject: [PATCH] bake rotations for puzzle pieces --- .../source/HabitState.kiss | 3 ++- .../src/kiss_flixel/KissExtendedSprite.hx | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss index 72cd9499..89ff168c 100644 --- a/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss +++ b/projects/flixel-desktop-habit-puzzle-game/source/HabitState.kiss @@ -269,7 +269,7 @@ sourceRect (new Rectangle (/ jig.xy.x ros) (/ jig.xy.y ros) (/ jig.wh.x ros) (/ jig.wh.y ros))] (whenLet [origin (dictGet (the Map save.data.storedOrigins) i)] (s.origin.set origin.x origin.y)) - (set s.angle angle) + (set s.animation.frameIndex (Std.int (/ angle 90))) (set s.priorityID i) (setNth spriteGrid jig.row jig.col s) (setNth indexGrid jig.row jig.col i) @@ -311,6 +311,7 @@ (FlxSpriteUtil.alphaMask s source.pixels mask.pixels) **(#when debug (kiss_flixel.SpriteTools.writeOnSprite "$i" 32 s (object x (Percent 0.5) y (Percent 0.5)) FlxColor.RED)) + (source.loadRotatedGraphic source.pixels 4) (set s.cameras [pieceCamera]) diff --git a/projects/kiss-flixel/src/kiss_flixel/KissExtendedSprite.hx b/projects/kiss-flixel/src/kiss_flixel/KissExtendedSprite.hx index 0111bd6a..e1b4b24b 100644 --- a/projects/kiss-flixel/src/kiss_flixel/KissExtendedSprite.hx +++ b/projects/kiss-flixel/src/kiss_flixel/KissExtendedSprite.hx @@ -30,10 +30,18 @@ class KissExtendedSprite extends flixel.addons.display.FlxExtendedSprite { if (deg < 0) { deg += 360 * Math.ceil(Math.abs(deg / 360)); } - angle = (angle + deg) % 360; + function _rot(s:KissExtendedSprite, deg) { + var angle = (s.angle + deg) % 360; + if (angle % s.bakedRotationAngle == 0) { + s.animation.frameIndex = Std.int(angle / s.bakedRotationAngle); + } else { + s.angle = angle; + } + } + _rot(this, deg); for (c in connectedSprites) { if (c != this) { - c.angle = (c.angle + deg) % 360; + _rot(c, deg); var thisCenter = new FlxPoint(x + origin.x, y + origin.y); var cCenter = new FlxPoint(c.x + c.origin.x, c.y + c.origin.y);