Line data Source code
1 : import '../../../components.dart'; 2 : import '../../../game.dart'; 3 : import '../../components/position_component.dart'; 4 : import '../../extensions/vector2.dart'; 5 : import '../../geometry/rectangle.dart'; 6 : import 'hitbox.dart'; 7 : 8 : /// [CollidableType.active] collides with other [Collidable]s of type active or static 9 : /// [CollidableType.passive] collides with other [Collidable]s of type active 10 : /// [CollidableType.inactive] will not collide with any other [Collidable]s 11 41 : enum CollidableType { 12 : active, 13 : passive, 14 : inactive, 15 : } 16 : 17 : mixin Collidable on Hitbox { 18 : CollidableType collidableType = CollidableType.active; 19 : 20 0 : void onCollision(Set<Vector2> intersectionPoints, Collidable other) {} 21 0 : void onCollisionEnd(Collidable other) {} 22 : } 23 : 24 : class ScreenCollidable<T extends BaseGame> extends PositionComponent 25 : with Hitbox, Collidable, HasGameRef<T> { 26 : @override 27 : CollidableType collidableType = CollidableType.passive; 28 : 29 : @override 30 0 : Future<void> onLoad() async { 31 0 : await super.onLoad(); 32 0 : size = gameRef.size; 33 0 : addHitbox(HitboxRectangle()); 34 : } 35 : 36 : final _zeroVector = Vector2.zero(); 37 0 : @override 38 : void update(double dt) { 39 0 : super.update(dt); 40 0 : position = gameRef.camera.unprojectVector(_zeroVector); 41 0 : size = gameRef.size; 42 : } 43 : }