bake rotations for puzzle pieces

This commit is contained in:
2022-08-13 01:44:08 +00:00
parent 3c4d408fc9
commit 6e7e413629
2 changed files with 12 additions and 3 deletions

View File

@@ -269,7 +269,7 @@
sourceRect (new Rectangle (/ jig.xy.x ros) (/ jig.xy.y ros) (/ jig.wh.x ros) (/ jig.wh.y ros))] sourceRect (new Rectangle (/ jig.xy.x ros) (/ jig.xy.y ros) (/ jig.wh.x ros) (/ jig.wh.y ros))]
(whenLet [origin (dictGet (the Map<Int,FlxPoint> save.data.storedOrigins) i)] (whenLet [origin (dictGet (the Map<Int,FlxPoint> save.data.storedOrigins) i)]
(s.origin.set origin.x origin.y)) (s.origin.set origin.x origin.y))
(set s.angle angle) (set s.animation.frameIndex (Std.int (/ angle 90)))
(set s.priorityID i) (set s.priorityID i)
(setNth spriteGrid jig.row jig.col s) (setNth spriteGrid jig.row jig.col s)
(setNth indexGrid jig.row jig.col i) (setNth indexGrid jig.row jig.col i)
@@ -311,6 +311,7 @@
(FlxSpriteUtil.alphaMask s source.pixels mask.pixels) (FlxSpriteUtil.alphaMask s source.pixels mask.pixels)
**(#when debug **(#when debug
(kiss_flixel.SpriteTools.writeOnSprite "$i" 32 s (object x (Percent 0.5) y (Percent 0.5)) FlxColor.RED)) (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]) (set s.cameras [pieceCamera])

View File

@@ -30,10 +30,18 @@ class KissExtendedSprite extends flixel.addons.display.FlxExtendedSprite {
if (deg < 0) { if (deg < 0) {
deg += 360 * Math.ceil(Math.abs(deg / 360)); 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) { for (c in connectedSprites) {
if (c != this) { if (c != this) {
c.angle = (c.angle + deg) % 360; _rot(c, deg);
var thisCenter = new FlxPoint(x + origin.x, y + origin.y); var thisCenter = new FlxPoint(x + origin.x, y + origin.y);
var cCenter = new FlxPoint(c.x + c.origin.x, c.y + c.origin.y); var cCenter = new FlxPoint(c.x + c.origin.x, c.y + c.origin.y);