Files
flame/examples/lib/stories/components/priority_example.dart
Pasha Stetsenko 1ef518794c refactor: Component rebalancing is now performed via a global queue (#2352)
This PR ensures that all component rebalancing operations are resolved from a single location, after the update stage but before the render stage (thus, components may get reordered during the update, and these changes will go into effect during the rendering step on the same game tick).

This also fixes the problem where the child changing the priorities of its parent would cause a ConcurrentModificationError.

A number of methods that were used to handle rebalancing are now marked as deprecated. From the user's perspective, the only API they should be using is the .priority setter.
2023-02-27 00:45:27 +01:00

41 lines
1.0 KiB
Dart

import 'package:flame/components.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';
class PriorityExample extends FlameGame with HasTappables {
static const String description = '''
On this example, click on the square to bring them to the front by changing
the priority.
''';
PriorityExample()
: super(
children: [
Square(Vector2(100, 100)),
Square(Vector2(160, 100)),
Square(Vector2(170, 150)),
Square(Vector2(110, 150)),
],
);
}
class Square extends RectangleComponent
with HasGameRef<PriorityExample>, Tappable {
Square(Vector2 position)
: super(
position: position,
size: Vector2.all(100),
paint: PaintExtension.random(withAlpha: 0.9, base: 100),
);
@override
bool onTapDown(TapDownInfo info) {
final topComponent = gameRef.children.last;
if (topComponent != this) {
priority = topComponent.priority + 1;
}
return false;
}
}