diff --git a/packages/flame/lib/src/experimental/camera_component.dart b/packages/flame/lib/src/experimental/camera_component.dart index dfe2045f966..fe088140f38 100644 --- a/packages/flame/lib/src/experimental/camera_component.dart +++ b/packages/flame/lib/src/experimental/camera_component.dart @@ -122,7 +122,7 @@ class CameraComponent extends Component { if (viewport.containsLocalPoint(viewportPoint)) { currentCameras.add(this); final worldPoint = viewfinder.transform.globalToLocal(viewportPoint); - yield* world.componentsAtPointFromCamera(worldPoint, nestedPoints); + yield* world.componentsAtPoint(worldPoint, nestedPoints); yield* viewfinder.componentsAtPoint(worldPoint, nestedPoints); currentCameras.removeLast(); } diff --git a/packages/flame/lib/src/experimental/world.dart b/packages/flame/lib/src/experimental/world.dart index cc98f2555e4..939c41fa5bb 100644 --- a/packages/flame/lib/src/experimental/world.dart +++ b/packages/flame/lib/src/experimental/world.dart @@ -1,6 +1,7 @@ import 'dart:ui'; import 'package:flame/src/components/component.dart'; +import 'package:flame/src/components/mixins/coordinate_transform.dart'; import 'package:flame/src/experimental/camera_component.dart'; import 'package:meta/meta.dart'; import 'package:vector_math/vector_math_64.dart'; @@ -10,7 +11,7 @@ import 'package:vector_math/vector_math_64.dart'; /// The primary feature of this component is that it disables regular rendering, /// and allows itself to be rendered through a [CameraComponent] only. The /// updates proceed through the world tree normally. -class World extends Component { +class World extends Component implements CoordinateTransform { @override void renderTree(Canvas canvas) {} @@ -25,18 +26,8 @@ class World extends Component { bool containsLocalPoint(Vector2 point) => true; @override - Iterable componentsAtPoint( - Vector2 point, [ - List? nestedPoints, - ]) { - return const Iterable.empty(); - } + Vector2? localToParent(Vector2 point) => null; - @internal - Iterable componentsAtPointFromCamera( - Vector2 point, - List? nestedPoints, - ) { - return super.componentsAtPoint(point, nestedPoints); - } + @override + Vector2? parentToLocal(Vector2 point) => null; } diff --git a/packages/flame/test/experimental/camera_component_test.dart b/packages/flame/test/experimental/camera_component_test.dart index 1d3ebed8cd3..ef568f3a930 100644 --- a/packages/flame/test/experimental/camera_component_test.dart +++ b/packages/flame/test/experimental/camera_component_test.dart @@ -139,6 +139,17 @@ void main() { expect(it.current, game); expect(nested, [Vector2(400, 300)]); expect(it.moveNext(), false); + + // Check that `componentsAtPoint` is usable with non-top-level components + // also. + expect( + world.componentsAtPoint(Vector2(100, 100)).toList(), + [component, world], + ); + expect( + component.componentsAtPoint(Vector2(100, 50)).toList(), + [component], + ); }); }); }