import 'package:firo_runner/moving_object.dart'; import 'package:firo_runner/main.dart'; import 'package:flame/components.dart'; enum WallState { normal } class Wall extends MovingObject { int direction = -1; late int bottomPlatformLevel; Wall(MyGame gameRef) : super(gameRef) { List wall = gameRef.wallHolder.getWall(); SpriteAnimation normal = SpriteAnimation.spriteList(wall, stepTime: 0.1); sprite = SpriteAnimationGroupComponent( animations: { WallState.normal: normal, }, current: WallState.normal, ); sprite.changePriorityWithoutResorting(WALL_PRIORITY); setSize( gameRef.blockSize * (gameRef.wallHolder.wall[0].image.width / gameRef.wallHolder.wall[0].image.height) * 2.0, gameRef.blockSize * 0.35, ); } @override void update(double dt) { super.update(dt); int nearestPlatform = getNearestPlatform((sprite.x / gameRef.blockSize).round()); nearestPlatform = nearestPlatform == 0 ? -1 : nearestPlatform; if (sprite.y + sprite.height > bottomPlatformLevel * gameRef.blockSize) { direction = -1; } else if ((bottomPlatformLevel - 2) * gameRef.blockSize - 2 * gameRef.blockSize / 7 > sprite.y) { direction = 1; } double velocity = gameRef.gameState.getVelocity() / 10.0; sprite.position = sprite.position + Vector2(0, direction * velocity * dt); } }