diff --git a/packages/flame/lib/src/extensions/rect.dart b/packages/flame/lib/src/extensions/rect.dart index 063a1d3d53c..8db892322cf 100644 --- a/packages/flame/lib/src/extensions/rect.dart +++ b/packages/flame/lib/src/extensions/rect.dart @@ -80,6 +80,12 @@ extension RectExtension on Rect { ); } + /// Displaces this [Rect] by the given [delta] displacement vector, + /// returning a new [Rect] instance. Equivalent to [shift] or [translate]. + Rect displace(Vector2 delta) { + return shift(delta.toOffset()); + } + /// Generates a random point within the bounds of this [Rect]. Vector2 randomPoint([Random? random]) { final randomGenerator = random ?? randomFallback; diff --git a/packages/flame/test/extensions/rect_test.dart b/packages/flame/test/extensions/rect_test.dart index 2c17d5782df..a63ba0c0567 100644 --- a/packages/flame/test/extensions/rect_test.dart +++ b/packages/flame/test/extensions/rect_test.dart @@ -181,6 +181,16 @@ void main() { expect(result.bottomRight.toVector2(), closeToVector(Vector2(20, 20))); }); + test('test displace', () { + const input = Rect.fromLTWH(0, 1, 10, 10); + final delta = Vector2(10, 10); + final result = input.displace(delta); + + expect(result.topLeft.toVector2(), closeToVector(Vector2(10, 11))); + expect(result.bottomRight.toVector2(), closeToVector(Vector2(20, 21))); + expect(result.size.toVector2(), closeToVector(input.size.toVector2())); + }); + testRandom('test bounding box', (Random r) { final points = List.generate( r.nextInt(15) + 2,