From 3f74fbc9ba8ea08a0f61b29f31686ba534bc7ec5 Mon Sep 17 00:00:00 2001 From: George FunBook Date: Mon, 9 Dec 2024 13:29:26 -0600 Subject: [PATCH 1/9] remove implicit int casts to/from directions --- flixel/FlxObject.hx | 4 +-- flixel/group/FlxSpriteGroup.hx | 5 ++-- flixel/system/FlxQuadTree.hx | 4 +-- flixel/tile/FlxTilemap.hx | 2 +- flixel/util/FlxDirection.hx | 17 +++++++++-- flixel/util/FlxDirectionFlags.hx | 49 +++++++++++++++++++++++++++----- 6 files changed, 65 insertions(+), 16 deletions(-) diff --git a/flixel/FlxObject.hx b/flixel/FlxObject.hx index 21f5795b88..a99654f3ff 100644 --- a/flixel/FlxObject.hx +++ b/flixel/FlxObject.hx @@ -1335,14 +1335,14 @@ class FlxObject extends FlxBasic endDrawDebug(camera); } - function drawDebugBoundingBox(gfx:Graphics, rect:FlxRect, allowCollisions:Int, partial:Bool) + function drawDebugBoundingBox(gfx:Graphics, rect:FlxRect, allowCollisions:FlxDirectionFlags, partial:Bool) { // Find the color to use final color = getDebugBoundingBoxColor(allowCollisions); drawDebugBoundingBoxColor(gfx, rect, color); } - function getDebugBoundingBoxColor(allowCollisions:Int) + function getDebugBoundingBoxColor(allowCollisions:FlxDirectionFlags) { if (debugBoundingBoxColor != null) return debugBoundingBoxColor; diff --git a/flixel/group/FlxSpriteGroup.hx b/flixel/group/FlxSpriteGroup.hx index a5e6153797..13784c07a5 100644 --- a/flixel/group/FlxSpriteGroup.hx +++ b/flixel/group/FlxSpriteGroup.hx @@ -1,5 +1,6 @@ package flixel.group; +import flixel.util.FlxDirectionFlags; import openfl.display.BitmapData; import openfl.display.BlendMode; import flixel.FlxCamera; @@ -753,7 +754,7 @@ class FlxTypedSpriteGroup extends FlxSprite return alpha = Value; } - override function set_facing(Value:Int):Int + override function set_facing(Value:FlxDirectionFlags):FlxDirectionFlags { if (exists && facing != Value) transformChildren(facingTransform, Value); @@ -1023,7 +1024,7 @@ class FlxTypedSpriteGroup extends FlxSprite inline function directAlphaTransform(Sprite:FlxSprite, Alpha:Float) Sprite.alpha = Alpha; // direct set - inline function facingTransform(Sprite:FlxSprite, Facing:Int) + inline function facingTransform(Sprite:FlxSprite, Facing:FlxDirectionFlags) Sprite.facing = Facing; inline function flipXTransform(Sprite:FlxSprite, FlipX:Bool) diff --git a/flixel/system/FlxQuadTree.hx b/flixel/system/FlxQuadTree.hx index 654a61379f..e81e2bfb62 100644 --- a/flixel/system/FlxQuadTree.hx +++ b/flixel/system/FlxQuadTree.hx @@ -616,7 +616,7 @@ class FlxQuadTree extends FlxRect { _iterator = iterator.next; } - if (_object != null && _object.exists && _object.allowCollisions > 0 && _iterator != null && _iterator.object != null && overlapNode()) + if (_object != null && _object.exists && _object.allowCollisions != NONE && _iterator != null && _iterator.object != null && overlapNode()) { overlapProcessed = true; } @@ -666,7 +666,7 @@ class FlxQuadTree extends FlxRect while (_iterator != null) { checkObject = _iterator.object; - if (_object == checkObject || !checkObject.exists || checkObject.allowCollisions <= 0) + if (_object == checkObject || !checkObject.exists || checkObject.allowCollisions != null) { _iterator = _iterator.next; continue; diff --git a/flixel/tile/FlxTilemap.hx b/flixel/tile/FlxTilemap.hx index b281c742a7..5d5ee71e8b 100644 --- a/flixel/tile/FlxTilemap.hx +++ b/flixel/tile/FlxTilemap.hx @@ -1545,7 +1545,7 @@ class FlxTypedTilemap extends FlxBaseTilemap return tileSprite; } - override function set_allowCollisions(value:Int):Int + override function set_allowCollisions(value:FlxDirectionFlags):FlxDirectionFlags { for (tile in _tileObjects) if (tile.index >= _collideIndex) diff --git a/flixel/util/FlxDirection.hx b/flixel/util/FlxDirection.hx index 7b07c061af..761468ef34 100644 --- a/flixel/util/FlxDirection.hx +++ b/flixel/util/FlxDirection.hx @@ -4,16 +4,21 @@ package flixel.util; * Simple enum for orthogonal directions. Can be combined into `FlxDirectionFlags`. * @since 4.10.0 */ -enum abstract FlxDirection(Int) to Int +enum abstract FlxDirection(Int) { var LEFT = 0x0001; var RIGHT = 0x0010; var UP = 0x0100; var DOWN = 0x1000; + #if (haxe < version("4.3.0")) + var abstract(get, never):FlxDirectionFlags; + inline function get_abstract():FlxDirectionFlags return cast this; + #end + public function toString() { - return switch (cast this : FlxDirection) + return switch abstract { case LEFT: "L"; case RIGHT: "R"; @@ -21,4 +26,12 @@ enum abstract FlxDirection(Int) to Int case DOWN: "D"; } } + + @:deprecated("implicit cast from FlxDirection to Int is deprecated, use an explicit cast") + @:to + function toIntImplicit() + { + return this; + } + } diff --git a/flixel/util/FlxDirectionFlags.hx b/flixel/util/FlxDirectionFlags.hx index 5b13ec4fc6..c973ee48e5 100644 --- a/flixel/util/FlxDirectionFlags.hx +++ b/flixel/util/FlxDirectionFlags.hx @@ -7,7 +7,7 @@ import flixel.math.FlxAngle; * many `FlxObject` features like `allowCollisions` and `touching`. * @since 4.10.0 */ -enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int +enum abstract FlxDirectionFlags(Int) { var LEFT = 0x0001; // FlxDirection.LEFT; var RIGHT = 0x0010; // FlxDirection.RIGHT; @@ -33,6 +33,11 @@ enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int /** Special-case constant meaning any, or all directions. */ var ANY = 0x1111; // LEFT | RIGHT | UP | DOWN; + #if (haxe < version("4.3.0")) + var abstract(get, never):FlxDirectionFlags; + inline function get_abstract():FlxDirectionFlags return cast this; + #end + /** * Calculates the angle (in degrees) of the facing flags. * Returns 0 if two opposing flags are true. @@ -41,7 +46,7 @@ enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int public var degrees(get, never):Float; function get_degrees():Float { - return switch (this) + return switch (abstract) { case RIGHT: 0; case DOWN: 90; @@ -88,7 +93,7 @@ enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int */ public inline function has(dir:FlxDirectionFlags):Bool { - return this & dir == dir; + return this & dir.toInt() == dir.toInt(); } /** @@ -96,7 +101,7 @@ enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int */ public inline function hasAny(dir:FlxDirectionFlags):Bool { - return this & dir > 0; + return cast this & dir.toInt() > 0; } /** @@ -104,7 +109,7 @@ enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int */ public inline function with(dir:FlxDirectionFlags):FlxDirectionFlags { - return this | dir; + return cast this | dir.toInt(); } /** @@ -112,12 +117,29 @@ enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int */ public inline function without(dir:FlxDirectionFlags):FlxDirectionFlags { - return this & ~dir; + return cast this & ~dir.toInt(); + } + + public inline function not():FlxDirectionFlags + { + return cast ~this; } + @:deprecated("implicit cast from FlxDirectionFlags to Int is deprecated, use an explicit cast") + @:to + function toIntImplicit() + { + return toInt(); + } + + function toInt():Int + { + return this; + } + public function toString() { - if (this == NONE) + if (abstract == NONE) return "NONE"; var str = ""; @@ -146,6 +168,19 @@ enum abstract FlxDirectionFlags(Int) from Int from FlxDirection to Int | (down ? DOWN : NONE); } + @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use an explicit cast") + @:from + inline static function fromInt(int:Int):FlxDirectionFlags + { + return cast int; + } + + @:from + inline static function fromDir(dir:FlxDirection):FlxDirectionFlags + { + return cast dir; + } + // Expose int operators @:op(A & B) static function and(a:FlxDirectionFlags, b:FlxDirectionFlags):FlxDirectionFlags; From 66a06f6f07fe04708f179190e7ae627c4dfb53ce Mon Sep 17 00:00:00 2001 From: George FunBook Date: Mon, 9 Dec 2024 15:50:56 -0600 Subject: [PATCH 2/9] D'oh --- flixel/system/macros/FlxDefines.hx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/flixel/system/macros/FlxDefines.hx b/flixel/system/macros/FlxDefines.hx index c019da71ca..1519ff2245 100644 --- a/flixel/system/macros/FlxDefines.hx +++ b/flixel/system/macros/FlxDefines.hx @@ -134,11 +134,11 @@ class FlxDefines checkOpenFLVersions(); #end - #if (flixel_addons < version("3.0.2")) - abortVersion("Flixel Addons", "3.0.2 or newer", "flixel-addons", (macro null).pos); + #if (flixel_addons < version("3.3.0")) + abortVersion("Flixel Addons", "3.3.0 or newer", "flixel-addons", (macro null).pos); #end - #if (flixel_ui < version("2.4.0")) - abortVersion("Flixel UI", "2.4.0 or newer", "flixel-addons", (macro null).pos); + #if (flixel_ui < version("2.6.2")) + abortVersion("Flixel UI", "2.6.2 or newer", "flixel_ui", (macro null).pos); #end } From ea0685a11a6f6b9dcc91d7465fd990a4b1a3b281 Mon Sep 17 00:00:00 2001 From: George FunBook Date: Mon, 9 Dec 2024 15:55:52 -0600 Subject: [PATCH 3/9] D'oh! --- flixel/system/FlxQuadTree.hx | 2 +- flixel/util/FlxDirection.hx | 2 +- flixel/util/FlxDirectionFlags.hx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flixel/system/FlxQuadTree.hx b/flixel/system/FlxQuadTree.hx index e81e2bfb62..a922e2f925 100644 --- a/flixel/system/FlxQuadTree.hx +++ b/flixel/system/FlxQuadTree.hx @@ -666,7 +666,7 @@ class FlxQuadTree extends FlxRect while (_iterator != null) { checkObject = _iterator.object; - if (_object == checkObject || !checkObject.exists || checkObject.allowCollisions != null) + if (_object == checkObject || !checkObject.exists || checkObject.allowCollisions == NONE) { _iterator = _iterator.next; continue; diff --git a/flixel/util/FlxDirection.hx b/flixel/util/FlxDirection.hx index 761468ef34..3be7edb95c 100644 --- a/flixel/util/FlxDirection.hx +++ b/flixel/util/FlxDirection.hx @@ -11,7 +11,7 @@ enum abstract FlxDirection(Int) var UP = 0x0100; var DOWN = 0x1000; - #if (haxe < version("4.3.0")) + #if (haxe <= version("4.3.0")) var abstract(get, never):FlxDirectionFlags; inline function get_abstract():FlxDirectionFlags return cast this; #end diff --git a/flixel/util/FlxDirectionFlags.hx b/flixel/util/FlxDirectionFlags.hx index c973ee48e5..0353098de8 100644 --- a/flixel/util/FlxDirectionFlags.hx +++ b/flixel/util/FlxDirectionFlags.hx @@ -33,7 +33,7 @@ enum abstract FlxDirectionFlags(Int) /** Special-case constant meaning any, or all directions. */ var ANY = 0x1111; // LEFT | RIGHT | UP | DOWN; - #if (haxe < version("4.3.0")) + #if (haxe <= version("4.3.0")) var abstract(get, never):FlxDirectionFlags; inline function get_abstract():FlxDirectionFlags return cast this; #end @@ -46,7 +46,7 @@ enum abstract FlxDirectionFlags(Int) public var degrees(get, never):Float; function get_degrees():Float { - return switch (abstract) + return switch abstract { case RIGHT: 0; case DOWN: 90; From 601e168b52831c22acecd5e072e3850aabe97ad8 Mon Sep 17 00:00:00 2001 From: George FunBook Date: Mon, 9 Dec 2024 16:11:17 -0600 Subject: [PATCH 4/9] deprecate operators and fix haxe 4.2.5 --- flixel/util/FlxDirection.hx | 17 ++++--- flixel/util/FlxDirectionFlags.hx | 34 ++++++++------ .../src/flixel/util/FlxDirectionFlagsTest.hx | 44 +------------------ 3 files changed, 32 insertions(+), 63 deletions(-) diff --git a/flixel/util/FlxDirection.hx b/flixel/util/FlxDirection.hx index 3be7edb95c..9022130f97 100644 --- a/flixel/util/FlxDirection.hx +++ b/flixel/util/FlxDirection.hx @@ -10,15 +10,20 @@ enum abstract FlxDirection(Int) var RIGHT = 0x0010; var UP = 0x0100; var DOWN = 0x1000; - - #if (haxe <= version("4.3.0")) - var abstract(get, never):FlxDirectionFlags; - inline function get_abstract():FlxDirectionFlags return cast this; - #end + + var self(get, never):FlxDirection; + inline function get_self():FlxDirection + { + #if (haxe >= version("4.3.0")) + return abstract; + #else + return cast this; + #end + } public function toString() { - return switch abstract + return switch self { case LEFT: "L"; case RIGHT: "R"; diff --git a/flixel/util/FlxDirectionFlags.hx b/flixel/util/FlxDirectionFlags.hx index 0353098de8..c72891398c 100644 --- a/flixel/util/FlxDirectionFlags.hx +++ b/flixel/util/FlxDirectionFlags.hx @@ -32,12 +32,18 @@ enum abstract FlxDirectionFlags(Int) /** Special-case constant meaning any, or all directions. */ var ANY = 0x1111; // LEFT | RIGHT | UP | DOWN; - - #if (haxe <= version("4.3.0")) - var abstract(get, never):FlxDirectionFlags; - inline function get_abstract():FlxDirectionFlags return cast this; - #end - + + var self(get, never):FlxDirectionFlags; + + inline function get_self():FlxDirectionFlags + { + #if (haxe >= version("4.3.0")) + return abstract; + #else + return cast this; + #end + } + /** * Calculates the angle (in degrees) of the facing flags. * Returns 0 if two opposing flags are true. @@ -46,7 +52,7 @@ enum abstract FlxDirectionFlags(Int) public var degrees(get, never):Float; function get_degrees():Float { - return switch abstract + return switch self { case RIGHT: 0; case DOWN: 90; @@ -139,7 +145,7 @@ enum abstract FlxDirectionFlags(Int) public function toString() { - if (abstract == NONE) + if (self == NONE) return "NONE"; var str = ""; @@ -181,16 +187,16 @@ enum abstract FlxDirectionFlags(Int) return cast dir; } - // Expose int operators + @:deprecated("FlxDirectionFlags operators are deprecated, use has(), instead")// Expose int operators @:op(A & B) static function and(a:FlxDirectionFlags, b:FlxDirectionFlags):FlxDirectionFlags; - + @:deprecated("FlxDirectionFlags operators are deprecated, use has(), instead") @:op(A | B) static function or(a:FlxDirectionFlags, b:FlxDirectionFlags):FlxDirectionFlags; - + @:deprecated("FlxDirectionFlags operators are deprecated, use has(), instead") @:op(A > B) static function gt(a:FlxDirectionFlags, b:FlxDirectionFlags):Bool; - + @:deprecated("FlxDirectionFlags operators are deprecated, use has(), instead") @:op(A < B) static function lt(a:FlxDirectionFlags, b:FlxDirectionFlags):Bool; - + @:deprecated("FlxDirectionFlags operators are deprecated, use has(), instead") @:op(A >= B) static function gte(a:FlxDirectionFlags, b:FlxDirectionFlags):Bool; - + @:deprecated("FlxDirectionFlags operators are deprecated, use has(), instead") @:op(A <= B) static function lte(a:FlxDirectionFlags, b:FlxDirectionFlags):Bool; } diff --git a/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx b/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx index a5f7f67f72..02b94bd17e 100644 --- a/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx +++ b/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx @@ -26,7 +26,7 @@ class FlxDirectionFlagsTest extends FlxTest } Assert.isTrue(f(null)); - Assert.isFalse(f(0)); + Assert.isFalse(f(cast 0)); Assert.isFalse(f(LEFT)); } @@ -153,48 +153,6 @@ class FlxDirectionFlagsTest extends FlxTest Assert.areEqual(ANY, dirs.with(ANY)); } - @Test - function operatorInts() - { - dirs = WALL; - Assert.isTrue((dirs & LEFT) > 0); - Assert.isTrue((dirs & LEFT) > NONE); - Assert.isTrue((dirs & 0x0001) > 0); - Assert.isTrue((dirs & 0x0001) > NONE); - Assert.isTrue((dirs & LEFT) >= 0x1); - Assert.isTrue((dirs & LEFT) >= LEFT); - Assert.isTrue((dirs & 0x0001) >= 0x1); - Assert.isTrue((dirs & 0x0001) >= LEFT); - Assert.isTrue((dirs & LEFT) == LEFT); - Assert.isTrue((dirs & LEFT) == 0x1); - Assert.isTrue((dirs & 0x0001) == LEFT); - Assert.isTrue((dirs & 0x0001) == 0x1); - - Assert.isFalse((dirs & LEFT) <= 0); - Assert.isFalse((dirs & LEFT) <= NONE); - Assert.isFalse((dirs & 0x0001) <= 0); - Assert.isFalse((dirs & 0x0001) <= NONE); - - dirs = NONE; - Assert.isTrue((dirs | LEFT) > 0); - Assert.isTrue((dirs | LEFT) > NONE); - Assert.isTrue((dirs | 0x0001) > 0); - Assert.isTrue((dirs | 0x0001) > NONE); - Assert.isTrue((dirs | LEFT) >= 0x1); - Assert.isTrue((dirs | LEFT) >= LEFT); - Assert.isTrue((dirs | 0x0001) >= 0x1); - Assert.isTrue((dirs | 0x0001) >= LEFT); - Assert.isTrue((dirs | LEFT) == LEFT); - Assert.isTrue((dirs | LEFT) == 0x1); - Assert.isTrue((dirs | 0x0001) == LEFT); - Assert.isTrue((dirs | 0x0001) == 0x1); - - Assert.isFalse((dirs | LEFT) <= 0); - Assert.isFalse((dirs | LEFT) <= NONE); - Assert.isFalse((dirs | 0x0001) <= 0); - Assert.isFalse((dirs | 0x0001) <= NONE); - } - @Test function testAngles() { From 9081bfc0b96db4f4b8006d07133a105feebe6ada Mon Sep 17 00:00:00 2001 From: George Kurelic Date: Thu, 12 Dec 2024 09:07:25 -0600 Subject: [PATCH 5/9] order imports --- flixel/group/FlxSpriteGroup.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flixel/group/FlxSpriteGroup.hx b/flixel/group/FlxSpriteGroup.hx index 977b852035..a1f43596e1 100644 --- a/flixel/group/FlxSpriteGroup.hx +++ b/flixel/group/FlxSpriteGroup.hx @@ -1,6 +1,5 @@ package flixel.group; -import flixel.util.FlxDirectionFlags; import openfl.display.BitmapData; import openfl.display.BlendMode; import flixel.FlxCamera; @@ -14,6 +13,7 @@ import flixel.math.FlxRect; import flixel.system.FlxAssets; import flixel.util.FlxColor; import flixel.util.FlxDestroyUtil; +import flixel.util.FlxDirectionFlags; import flixel.util.FlxSort; /** From b1ad6fc93a36c5e22198acd9f06abbe5e18d3f5a Mon Sep 17 00:00:00 2001 From: George FunBook Date: Thu, 12 Dec 2024 09:32:11 -0600 Subject: [PATCH 6/9] remove casts, add explicit cast functions --- flixel/util/FlxDirection.hx | 24 +++++++++++++++++++++++- flixel/util/FlxDirectionFlags.hx | 29 +++++++++++++++++++---------- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/flixel/util/FlxDirection.hx b/flixel/util/FlxDirection.hx index 9022130f97..274fb53ce4 100644 --- a/flixel/util/FlxDirection.hx +++ b/flixel/util/FlxDirection.hx @@ -21,6 +21,11 @@ enum abstract FlxDirection(Int) #end } + inline function new(value:Int) + { + this = value; + } + public function toString() { return switch self @@ -34,9 +39,26 @@ enum abstract FlxDirection(Int) @:deprecated("implicit cast from FlxDirection to Int is deprecated, use an explicit cast") @:to - function toIntImplicit() + inline function toIntImplicit() + { + return toInt(); + } + + + inline public function toInt() { return this; } + @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use an explicit cast") + @:from + inline static function fromIntImplicit(value:Int):FlxDirection + { + return fromInt(value); + } + + public inline static function fromInt(value:Int):FlxDirection + { + return new FlxDirection(value); + } } diff --git a/flixel/util/FlxDirectionFlags.hx b/flixel/util/FlxDirectionFlags.hx index c72891398c..4ed1414078 100644 --- a/flixel/util/FlxDirectionFlags.hx +++ b/flixel/util/FlxDirectionFlags.hx @@ -93,7 +93,11 @@ enum abstract FlxDirectionFlags(Int) public var right(get, never):Bool; inline function get_right() return has(RIGHT); - + inline function new(value:Int) + { + this = value; + } + /** * Returns true if this contains **all** of the supplied flags. */ @@ -107,7 +111,7 @@ enum abstract FlxDirectionFlags(Int) */ public inline function hasAny(dir:FlxDirectionFlags):Bool { - return cast this & dir.toInt() > 0; + return this & dir.toInt() > 0; } /** @@ -115,7 +119,7 @@ enum abstract FlxDirectionFlags(Int) */ public inline function with(dir:FlxDirectionFlags):FlxDirectionFlags { - return cast this | dir.toInt(); + return fromInt(this | dir.toInt()); } /** @@ -123,22 +127,22 @@ enum abstract FlxDirectionFlags(Int) */ public inline function without(dir:FlxDirectionFlags):FlxDirectionFlags { - return cast this & ~dir.toInt(); + return fromInt(this & ~dir.toInt()); } public inline function not():FlxDirectionFlags { - return cast ~this; + return fromInt(~this); } @:deprecated("implicit cast from FlxDirectionFlags to Int is deprecated, use an explicit cast") @:to - function toIntImplicit() + inline function toIntImplicit() { return toInt(); } - function toInt():Int + public inline function toInt():Int { return this; } @@ -176,15 +180,20 @@ enum abstract FlxDirectionFlags(Int) @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use an explicit cast") @:from - inline static function fromInt(int:Int):FlxDirectionFlags + public inline static function fromIntImplicit(value:Int):FlxDirectionFlags + { + return fromInt(value); + } + + public inline static function fromInt(value:Int):FlxDirectionFlags { - return cast int; + return new FlxDirectionFlags(value); } @:from inline static function fromDir(dir:FlxDirection):FlxDirectionFlags { - return cast dir; + return fromInt(dir.toInt()); } @:deprecated("FlxDirectionFlags operators are deprecated, use has(), instead")// Expose int operators From 8f3d8c255b332d2dd117ce557a763c603399904d Mon Sep 17 00:00:00 2001 From: George FunBook Date: Thu, 30 Jan 2025 11:23:37 -0600 Subject: [PATCH 7/9] fix not() and add tests --- flixel/util/FlxDirectionFlags.hx | 2 +- .../src/flixel/util/FlxDirectionFlagsTest.hx | 21 ++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/flixel/util/FlxDirectionFlags.hx b/flixel/util/FlxDirectionFlags.hx index 4ed1414078..8867fe455c 100644 --- a/flixel/util/FlxDirectionFlags.hx +++ b/flixel/util/FlxDirectionFlags.hx @@ -132,7 +132,7 @@ enum abstract FlxDirectionFlags(Int) public inline function not():FlxDirectionFlags { - return fromInt(~this); + return fromInt((~this & ANY.toInt())); } @:deprecated("implicit cast from FlxDirectionFlags to Int is deprecated, use an explicit cast") diff --git a/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx b/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx index 02b94bd17e..464fe3851c 100644 --- a/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx +++ b/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx @@ -2,6 +2,7 @@ package flixel.util; import massive.munit.Assert; import flixel.util.FlxDirectionFlags; +import haxe.PosInfos; /** * A bulk of these tests are copied from `FlxColor`. @@ -156,10 +157,10 @@ class FlxDirectionFlagsTest extends FlxTest @Test function testAngles() { - function assertDegrees(flags:FlxDirectionFlags, degrees:Float) + function assertDegrees(flags:FlxDirectionFlags, degrees:Float, margin = 0.001, ?pos:PosInfos) { - FlxAssert.areNear(flags.degrees, degrees); - FlxAssert.areNear(flags.radians, degrees / 180 * Math.PI); + FlxAssert.areNear(flags.degrees, degrees, margin, null, pos); + FlxAssert.areNear(flags.radians, degrees / 180 * Math.PI, margin, null, pos); } assertDegrees(RIGHT , 0 ); @@ -171,4 +172,18 @@ class FlxDirectionFlagsTest extends FlxTest assertDegrees(UP ,-90 ); assertDegrees(UP | RIGHT ,-45 ); } + + @Test + function testNot() + { + inline function assertNot(a:FlxDirectionFlags, b:FlxDirectionFlags, ?pos:PosInfos) + { + Assert.areEqual(a.not(), b, 'Value ${a.toInt()}:[$a].not() was not equal to expected value ${b.toInt()}:[$b]', pos); + Assert.areEqual(b.not(), a, 'Value ${b.toInt()}:[$b].not() was not equal to expected value ${a.toInt()}:[$a]', pos); + } + + assertNot(RIGHT | DOWN, ANY); + assertNot(RIGHT, LEFT | UP | DOWN); + assertNot(ANY, NONE); + } } From 1a060935f17b03dc00abf8cff0613e72fd4f3f63 Mon Sep 17 00:00:00 2001 From: George Kurelic Date: Thu, 30 Jan 2025 11:39:24 -0600 Subject: [PATCH 8/9] Doc --- flixel/util/FlxDirection.hx | 4 ++-- flixel/util/FlxDirectionFlags.hx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flixel/util/FlxDirection.hx b/flixel/util/FlxDirection.hx index 274fb53ce4..b57c6d465e 100644 --- a/flixel/util/FlxDirection.hx +++ b/flixel/util/FlxDirection.hx @@ -37,7 +37,7 @@ enum abstract FlxDirection(Int) } } - @:deprecated("implicit cast from FlxDirection to Int is deprecated, use an explicit cast") + @:deprecated("implicit cast from FlxDirection to Int is deprecated, use toInt()") @:to inline function toIntImplicit() { @@ -50,7 +50,7 @@ enum abstract FlxDirection(Int) return this; } - @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use an explicit cast") + @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use FlxDirection.fromInt") @:from inline static function fromIntImplicit(value:Int):FlxDirection { diff --git a/flixel/util/FlxDirectionFlags.hx b/flixel/util/FlxDirectionFlags.hx index 8867fe455c..334f965545 100644 --- a/flixel/util/FlxDirectionFlags.hx +++ b/flixel/util/FlxDirectionFlags.hx @@ -135,7 +135,7 @@ enum abstract FlxDirectionFlags(Int) return fromInt((~this & ANY.toInt())); } - @:deprecated("implicit cast from FlxDirectionFlags to Int is deprecated, use an explicit cast") + @:deprecated("implicit cast from FlxDirectionFlags to Int is deprecated, use FlxDirectionFlags.fromInt") @:to inline function toIntImplicit() { @@ -178,7 +178,7 @@ enum abstract FlxDirectionFlags(Int) | (down ? DOWN : NONE); } - @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use an explicit cast") + @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use FlxDirectionFlags.fromInt") @:from public inline static function fromIntImplicit(value:Int):FlxDirectionFlags { From eb74ef5e661cce64f58c9655a0f9dbbd812710ec Mon Sep 17 00:00:00 2001 From: George FunBook Date: Thu, 30 Jan 2025 11:52:48 -0600 Subject: [PATCH 9/9] doc + tests --- flixel/util/FlxDirection.hx | 2 +- flixel/util/FlxDirectionFlags.hx | 4 ++-- tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx | 13 ++++++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/flixel/util/FlxDirection.hx b/flixel/util/FlxDirection.hx index b57c6d465e..c389351294 100644 --- a/flixel/util/FlxDirection.hx +++ b/flixel/util/FlxDirection.hx @@ -50,7 +50,7 @@ enum abstract FlxDirection(Int) return this; } - @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use FlxDirection.fromInt") + @:deprecated("implicit cast from Int to FlxDirection is deprecated, use FlxDirection.fromInt") @:from inline static function fromIntImplicit(value:Int):FlxDirection { diff --git a/flixel/util/FlxDirectionFlags.hx b/flixel/util/FlxDirectionFlags.hx index 334f965545..86d7b6ab49 100644 --- a/flixel/util/FlxDirectionFlags.hx +++ b/flixel/util/FlxDirectionFlags.hx @@ -135,7 +135,7 @@ enum abstract FlxDirectionFlags(Int) return fromInt((~this & ANY.toInt())); } - @:deprecated("implicit cast from FlxDirectionFlags to Int is deprecated, use FlxDirectionFlags.fromInt") + @:deprecated("implicit cast from FlxDirectionFlags to Int is deprecated, use toInt") @:to inline function toIntImplicit() { @@ -180,7 +180,7 @@ enum abstract FlxDirectionFlags(Int) @:deprecated("implicit cast from Int to FlxDirectionFlags is deprecated, use FlxDirectionFlags.fromInt") @:from - public inline static function fromIntImplicit(value:Int):FlxDirectionFlags + inline static function fromIntImplicit(value:Int):FlxDirectionFlags { return fromInt(value); } diff --git a/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx b/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx index 464fe3851c..7765f538c3 100644 --- a/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx +++ b/tests/unit/src/flixel/util/FlxDirectionFlagsTest.hx @@ -182,8 +182,19 @@ class FlxDirectionFlagsTest extends FlxTest Assert.areEqual(b.not(), a, 'Value ${b.toInt()}:[$b].not() was not equal to expected value ${a.toInt()}:[$a]', pos); } - assertNot(RIGHT | DOWN, ANY); + assertNot(RIGHT | DOWN, LEFT | UP); assertNot(RIGHT, LEFT | UP | DOWN); assertNot(ANY, NONE); } + + @Test + @:haxe.warning("-WDeprecated") + function implicitBackwardsCompat() + { + + Assert.isTrue(FlxDirectionFlags.NONE == 0); + Assert.isTrue(0 == FlxDirectionFlags.NONE); + Assert.isTrue(flixel.util.FlxDirection.LEFT == 0x0001); + Assert.isTrue(0x0001 == flixel.util.FlxDirection.LEFT); + } }