[common] game next function

This commit is contained in:
2018-01-30 22:04:48 +03:00
parent f69c7af618
commit 38e2a39c4a
7 changed files with 124 additions and 38 deletions

View File

@@ -63,10 +63,10 @@ class Client implements IConnectionHandler {
#end
//Provider.get(IConnection).handler.addListener(this);
view = new MainView();
Provider.set(IFrameSwitcher, view.switcher);
Root.bind(view);
view.content.stage.stageFocusRect = false;
//view.logout.onPress = this;
view.switcher.change(StartFrame.ID);

View File

@@ -33,11 +33,13 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
private var game:Game;
private var timer:Timer;
public function init():Void {
}
public function init():Void {}
public function onShow():Void {
var s:GameState = Provider.get(GameState);
start(Provider.get(GameState));
}
private function start(s:GameState):Void {
game = Provider.build(Game, s.type);
if (game == null) {
throw 'Unsupported game type "${s.type}"';
@@ -52,8 +54,23 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
state.text = stateString(s);
}
private function stop():Void {
//Provider.get(IConnection).packetHandler.removeListener(this);
if (timer != null) {
timer.stop();
timer = null;
}
content.removeEventListener(Event.ENTER_FRAME, redraw);
if (game != null) {
game.dispose();
game = null;
}
render.reset();
}
private function stateString(state:GameState):String {
var result:Array<String> = [];
result.push('Level: ${state.level}');
for (teamId in state.teams.keys()) {
var ts:TeamState = state.teams[teamId];
if (ts.lose) {
@@ -69,7 +86,7 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
}
}
}
return result.join(' ');
return '[ ${result.join(' | ')} ]';
}
private function onGameStateChange(s:GameState):GameState {
@@ -83,18 +100,17 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
state.text = stateString(s);
case Option.None:
}
Provider.get(IFrameSwitcher).change(StartFrame.ID);
switch (game.next()) {
case Option.Some(s):
stop();
start(s);
case Option.None:
Provider.get(IFrameSwitcher).change(StartFrame.ID);
}
}
public function onHide():Void {
//Provider.get(IConnection).packetHandler.removeListener(this);
if (timer != null) {
timer.stop();
timer = null;
}
content.removeEventListener(Event.ENTER_FRAME, redraw);
game.dispose();
render.reset();
stop();
}
private function updateEngine():Void {