mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-02 20:13:50 +08:00
57 lines
1.2 KiB
Dart
57 lines
1.2 KiB
Dart
import 'package:flame/box2d/box2d_component.dart';
|
|
import 'package:flame/box2d/contact_callbacks.dart';
|
|
import 'package:flame/components/component.dart';
|
|
import 'package:flame/game/base_game.dart';
|
|
|
|
class Box2DGame extends BaseGame {
|
|
final Box2DComponent box;
|
|
final List<BodyComponent> _addLater = [];
|
|
final ContactCallbacks _contactCallbacks = ContactCallbacks();
|
|
|
|
Box2DGame(this.box) : super() {
|
|
add(box);
|
|
box.world.setContactListener(_contactCallbacks);
|
|
}
|
|
|
|
@override
|
|
void add(Component c) {
|
|
if (c is BodyComponent) {
|
|
box.add(c);
|
|
} else {
|
|
super.add(c);
|
|
}
|
|
}
|
|
|
|
@override
|
|
void addLater(Component c) {
|
|
if (c is BodyComponent) {
|
|
_addLater.add(c);
|
|
} else {
|
|
super.addLater(c);
|
|
}
|
|
}
|
|
|
|
@override
|
|
void update(double t) {
|
|
super.update(t);
|
|
box.components
|
|
.where((c) => c.destroy())
|
|
.toList()
|
|
.forEach((c) => box.remove(c));
|
|
box.addAll(_addLater);
|
|
_addLater.clear();
|
|
}
|
|
|
|
void addContactCallback(ContactCallback callback) {
|
|
_contactCallbacks.register(callback);
|
|
}
|
|
|
|
void removeContactCallback(ContactCallback callback) {
|
|
_contactCallbacks.deregister(callback);
|
|
}
|
|
|
|
void clearContactCallbacks() {
|
|
_contactCallbacks.clear();
|
|
}
|
|
}
|