[common] added game progress
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"pWidth": 100, "pHeight": 100,
|
||||
"views": [
|
||||
{
|
||||
"id": "state", "@type": "haxework.gui.LabelView", "@style": "label",
|
||||
"pWidth": 100, "height": 20
|
||||
},
|
||||
{
|
||||
"id": "render", "@type": "ru.m.tankz.render.Render",
|
||||
"contentSize": true
|
||||
|
||||
@@ -1,19 +1,30 @@
|
||||
package ru.m.tankz.view.frames;
|
||||
|
||||
import ru.m.tankz.game.GameState;
|
||||
import haxe.ds.Option;
|
||||
import haxe.ds.Option;
|
||||
import flash.events.Event;
|
||||
import haxe.Timer;
|
||||
import haxework.gui.frame.IFrameSwitcher;
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.VGroupView;
|
||||
import haxework.gui.ViewBuilder;
|
||||
import haxework.provider.Provider;
|
||||
import protohx.Message;
|
||||
import ru.m.connect.IConnection;
|
||||
import ru.m.tankz.game.Game;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.proto.pack.GameUpdateResponse;
|
||||
import ru.m.tankz.render.Render;
|
||||
|
||||
|
||||
interface GameFrameLayout {
|
||||
var state(default, null):LabelView;
|
||||
var render(default, null):Render;
|
||||
}
|
||||
|
||||
|
||||
@:template("layout/frames/game.json", "layout/styles.json")
|
||||
class GameFrame extends VGroupView implements ViewBuilder implements IPacketHandler {
|
||||
class GameFrame extends VGroupView implements ViewBuilder implements IPacketHandler implements GameFrameLayout {
|
||||
|
||||
private static inline var TAG = "GameFrame";
|
||||
|
||||
@@ -26,18 +37,53 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
|
||||
}
|
||||
|
||||
public function onShow():Void {
|
||||
var state:GameState = Provider.get(GameState);
|
||||
game = Provider.build(Game, state.type);
|
||||
var s:GameState = Provider.get(GameState);
|
||||
game = Provider.build(Game, s.type);
|
||||
if (game == null) {
|
||||
throw 'Unsupported game type "${state.type}"';
|
||||
throw 'Unsupported game type "${s.type}"';
|
||||
}
|
||||
game.engine.listeners.push(render);
|
||||
game.start(state);
|
||||
game.start(s).then(onGameStateChange).endThen(onGameComplete);
|
||||
content.addEventListener(Event.ENTER_FRAME, redraw);
|
||||
//Provider.get(IConnection).packetHandler.addListener(this);
|
||||
render.draw(game.engine);
|
||||
timer = new Timer(10);
|
||||
timer.run = updateEngine;
|
||||
state.text = stateString(s);
|
||||
}
|
||||
|
||||
private function stateString(state:GameState):String {
|
||||
var result:Array<String> = [];
|
||||
for (teamId in state.teams.keys()) {
|
||||
var ts:TeamState = state.teams[teamId];
|
||||
if (ts.lose) {
|
||||
result.push('${teamId}: LOSE');
|
||||
} else if (ts.life > -1) {
|
||||
result.push('${teamId}: ${ts.life}');
|
||||
} else {
|
||||
for (index in ts.players.keys()) {
|
||||
var ps:PlayerState = ts.players[index];
|
||||
if (ps.life > -1) {
|
||||
result.push('${teamId}${index}: ${ps.life}');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result.join(' ');
|
||||
}
|
||||
|
||||
private function onGameStateChange(s:GameState):GameState {
|
||||
state.text = stateString(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
private function onGameComplete(result:Option<GameState>):Void {
|
||||
switch (result) {
|
||||
case Option.Some(s):
|
||||
state.text = stateString(s);
|
||||
case Option.None:
|
||||
}
|
||||
Provider.get(IFrameSwitcher).change(StartFrame.ID);
|
||||
}
|
||||
|
||||
public function onHide():Void {
|
||||
|
||||
Reference in New Issue
Block a user