startBadApple method
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();
}
}