2018-07-20 09:58:11 +00:00
|
|
|
import 'dart:html';
|
|
|
|
|
|
|
|
import 'package:browserloop/game/Game.dart';
|
|
|
|
import 'package:browserloop/game/LoopExample.dart';
|
|
|
|
|
|
|
|
class FixedLoopVariableRender implements LoopExample {
|
|
|
|
static final double MS_PER_UPDATE = 1000.0;
|
|
|
|
static final double SAFE_GUARD = 500.0;
|
|
|
|
Stopwatch elapsed = new Stopwatch();
|
|
|
|
double lag = 0.0;
|
|
|
|
Game game;
|
|
|
|
num id;
|
|
|
|
|
|
|
|
FixedLoopVariableRender(this.game) {
|
|
|
|
elapsed.start();
|
|
|
|
window.requestAnimationFrame(eventloop);
|
|
|
|
}
|
|
|
|
|
|
|
|
void eventloop(num time) {
|
|
|
|
lag += elapsed.elapsedMilliseconds;
|
|
|
|
elapsed.reset();
|
|
|
|
|
|
|
|
while (lag >= MS_PER_UPDATE && elapsed.elapsedMilliseconds < SAFE_GUARD) {
|
|
|
|
update();
|
|
|
|
lag -= MS_PER_UPDATE;
|
|
|
|
}
|
|
|
|
render(lag / MS_PER_UPDATE);
|
|
|
|
id = window.requestAnimationFrame(eventloop);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void update() {
|
|
|
|
game.update();
|
|
|
|
}
|
|
|
|
|
|
|
|
void render(double interp) {
|
|
|
|
game.draw(interp);
|
|
|
|
}
|
|
|
|
|
2018-07-20 14:28:29 +00:00
|
|
|
// Starting and stopping the loop for the example page
|
2018-07-20 09:58:11 +00:00
|
|
|
void stop() {
|
2018-07-20 14:28:29 +00:00
|
|
|
elapsed.stop();
|
2018-07-20 09:58:11 +00:00
|
|
|
window.cancelAnimationFrame(id);
|
|
|
|
}
|
|
|
|
|
|
|
|
void start() {
|
2018-07-20 14:28:29 +00:00
|
|
|
elapsed.start();
|
|
|
|
elapsed.reset();
|
2018-07-20 09:58:11 +00:00
|
|
|
window.requestAnimationFrame(eventloop);
|
|
|
|
}
|
|
|
|
}
|