[common] add GameRunner

This commit is contained in:
2019-04-30 12:17:28 +03:00
parent 363a48bb1b
commit fc18e2e0b7
7 changed files with 411 additions and 353 deletions

View File

@@ -1,13 +1,15 @@
package ru.m.tankz.view.common;
import ru.m.tankz.game.GameTracer;
import flash.events.Event;
import haxe.ds.Option;
import haxe.Timer;
import haxework.view.frame.FrameSwitcher;
import haxework.view.GroupView;
import ru.m.tankz.game.Game;
import ru.m.tankz.game.GameEvent;
import ru.m.tankz.game.GameRunner;
import ru.m.tankz.game.GameState;
import ru.m.tankz.game.IGame;
import ru.m.tankz.network.NetworkManager;
import ru.m.tankz.render.Render;
import ru.m.tankz.sound.SoundManager;
@@ -28,8 +30,8 @@ class GameFrame extends GroupView implements GameListener {
@:provide var switcher:FrameSwitcher;
@:provide var storage:GameStorage;
private var game:Game;
private var timer:Timer;
private var game:IGame;
private var runner:GameRunner;
private function get_render():Render {
throw "Not implemented";
@@ -51,19 +53,19 @@ class GameFrame extends GroupView implements GameListener {
if (panel != null) {
game.connect(panel);
}
game.start(state);
timer = new Timer(10);
timer.run = updateEngine;
//game.connect(new GameTracer());
runner = new GameRunner(game);
runner.start(state);
content.addEventListener(Event.ENTER_FRAME, _redraw);
render.draw(game.engine);
}
private function stop():Void {
if (timer != null) {
timer.stop();
timer = null;
}
content.removeEventListener(Event.ENTER_FRAME, _redraw);
if (runner != null) {
runner.dispose();
runner = null;
}
if (game != null) {
game.dispose();
game = null;
@@ -75,7 +77,7 @@ class GameFrame extends GroupView implements GameListener {
switch event {
case GameEvent.COMPLETE(state, winner):
result = state;
this.state = switch game.next() {
this.state = switch runner.next() {
case Some(s):
// ToDo:
var progress = storage.get(game.type);
@@ -94,10 +96,6 @@ class GameFrame extends GroupView implements GameListener {
stop();
}
private function updateEngine():Void {
game.engine.update();
}
private function _redraw(_):Void {
render.draw(game.engine);
}