diff --git a/flixel/FlxObject.hx b/flixel/FlxObject.hx index bff324c41a..756d23a498 100644 --- a/flixel/FlxObject.hx +++ b/flixel/FlxObject.hx @@ -159,8 +159,16 @@ class FlxObject extends FlxBasic */ public static function separate(object1:FlxObject, object2:FlxObject):Bool { + var tmp1 = object1.last.copyTo(); + var tmp2 = object2.last.copyTo(); final separatedX = separateX(object1, object2); + object1.last.x = object1.x; + object2.last.x = object2.x; final separatedY = separateY(object1, object2); + object1.last.copyFrom(tmp1); + object2.last.copyFrom(tmp2); + tmp1.put(); + tmp2.put(); return separatedX || separatedY; /* diff --git a/tests/unit/src/flixel/FlxObjectTest.hx b/tests/unit/src/flixel/FlxObjectTest.hx index dc89530222..5094fcaf08 100644 --- a/tests/unit/src/flixel/FlxObjectTest.hx +++ b/tests/unit/src/flixel/FlxObjectTest.hx @@ -80,7 +80,7 @@ class FlxObjectTest extends FlxTest } @Test - function testSeprateX():Void + function testSeparateX():Void { final object1 = new FlxObject(5, 0, 10, 10); object1.last.x = 10; @@ -100,7 +100,7 @@ class FlxObjectTest extends FlxTest } @Test - function testSeprateY():Void + function testSeparateY():Void { final object1 = new FlxObject(0, 5, 10, 10); object1.last.y = 10; @@ -119,7 +119,23 @@ class FlxObjectTest extends FlxTest } @Test - function testSeprateXFromOpposite():Void + function testSeparateOnBothAxisNewlyOverlapping():Void + { + final object1 = new FlxObject(11, -1, 10, 10); + final object2 = new FlxObject(0, 10, 10, 10); + object2.immovable = true; + + object1.setPosition(9, 2); + + Assert.isTrue(FlxObject.separate(object1, object2)); + // X-axis resolves first and no collision + Assert.areEqual(9, object1.x); + // Y-axis resolves second and is stopped by collision + Assert.areEqual(0, object1.y); + } + + @Test + function testSeparateXFromOpposite():Void { /* * NOTE: An odd y value on either may result in a rounding error where the second @@ -142,7 +158,7 @@ class FlxObjectTest extends FlxTest } @Test - function testSeprateYFromOpposite():Void + function testSeparateYFromOpposite():Void { /* * NOTE: An odd y value on either may result in a rounding error where the second @@ -371,7 +387,7 @@ class FlxObjectTest extends FlxTest } @Test - function testgetRotatedBounds() + function testGetRotatedBounds() { var expected = FlxRect.get(); var rect = FlxRect.get(); diff --git a/tests/unit/src/flixel/math/FlxRectTest.hx b/tests/unit/src/flixel/math/FlxRectTest.hx index 0a7c24d6ac..85af945c28 100644 --- a/tests/unit/src/flixel/math/FlxRectTest.hx +++ b/tests/unit/src/flixel/math/FlxRectTest.hx @@ -34,7 +34,7 @@ class FlxRectTest extends FlxTest } @Test - function testgetRotatedBounds() + function testGetRotatedBounds() { var pivot = FlxPoint.get(); var expected = FlxRect.get(); @@ -64,7 +64,7 @@ class FlxRectTest extends FlxTest } @Test - function testgetRotatedBoundsSelf() + function testGetRotatedBoundsSelf() { var pivot = FlxPoint.get(); var expected = FlxRect.get();