[client] add RecordFrame
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
43
src/client/haxe/ru/m/tankz/view/RecordFrame.hx
Normal file
43
src/client/haxe/ru/m/tankz/view/RecordFrame.hx
Normal 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);
|
||||
}
|
||||
}
|
||||
20
src/client/haxe/ru/m/tankz/view/RecordFrame.yaml
Normal file
20
src/client/haxe/ru/m/tankz/view/RecordFrame.yaml
Normal 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()
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 _:
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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 _:
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user