import 'package:flame/collisions.dart'; import 'package:flame/components.dart'; import 'package:flame/game.dart'; class JoystickPlayer extends SpriteComponent with HasGameReference, CollisionCallbacks { /// Pixels/s double maxSpeed = 300.0; late final Vector2 _lastSize = size.clone(); late final Transform2D _lastTransform = transform.clone(); final JoystickComponent joystick; JoystickPlayer(this.joystick) : super(size: Vector2.all(100.0), anchor: Anchor.center); @override Future onLoad() async { sprite = await game.loadSprite('layers/player.png'); add(RectangleHitbox()); } @override void update(double dt) { if (!joystick.delta.isZero() && activeCollisions.isEmpty) { _lastSize.setFrom(size); _lastTransform.setFrom(transform); position.add(joystick.relativeDelta * maxSpeed * dt); angle = joystick.delta.screenAngle(); } } @override void onCollisionStart( Set intersectionPoints, PositionComponent other, ) { super.onCollisionStart(intersectionPoints, other); transform.setFrom(_lastTransform); size.setFrom(_lastSize); } }