[common] add deathmatch mode

This commit is contained in:
2019-03-25 17:42:20 +03:00
parent 7d570336a5
commit 556cd2f1a9
14 changed files with 223 additions and 15 deletions

View File

@@ -15,6 +15,11 @@ views:
$type: ru.m.tankz.view.dota.DotaLevelFrame
- id: dota.game
$type: ru.m.tankz.view.dota.DotaGameFrame
# death
- id: death.level
$type: ru.m.tankz.view.death.DeathLevelFrame
- id: death.game
$type: ru.m.tankz.view.death.DeathGameFrame
# result
- id: result
$type: ru.m.tankz.view.ResultFrame

View File

@@ -4,6 +4,7 @@ import haxework.view.ButtonView;
import haxework.view.frame.FrameSwitcher;
import haxework.view.VGroupView;
import ru.m.tankz.view.classic.ClassicLevelFrame;
import ru.m.tankz.view.death.DeathLevelFrame;
import ru.m.tankz.view.dota.DotaLevelFrame;
import ru.m.tankz.view.popup.FontPopup;
@@ -21,6 +22,8 @@ import ru.m.tankz.view.popup.FontPopup;
frameSwitcher.change(ClassicLevelFrame.ID);
case 'dota':
frameSwitcher.change(DotaLevelFrame.ID);
case 'death':
frameSwitcher.change(DeathLevelFrame.ID);
case 'network':
//frameSwitcher.change(NetworkFrame.ID);
case 'settings':

View File

@@ -17,6 +17,11 @@ views:
skinId: button
+onPress: $this:onPress
text: DotA
- id: death
$type: haxework.view.ButtonView
skinId: button
+onPress: $this:onPress
text: DeathMatch
# - id: font
# $type: haxework.view.ButtonView
# skinId: button

View File

@@ -1,16 +1,16 @@
package ru.m.tankz.view.common;
import ru.m.tankz.game.GameState;
import flash.events.Event;
import haxe.ds.Option;
import haxe.Timer;
import haxework.view.frame.FrameSwitcher;
import haxework.view.GroupView;
import ru.m.tankz.view.common.IGamePanel;
import ru.m.tankz.game.Game;
import ru.m.tankz.game.GameState;
import ru.m.tankz.network.NetworkManager;
import ru.m.tankz.render.Render;
import ru.m.tankz.sound.SoundManager;
import ru.m.tankz.view.common.IGamePanel;
class GameFrame extends GroupView {
@@ -33,7 +33,7 @@ class GameFrame extends GroupView {
}
private function get_panel():IGamePanel {
throw "Not implemented";
return null;
}
public function onShow():Void {
@@ -47,7 +47,9 @@ class GameFrame extends GroupView {
game.start(state).then(onGameStateChange).endThen(onGameComplete);
timer = new Timer(10);
timer.run = updateEngine;
panel.game = game;
if (panel != null) {
panel.game = game;
}
content.addEventListener(Event.ENTER_FRAME, _redraw);
render.draw(game.engine);
sound.play('start');
@@ -67,7 +69,9 @@ class GameFrame extends GroupView {
}
private function onGameStateChange(_):Void {
panel.toUpdate();
if (panel != null) {
panel.toUpdate();
}
}
private function onGameComplete(_):Void {

View File

@@ -10,6 +10,7 @@ views:
$type: haxework.view.DataView
factory: $this:teamViewFactory
layout:
$type: haxework.view.layout.HorizontalLayout
$type: haxework.view.layout.TailLayout
rowSize: 5
margin: 3
+onDataSelect: $this:onTeamSelect

View File

@@ -0,0 +1,21 @@
package ru.m.tankz.view.death;
import ru.m.tankz.render.Render;
import ru.m.tankz.view.common.GameFrame;
import ru.m.tankz.view.common.IGamePanel;
@:template class DeathGameFrame extends GameFrame {
public static inline var ID = "death.game";
@:view("render") private var renderView(default, null):Render;
//@:view("panel") private var panelView(default, null):IGamePanel;
override private function get_render():Render {
return renderView;
}
/*override private function get_panel():IGamePanel {
return panelView;
}*/
}

View File

@@ -0,0 +1,8 @@
---
skinId: container
views:
- $type: haxework.view.VGroupView
layout.margin: 5
views:
- id: render
$type: ru.m.tankz.render.Render

View File

@@ -0,0 +1,37 @@
package ru.m.tankz.view.death;
import haxework.view.ButtonView;
import haxework.view.DataView;
import haxework.view.frame.FrameSwitcher;
import ru.m.tankz.game.GameState;
import ru.m.tankz.preset.DeathGame;
import ru.m.tankz.view.common.LevelFrame;
import ru.m.tankz.view.common.PlayerView;
@:template class DeathLevelFrame extends LevelFrame {
public static inline var ID = "death.level";
@:view var levels(default, null):DataView<Int, ButtonView>;
@:view var players(default, null):DataView<Array<PlayerState>, PlayerView>;
@:provide var frames:FrameSwitcher;
private function onShow():Void {
gameType = DeathGame.TYPE;
levels.data = [for (i in 0...config.game.levels) i];
players.data = [for (i in 0...2) state.players];
}
private function playerViewFactory(index:Int, data:Array<PlayerState>):PlayerView {
var view = new PlayerView();
view.item_index = index;
view.data = data;
return view;
}
override private function set_level(value:Int):Int {
var result = super.set_level(value);
frames.change(DeathGameFrame.ID);
return result;
}
}

View File

@@ -0,0 +1,24 @@
---
skinId: container
layout:
$type: haxework.view.layout.VerticalLayout
views:
- $type: haxework.view.LabelView
skinId: text.header
text: DeathMatch
- id: players
$type: haxework.view.DataView
layout:
$type: haxework.view.layout.VerticalLayout
hAlign: right
factory: $this:playerViewFactory
geometry.padding: 10
- id: levels
$type: haxework.view.DataView
layout:
$type: haxework.view.layout.TailLayout
rowSize: 5
margin: 5
factory: $this:levelViewFactory
+onDataSelect: $code:function(value) level = value
geometry.padding: 10