85 lines
2.7 KiB
Haxe
85 lines
2.7 KiB
Haxe
package ru.m.tankz.view.game;
|
|
|
|
import ru.m.tankz.config.Config;
|
|
import ru.m.tankz.game.GameEvent;
|
|
import ru.m.tankz.Type;
|
|
|
|
using ru.m.tankz.view.ViewUtil;
|
|
|
|
class GameViewHelper {
|
|
|
|
private var view:IGameView;
|
|
private var config:Config;
|
|
private var onelinelevel:Bool;
|
|
|
|
public function new(view:IGameView, config:Config, onelinelevel:Bool = false) {
|
|
this.view = view;
|
|
this.config = config;
|
|
this.onelinelevel = onelinelevel;
|
|
}
|
|
|
|
private function findTeamView(id:TeamId):Null<TeamView> {
|
|
for (view in view.teams.dataViews) {
|
|
if (view.teamId == id) {
|
|
return view;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function findPlayerView(id:PlayerId):Null<PlayerView> {
|
|
var teamView = findTeamView(id.team);
|
|
if (teamView != null) {
|
|
for (view in teamView.dataViews) {
|
|
if (view.playerId == id) {
|
|
return view;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function onGameEvent(event:GameEvent):Void {
|
|
switch event {
|
|
case START(start):
|
|
view.level.text = start.level.toLevelLabel(onelinelevel);
|
|
view.teams.data = [for (team in start.state.teams) team];
|
|
// ToDo: PlayerState default tank?
|
|
for (teamView in view.teams.dataViews) {
|
|
for (playerView in teamView.dataViews) {
|
|
var tank = config.getPlayerTank(playerView.playerId);
|
|
playerView.tank = {
|
|
type: tank.type,
|
|
skin: tank.skin,
|
|
hits: 0,
|
|
bonus: false,
|
|
boat: false,
|
|
color: config.getColor(playerView.playerId),
|
|
};
|
|
}
|
|
}
|
|
case CHANGE(TEAM_LIFE(teamId, life)):
|
|
var view = findPlayerView([teamId, -1]);
|
|
if (view != null) {
|
|
view.life = life;
|
|
}
|
|
case CHANGE(TEAM_SCORE(teamId, score)):
|
|
var view = findPlayerView([teamId, -1]);
|
|
if (view != null) {
|
|
view.score = score;
|
|
}
|
|
case CHANGE(PLAYER_LIFE(playerId, life)):
|
|
var view = findPlayerView(playerId);
|
|
if (view != null) {
|
|
view.life = life;
|
|
}
|
|
case CHANGE(PLAYER_SCORE(playerId, score)):
|
|
var view = findPlayerView(playerId);
|
|
if (view != null) {
|
|
view.score = score;
|
|
}
|
|
case _:
|
|
}
|
|
}
|
|
}
|