[client] add RecordFrame

This commit is contained in:
2019-05-07 17:21:01 +03:00
parent a7f286dc42
commit 183c6c16f1
19 changed files with 162 additions and 63 deletions

View File

@@ -69,10 +69,6 @@ class Init {
controlFactory = new ClientControlFactory();
popupManager = new PopupManager();
for (record in recordStorage) {
L.w("RECORD", '${record.id}. ${record.date}');
}
popupManager.showAnimateFactory = function(v) return new UnFadeAnimate(v, 100);
popupManager.closeAnimateFactory = function(v) return new FadeAnimate(v, 100);

View File

@@ -115,6 +115,7 @@ class Render extends SpriteView implements GameListener implements EngineListene
var item = new BulletItem(bullet);
items.set(bullet.key, item);
entryLayer.addChild(item.view);
item.update();
case BONUS(bonus):
var item = new BonusItem(bonus);
items.set(bonus.key, item);

View File

@@ -17,3 +17,5 @@ views:
$type: ru.m.tankz.view.ResultFrame
- id: settings
$type: ru.m.tankz.view.SettingsFrame
- id: record
$type: ru.m.tankz.view.RecordFrame

View File

@@ -0,0 +1,43 @@
package ru.m.tankz.view;
import haxework.view.frame.FrameSwitcher;
import haxework.view.list.ListView.IListItemView;
import haxework.view.list.VListView;
import haxework.view.VGroupView;
import ru.m.tankz.game.record.GameRecord;
import ru.m.tankz.preset.ClassicGame;
import ru.m.tankz.preset.DeathGame;
import ru.m.tankz.preset.DotaGame;
import ru.m.tankz.storage.RecordStorage;
import ru.m.tankz.view.classic.ClassicGameFrame;
import ru.m.tankz.view.death.DeathGameFrame;
import ru.m.tankz.view.dota.DotaGameFrame;
@:template class RecordFrame extends VGroupView {
public static var ID(default, never):String = "record";
@:view var data:VListView<GameRecord>;
@:provide var recordStorage:RecordStorage;
@:provide var switcher:FrameSwitcher;
@:provide var record:GameRecord;
public function onShow():Void {
data.data = Lambda.array(recordStorage);
}
private function onRecordSelect(item:IListItemView<GameRecord>):Void {
record = item.data;
// ToDo: copy@paste from LevelFrame
switcher.change(switch record.type {
case ClassicGame.TYPE: ClassicGameFrame.ID;
case DotaGame.TYPE: DotaGameFrame.ID;
case DeathGame.TYPE: DeathGameFrame.ID;
case _: StartFrame.ID;
});
}
private function close() {
switcher.change(StartFrame.ID);
}
}

View File

@@ -0,0 +1,20 @@
---
views:
- $type: haxework.view.VGroupView
skinId: container
views:
- $type: haxework.view.LabelView
skinId: text.header
text: Records
- id: data
$type: haxework.view.list.VListView
factory: $code:function() return new haxework.view.list.LabelListItem()
+onItemSelect: $this:onRecordSelect
geometry.margin.top: 20
geometry.size.stretch: true
- $type: haxework.view.HGroupView
skinId: panel
views:
- $type: haxework.view.ButtonView
skinId: button.close
+onPress: $code:close()

View File

@@ -11,13 +11,13 @@ import ru.m.tankz.view.popup.FontPopup;
public static var ID(default, never):String = "start";
@:provide var state:GameState;
@:provide var swicther:FrameSwitcher;
@:provide var switcher:FrameSwitcher;
private var fontPopup:FontPopup;
private function startGame(type:GameType):Void {
state = new GameState(type);
swicther.change(LevelFrame.ID);
switcher.change(LevelFrame.ID);
}
private function choiceFont():Void {

View File

@@ -21,13 +21,17 @@ views:
skinId: button
+onPress: $code:startGame('death')
text: DeathMatch
- $type: haxework.view.ButtonView
skinId: button
+onPress: $code:switcher.change('record')
text: Records
- $type: haxework.view.HGroupView
skinId: panel
views:
- id: settings
$type: haxework.view.ButtonView
skinId: button.settings
+onPress: $code:swicther.change('settings')
+onPress: $code:switcher.change('settings')
- $type: haxework.view.SpriteView
geometry.size.width: 100%
- $type: haxework.view.LabelView

View File

@@ -37,20 +37,20 @@ import ru.m.tankz.view.common.LifeView;
switch event {
case START(state):
refresh(state);
case CHANGE(TEAM_LIFE(team, life)):
if (team.id == ClassicGame.BOT) {
case CHANGE(TEAM_LIFE(teamId, life)):
if (teamId == ClassicGame.BOT) {
bot.life = life;
}
case CHANGE(PLAYER_LIFE(player, life)):
if (player.id == player1Id) {
case CHANGE(PLAYER_LIFE(playerId, life)):
if (playerId == player1Id) {
player1.life = life;
} else if (player.id == player2Id) {
} else if (playerId == player2Id) {
player2.life = life;
}
case CHANGE(PLAYER_SCORE(player, score)):
if (player.id == player1Id) {
case CHANGE(PLAYER_SCORE(playerId, score)):
if (playerId == player1Id) {
player1.score = score;
} else if (player.id == player2Id) {
} else if (playerId == player2Id) {
player2.score = score;
}
case _:

View File

@@ -9,6 +9,8 @@ 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.game.record.GamePlayer;
import ru.m.tankz.game.record.GameRecord;
import ru.m.tankz.game.record.GameRecorder;
import ru.m.tankz.network.NetworkManager;
import ru.m.tankz.render.Render;
@@ -27,6 +29,7 @@ class GameFrame extends GroupView implements GameListener {
@:provide var network:NetworkManager;
@:provide var soundManager:SoundManager;
@:provide var state:GameState;
@:provide var record:GameRecord;
@:provide("result") var result:GameState;
@:provide var switcher:FrameSwitcher;
@:provide var gameStorage:GameStorage;
@@ -35,6 +38,7 @@ class GameFrame extends GroupView implements GameListener {
private var game:IGame;
private var runner:GameRunner;
private var recorder:GameRecorder;
private var player:GamePlayer;
private function get_render():Render {
throw "Not implemented";
@@ -45,11 +49,16 @@ class GameFrame extends GroupView implements GameListener {
}
public function onShow():Void {
start(state);
if (record != null) {
play(record);
record = null;
} else {
start(state);
}
}
private function start(state:GameState):Void {
game = new Game(state.type);
game = new Game(state);
game.connect(render);
game.engine.connect(render);
game.connect(soundManager);
@@ -66,6 +75,21 @@ class GameFrame extends GroupView implements GameListener {
render.draw(game.engine);
}
private function play(record:GameRecord):Void {
game = new Game(record.state);
game.connect(render);
game.engine.connect(render);
game.connect(soundManager);
//game.connect(this);
if (panel != null) {
game.connect(panel);
}
player = new GamePlayer(game, record);
player.start();
content.addEventListener(Event.ENTER_FRAME, _redraw);
render.draw(game.engine);
}
private function stop():Void {
content.removeEventListener(Event.ENTER_FRAME, _redraw);
if (runner != null) {
@@ -83,7 +107,7 @@ class GameFrame extends GroupView implements GameListener {
switch event {
case GameEvent.COMPLETE(state, winner):
// ToDo:
//recordStorage.save(recorder.record);
recordStorage.save(recorder.record);
result = state;
this.state = switch runner.next() {
case Some(s):

View File

@@ -35,10 +35,10 @@ import ru.m.tankz.view.common.LifeView;
switch event {
case START(state):
refresh(state);
case CHANGE(TEAM_LIFE(team, life)):
getLifeView(team.id).life = life;
case CHANGE(TEAM_SCORE(team, score)):
getLifeView(team.id).score = score;
case CHANGE(TEAM_LIFE(teamId, life)):
getLifeView(teamId).life = life;
case CHANGE(TEAM_SCORE(teamId, score)):
getLifeView(teamId).score = score;
case _:
}
}