startBadApple method

Future<void> startBadApple()
inherited

Starts playing Bad Apple.

Implementation

Future<void> startBadApple() async {
  final zipBytes = await rootBundle.load("assets/bad_apple.zip");
  imagesArchive = ZipDecoder().decodeBytes(zipBytes.buffer.asUint8List());

  isPlayingBadApple = true;
  notifyListeners();
  _originalZoom = gridSize;
  zoom(50);
  badAppleFrame = 0;
  Timer.run(() async {
    await badAppleAudioPlayer.setAsset(
      "assets/bad_apple2.mp3",
      preload: false,
    );
    badAppleAudioPlayer.play().ignore();
    _badAppleStopwatch.start();
  });

  while (isPlayingBadApple) {
    await Future<void>.delayed(Duration.zero);
    var sampleTime = _badAppleStopwatch.elapsed;
    if (badAppleAudioPlayer.position != Duration.zero) {
      sampleTime = badAppleAudioPlayer.position;
    }
    final currentFrame =
        ((sampleTime.inMicroseconds.toDouble() / 1e6) * 30.0).round();
    if (currentFrame >= badAppleLastFrame || imagesArchive == null) {
      stopBadApple();
      break;
    }
    if (currentFrame == badAppleFrame) {
      continue;
    }
    badAppleFrame = currentFrame;
    final obstacles = _loadBadAppleFrame(imagesArchive!, badAppleFrame);
    if (obstacles == null) {
      continue;
    }
    if (!isPlayingBadApple) {
      break;
    }
    data = AutonomyData(obstacles: obstacles);
    notifyListeners();
  }
}