[client] LevelFrame

This commit is contained in:
2018-01-26 14:38:36 +03:00
parent d72d7e8c81
commit 6a00ee83d7
50 changed files with 120 additions and 65 deletions

View File

@@ -0,0 +1,21 @@
{
"pWidth": 100, "pHeight": 100,
"views": [
{
"id":"levels", "@type":"haxework.gui.list.VListView<Int>",
"factory": "@class:ru.m.tankz.view.frames.list.LevelView",
"pWidth":100,
"pHeight":100,
"paddings":10,
"scroll":{
"@type":"haxework.gui.list.VScrollView",
"width":10, "pHeight":100,
"skin":{"@type":"haxework.gui.list.VScrollSkin"}
},
"skin": {
"@type": "haxework.gui.skin.ColorSkin",
"color": "0x000000", "alpha": 0.0
}
}
]
}

View File

@@ -15,6 +15,10 @@
"id": "start",
"@type": "ru.m.tankz.view.frames.StartFrame"
},
{
"id": "level",
"@type": "ru.m.tankz.view.frames.LevelFrame"
},
{
"id": "game",
"@type": "ru.m.tankz.view.frames.GameFrame"

View File

@@ -1,13 +1,18 @@
{
"person": {
"level": {
"width": 440, "height": 44,
"margins": 5,
"views": [
{
"id": "nameLabel",
"id": "label",
"@type": "haxework.gui.LabelView",
"pWidth": 100, "height": 44, "text": "Выбор персонажа",
"pWidth": 100, "pHeight": 100, "text": "",
"@style": "label"
}
]
],
"skin": {
"@type": "haxework.gui.skin.ColorSkin",
"color": "0x000000", "alpha": 0.2
}
}
}

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.render;
import flash.display.DisplayObjectContainer;
import ru.m.tankz.core.EntityType;
import flash.display.DisplayObject;
import Type.ValueType;
@@ -68,15 +69,21 @@ class Render extends SpriteView implements EngineListener {
}
}
private function clearLayer(layer:DisplayObjectContainer) {
while (layer.numChildren > 0) layer.removeChildAt(0);
}
public function reset():Void {
items = new Map<String, RenderItem<Dynamic>>();
if (background != null) {
backgroundLayer.removeChild(background);
background = null;
}
clearLayer(entryLayer);
clearLayer(groundLayer);
clearLayer(upLayer);
}
public function onSpawn(entity:EntityType):Void {
switch(entity) {
case EntityType.TANK(tank):

View File

@@ -0,0 +1,35 @@
package ru.m.tankz.view.frames;
import ru.m.tankz.config.ConfigBundle;
import haxework.gui.frame.IFrameSwitcher;
import ru.m.tankz.game.GameState;
import haxework.provider.Provider;
import haxework.gui.list.ListView;
import haxework.gui.ViewBuilder;
import haxework.gui.VGroupView;
interface LevelFrameLayout {
var levels(default, null):ListView<Int>;
}
@:template("layout/frames/level.json", "layout/styles.json")
class LevelFrame extends VGroupView implements ViewBuilder implements LevelFrameLayout implements ListViewListener<Int> {
public static inline var ID = "level";
public function init():Void {
levels.dispatcher.addListener(this);
}
public function onShow():Void {
var state = Provider.get(GameState);
var c = ConfigBundle.get(state.type).levels;
levels.data = [for (i in 0...c) i];
}
public function onListItemClick(item:IListItemView<Int>):Void {
Provider.get(GameState).level = item.data;
Provider.get(IFrameSwitcher).change(GameFrame.ID);
}
}

View File

@@ -30,6 +30,6 @@ class StartFrame extends VGroupView implements ViewBuilder {
private function startGame(humans:Int):Void {
Provider.set(GameState, ClassicGame.buildState(0, humans));
Provider.get(IFrameSwitcher).change(GameFrame.ID);
Provider.get(IFrameSwitcher).change(LevelFrame.ID);
}
}

View File

@@ -1,33 +0,0 @@
package ru.m.tankz.view.frames.list;
import ru.m.tankz.proto.Person;
import ru.m.tankz.proto.Game;
import haxework.gui.list.ListView.IListItemView;
import haxework.gui.LabelView;
import haxework.gui.skin.ColorSkin;
import haxework.gui.HGroupView;
class GameView extends HGroupView implements IListItemView<Game> {
public var item_index(default, default):Int;
public var data(default, set):Game;
private var nameLabel:LabelView;
public function new() {
super();
pWidth = 100;
height = 50;
skin = new ColorSkin(0xffffff);
nameLabel = new LabelView();
addView(nameLabel);
}
private function set_data(value:Game):Game {
this.data = value;
var persons:String = Lambda.map(this.data.persons, function(p:Person) return p.name).join(",");
nameLabel.text = "Game_" + this.data.id + "(" + persons + ")";
return this.data;
}
}

View File

@@ -0,0 +1,24 @@
package ru.m.tankz.view.frames.list;
import haxework.gui.ViewBuilder;
import haxework.gui.HGroupView;
import haxework.gui.LabelView;
import haxework.gui.list.ListView.IListItemView;
interface LevelViewLayout {
var label(default, null):LabelView;
}
@:template("layout/other.json@level", "layout/styles.json")
class LevelView extends HGroupView implements ViewBuilder implements IListItemView<Int> implements LevelViewLayout {
public var item_index(default, default):Int;
public var data(default, set):Int;
private function set_data(value:Int):Int {
data = value;
label.text = 'Level ${data}';
return data;
}
}

View File

@@ -1,19 +0,0 @@
package ru.m.tankz.view.frames.list;
import haxework.gui.ViewBuilder;
import haxework.gui.list.ListView.IListItemView;
import ru.m.tankz.proto.Person;
import haxework.gui.HGroupView;
@:template("layout/other.json@person", "layout/styles.json")
class PersonView extends HGroupView implements ViewBuilder implements IListItemView<Person> {
public var item_index(default, default):Int;
public var data(default, set):Person;
private function set_data(value:Person):Person {
this.data = value;
nameLabel.text = this.data.name;
return this.data;
}
}

View File

@@ -1,3 +1,5 @@
levels: 36
map:
cellWidth: 22
cellHeight: 22