[client] update haxework. ep7
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
"gulp-haxetool": "^0.0.14"
|
||||
},
|
||||
"haxeDependencies": {
|
||||
"haxework": "0.9.0",
|
||||
"haxework": "git@bitbucket.org:shmyga/haxework.git",
|
||||
"lime": "7.2.1",
|
||||
"openfl": "8.8.0",
|
||||
"hxcpp": "4.0.8",
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
package ru.m.draw;
|
||||
|
||||
import haxework.color.Color;
|
||||
import flash.geom.ColorTransform;
|
||||
import flash.geom.Rectangle;
|
||||
import flash.display.BitmapData;
|
||||
|
||||
class BitmapUtil {
|
||||
|
||||
public static function colorize(data: BitmapData, color: Color):BitmapData {
|
||||
if (color.zero) return data;
|
||||
var result = data.clone();
|
||||
var transform = new ColorTransform(color.red / 255, color.green / 255, color.blue / 255, 1, 0, 0, 0, 0);
|
||||
result.colorTransform(new Rectangle(0, 0, result.width, result.height), transform);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -7,28 +7,24 @@ skinId: light
|
||||
views:
|
||||
- id: switcher
|
||||
$type: haxework.gui.frame.FrameSwitcher
|
||||
animateFactory: { $class: haxework.animate.CircleMaskAnimate }
|
||||
geometry.size.width: 960
|
||||
geometry.size.height: 720
|
||||
skinId: dark
|
||||
geometry.size.stretch: true
|
||||
layout.hAlign: center
|
||||
layout.vAlign: middle
|
||||
views:
|
||||
- id: start
|
||||
$type: ru.m.tankz.frame.StartFrame
|
||||
skinId: dark
|
||||
# classic
|
||||
- id: classic.level
|
||||
$type: ru.m.tankz.frame.classic.ClassicLevelFrame
|
||||
skinId: dark
|
||||
- id: classic.game
|
||||
$type: ru.m.tankz.frame.classic.ClassicGameFrame
|
||||
# dota
|
||||
- id: dota.level
|
||||
$type: ru.m.tankz.frame.dota.DotaLevelFrame
|
||||
skinId: dark
|
||||
- id: dota.game
|
||||
$type: ru.m.tankz.frame.dota.DotaGameFrame
|
||||
# - id: network
|
||||
# $type: ru.m.tankz.frame.NetworkFrame
|
||||
# skinId: dark
|
||||
- id: settings
|
||||
$type: ru.m.tankz.frame.SettingsFrame
|
||||
skinId: dark
|
||||
|
||||
@@ -24,6 +24,14 @@ class Style {
|
||||
Skin.text(textColor, 18, fontFamily),
|
||||
Skin.size(250, 50)
|
||||
]);
|
||||
resources.skin.put("text.box", [
|
||||
Skin.color(lightColor),
|
||||
Skin.text(textColor, 16, fontFamily),
|
||||
]);
|
||||
resources.skin.put("text.box.active", [
|
||||
Skin.color(0x55aa55),
|
||||
Skin.text(textColor, 16, fontFamily),
|
||||
]);
|
||||
resources.skin.put("button.simple", [
|
||||
Skin.buttonColor(lightColor),
|
||||
Skin.text(textColor, 16, fontFamily),
|
||||
|
||||
@@ -1,28 +1,29 @@
|
||||
---
|
||||
geometry.size.stretch: true
|
||||
layout.hAlign: center
|
||||
layout.vAlign: middle
|
||||
views:
|
||||
- $type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
geometry.size.percent.width: 100
|
||||
geometry.size.fixed.height: 20
|
||||
text: Settings
|
||||
- $type: haxework.gui.HGroupView
|
||||
geometry.size.stretch: true
|
||||
views:
|
||||
- $type: ru.m.tankz.frame.settings.SettingsEditor
|
||||
geometry.size.percent.width: 50
|
||||
geometry.size.percent.height: 100
|
||||
controlIndex: 0
|
||||
- $type: ru.m.tankz.frame.settings.SettingsEditor
|
||||
geometry.size.percent.width: 50
|
||||
geometry.size.percent.height: 100
|
||||
controlIndex: 1
|
||||
- id: close
|
||||
$type: haxework.gui.ButtonView
|
||||
skinId: button.close
|
||||
+onPress: $this:onPress
|
||||
geometry.position: absolute
|
||||
geometry.margin.left: 10
|
||||
geometry.margin.bottom: 10
|
||||
geometry.vAlign: bottom
|
||||
geometry.hAlign: left
|
||||
- $type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
geometry.size.fixed.height: 20
|
||||
text: Settings
|
||||
- $type: haxework.gui.HGroupView
|
||||
geometry.size.width: 100%
|
||||
views:
|
||||
- $type: ru.m.tankz.frame.settings.SettingsEditor
|
||||
geometry.size.percent.width: 50
|
||||
#geometry.size.percent.height: 100
|
||||
controlIndex: 0
|
||||
- $type: ru.m.tankz.frame.settings.SettingsEditor
|
||||
geometry.size.percent.width: 50
|
||||
#geometry.size.percent.height: 100
|
||||
controlIndex: 1
|
||||
- id: close
|
||||
$type: haxework.gui.ButtonView
|
||||
skinId: button.close
|
||||
+onPress: $this:onPress
|
||||
geometry.position: absolute
|
||||
geometry.margin.left: 10
|
||||
geometry.margin.bottom: 10
|
||||
geometry.vAlign: bottom
|
||||
geometry.hAlign: left
|
||||
|
||||
@@ -42,7 +42,4 @@ views:
|
||||
geometry.vAlign: bottom
|
||||
geometry.hAlign: left
|
||||
skinId: button.settings
|
||||
# skin:
|
||||
# - $type: haxework.gui.skin.ButtonBitmapSkin
|
||||
# image: $asset:image:resources/image/ui/settings.png
|
||||
+onPress: $this:onPress
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
---
|
||||
layout:
|
||||
$type: haxework.gui.layout.HorizontalLayout
|
||||
margin: 5
|
||||
hAlign: center
|
||||
vAlign: middle
|
||||
geometry.size.stretch: true
|
||||
views:
|
||||
- id: render
|
||||
$type: ru.m.tankz.render.Render
|
||||
- id: panel
|
||||
$type: ru.m.tankz.frame.classic.ClassicGamePanel
|
||||
geometry.size.width: 200
|
||||
geometry.size.height: 100%
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
package ru.m.tankz.frame.classic;
|
||||
|
||||
import ru.m.tankz.frame.common.IGamePanel;
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.VGroupView;
|
||||
import ru.m.tankz.frame.common.IGamePanel;
|
||||
import ru.m.tankz.frame.common.LifeView;
|
||||
import ru.m.tankz.game.Game;
|
||||
import ru.m.tankz.preset.ClassicGame;
|
||||
|
||||
@:template class ClassicGamePanel extends VGroupView implements IGamePanel {
|
||||
|
||||
@:view var botstate(default, null):LabelView;
|
||||
@:view var player1state(default, null):LabelView;
|
||||
@:view var player2state(default, null):LabelView;
|
||||
@:view var bot:LifeView;
|
||||
@:view var player1:LifeView;
|
||||
@:view var player2:LifeView;
|
||||
|
||||
public var game:Game;
|
||||
|
||||
private function updateViews():Void {
|
||||
botstate.text = 'Bot: ${game.teams[ClassicGame.BOT].life} life';
|
||||
player1state.text = 'Player1: ${game.teams[ClassicGame.HUMAN].players[0].state.life} life';
|
||||
bot.count.text = '${game.teams[ClassicGame.BOT].life}';
|
||||
player1.count.text = '${game.teams[ClassicGame.HUMAN].players[0].state.life}';
|
||||
if (game.teams[ClassicGame.HUMAN].players[1] != null) {
|
||||
player2state.text = 'Player2: ${game.teams[ClassicGame.HUMAN].players[1].state.life} life';
|
||||
player2.count.text = '${game.teams[ClassicGame.HUMAN].players[1].state.life}';
|
||||
} else {
|
||||
player2state.text = "";
|
||||
player2.count.text = "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
---
|
||||
layout.vAlign: middle
|
||||
geometry.padding: 5
|
||||
layout.margin: 5
|
||||
layout.hAlign: right
|
||||
views:
|
||||
- id: botstate
|
||||
$type: haxework.gui.LabelView
|
||||
skin: $r:skin:text
|
||||
geometry.size.width: 100%
|
||||
geometry.size.height: 20
|
||||
- id: player1state
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
geometry.size.width: 100%
|
||||
geometry.size.height: 20
|
||||
- id: player2state
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
geometry.size.width: 100%
|
||||
geometry.size.height: 20
|
||||
- id: bot
|
||||
$type: ru.m.tankz.frame.common.LifeView
|
||||
image.image: $asset:image:resources/image/tank/ba-0.png
|
||||
- id: player1
|
||||
$type: ru.m.tankz.frame.common.LifeView
|
||||
image.image: $asset:image:resources/image/tank/pa-0.png
|
||||
image.color: 0xFFFF00
|
||||
- id: player2
|
||||
$type: ru.m.tankz.frame.common.LifeView
|
||||
image.image: $asset:image:resources/image/tank/pa-0.png
|
||||
image.color: 0x15C040
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
---
|
||||
geometry.size.stretch: true
|
||||
layout:
|
||||
$type: haxework.gui.layout.VerticalLayout
|
||||
hAlign: center
|
||||
@@ -12,7 +11,6 @@ views:
|
||||
margin: 2
|
||||
factory: $this:presetViewFactory
|
||||
+onDataSelect: $code:function(value) preset = value
|
||||
geometry.size.width: 100%
|
||||
geometry.padding: 10
|
||||
- id: levels
|
||||
$type: haxework.gui.DataView<Int>
|
||||
@@ -22,5 +20,4 @@ views:
|
||||
margin: 5
|
||||
factory: $this:levelViewFactory
|
||||
+onDataSelect: $code:function(value) level = value
|
||||
geometry.size.stretch: true
|
||||
geometry.padding: 10
|
||||
|
||||
10
src/client/haxe/ru/m/tankz/frame/common/LifeView.hx
Normal file
10
src/client/haxe/ru/m/tankz/frame/common/LifeView.hx
Normal file
@@ -0,0 +1,10 @@
|
||||
package ru.m.tankz.frame.common;
|
||||
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.ImageView;
|
||||
import haxework.gui.HGroupView;
|
||||
|
||||
@:template class LifeView extends HGroupView {
|
||||
@:view public var image:ImageView;
|
||||
@:view public var count:LabelView;
|
||||
}
|
||||
9
src/client/haxe/ru/m/tankz/frame/common/LifeView.yaml
Normal file
9
src/client/haxe/ru/m/tankz/frame/common/LifeView.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
layout.margin: 5
|
||||
views:
|
||||
- id: image
|
||||
$type: haxework.gui.ImageView
|
||||
- id: count
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text.box
|
||||
geometry.size.fixed: [50, 38]
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
geometry.size.width: 50%
|
||||
geometry.size.width: 200
|
||||
geometry.size.height: 44
|
||||
geometry.margin: 5
|
||||
layout.margin: 10
|
||||
|
||||
@@ -1,130 +1,21 @@
|
||||
package ru.m.tankz.frame.dota;
|
||||
|
||||
import ru.m.tankz.frame.classic.ClassicGamePanel;
|
||||
import ru.m.tankz.frame.common.GameFrame;
|
||||
import ru.m.tankz.frame.common.IGamePanel;
|
||||
import flash.events.Event;
|
||||
import haxe.ds.Option;
|
||||
import haxe.Timer;
|
||||
import haxework.gui.core.Geometry.Position;
|
||||
import haxework.gui.frame.FrameSwitcher;
|
||||
import haxework.gui.VGroupView;
|
||||
import ru.m.tankz.game.Game;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.network.NetworkGame;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.preset.ClassicGame;
|
||||
import ru.m.tankz.preset.DotaGame;
|
||||
import ru.m.tankz.render.Render;
|
||||
import ru.m.tankz.sound.SoundManager;
|
||||
import ru.m.tankz.storage.SaveStorage;
|
||||
import ru.m.tankz.Type.GameType;
|
||||
|
||||
@:template class DotaGameFrame extends VGroupView {
|
||||
|
||||
private static inline var TAG = "GameFrame";
|
||||
@:template class DotaGameFrame extends GameFrame {
|
||||
|
||||
public static inline var ID = "dota.game";
|
||||
|
||||
@:view var render(default, null):Render;
|
||||
@:view("render") private var renderView(default, null):Render;
|
||||
@:view("panel") private var panelView(default, null):IGamePanel;
|
||||
|
||||
@:view var dotaPanel(default, null):DotaGamePanel;
|
||||
@:view var classicPanel(default, null):ClassicGamePanel;
|
||||
|
||||
private var panels:Map<GameType, IGamePanel>;
|
||||
|
||||
@:provide var network:NetworkManager;
|
||||
@:provide var sound:SoundManager;
|
||||
@:provide var state:GameState;
|
||||
@:provide var storage:SaveStorage;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
|
||||
private var game:Game;
|
||||
private var timer:Timer;
|
||||
|
||||
public function init():Void {
|
||||
panels = new Map();
|
||||
panels.set(ClassicGame.TYPE, classicPanel);
|
||||
panels.set(DotaGame.TYPE, dotaPanel);
|
||||
override private function get_render():Render {
|
||||
return renderView;
|
||||
}
|
||||
|
||||
public function onShow():Void {
|
||||
start(state);
|
||||
}
|
||||
|
||||
private function connectGame(game: Game) {
|
||||
game.engine.connect(render);
|
||||
game.engine.connect(sound);
|
||||
}
|
||||
|
||||
private function start(state:GameState):Void {
|
||||
for (type in panels.keys()) {
|
||||
panels.get(type).visible = type == state.type;
|
||||
panels.get(type).geometry.position = type == state.type ? LAYOUT : ABSOLUTE;
|
||||
}
|
||||
// ToDo: local / network game
|
||||
switch (1) {
|
||||
case 1:
|
||||
game = new Game(state.type);
|
||||
connectGame(game);
|
||||
game.start(state).then(onGameStateChange).endThen(onGameComplete);
|
||||
timer = new Timer(10);
|
||||
timer.run = updateEngine;
|
||||
case 2:
|
||||
game = new NetworkGame(state.type);
|
||||
connectGame(game);
|
||||
network.game = cast game;
|
||||
}
|
||||
panels.get(state.type).game = game;
|
||||
content.addEventListener(Event.ENTER_FRAME, _redraw);
|
||||
render.draw(game.engine);
|
||||
sound.play('start');
|
||||
}
|
||||
|
||||
private function stop():Void {
|
||||
if (timer != null) {
|
||||
timer.stop();
|
||||
timer = null;
|
||||
}
|
||||
content.removeEventListener(Event.ENTER_FRAME, _redraw);
|
||||
if (game != null) {
|
||||
game.dispose();
|
||||
game = null;
|
||||
}
|
||||
render.reset();
|
||||
}
|
||||
|
||||
private function onGameStateChange(s:GameState):GameState {
|
||||
panels.get(s.type).toUpdate();
|
||||
return s;
|
||||
}
|
||||
|
||||
private function onGameComplete(result:Option<GameState>):Void {
|
||||
switch (result) {
|
||||
case Option.Some(s):
|
||||
panels.get(s.type).toUpdate();
|
||||
case Option.None:
|
||||
}
|
||||
switch (game.next()) {
|
||||
case Option.Some(s):
|
||||
var state = game.save();
|
||||
this.state = state;
|
||||
storage.write(state);
|
||||
stop();
|
||||
start(state);
|
||||
case Option.None:
|
||||
switcher.change(StartFrame.ID);
|
||||
}
|
||||
}
|
||||
|
||||
public function onHide():Void {
|
||||
stop();
|
||||
}
|
||||
|
||||
private function updateEngine():Void {
|
||||
game.engine.update();
|
||||
}
|
||||
|
||||
private function _redraw(_):Void {
|
||||
render.draw(game.engine);
|
||||
override private function get_panel():IGamePanel {
|
||||
return panelView;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,9 @@
|
||||
---
|
||||
geometry.size.stretch: true
|
||||
layout.hAlign: center
|
||||
layout.vAlign: middle
|
||||
layout:
|
||||
$type: haxework.gui.layout.VerticalLayout
|
||||
margin: 5
|
||||
views:
|
||||
- id: dotaPanel
|
||||
- id: panel
|
||||
$type: ru.m.tankz.frame.dota.DotaGamePanel
|
||||
geometry.size.width: 100%
|
||||
geometry.size.height: 20
|
||||
geometry.position: absolute
|
||||
visible: false
|
||||
- $type: haxework.gui.HGroupView
|
||||
geometry.size.stretch: true
|
||||
layout.hAlign: center
|
||||
layout.vAlign: middle
|
||||
views:
|
||||
- id: render
|
||||
$type: ru.m.tankz.render.Render
|
||||
- id: classicPanel
|
||||
$type: ru.m.tankz.frame.classic.ClassicGamePanel
|
||||
geometry.size.width: 200
|
||||
geometry.size.height: 100%
|
||||
geometry.position: absolute
|
||||
visible: false
|
||||
- id: render
|
||||
$type: ru.m.tankz.render.Render
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
package ru.m.tankz.frame.dota;
|
||||
|
||||
import ru.m.tankz.preset.DotaGame;
|
||||
import ru.m.tankz.frame.common.LifeView;
|
||||
import ru.m.tankz.frame.common.IGamePanel;
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.HGroupView;
|
||||
import ru.m.tankz.game.Game;
|
||||
|
||||
@:template class DotaGamePanel extends HGroupView implements IGamePanel {
|
||||
|
||||
@:view var state(default, null):LabelView;
|
||||
@:view var radiant:LifeView;
|
||||
@:view var dire:LifeView;
|
||||
|
||||
public var game:Game;
|
||||
|
||||
@@ -34,7 +36,8 @@ import ru.m.tankz.game.Game;
|
||||
}
|
||||
|
||||
private function updateViews():Void {
|
||||
state.text = stateString(game);
|
||||
radiant.count.text = '${game.teams[DotaGame.RADIANT].life}';
|
||||
dire.count.text = '${game.teams[DotaGame.DIRE].life}';
|
||||
}
|
||||
|
||||
override public function update():Void {
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
---
|
||||
geometry.size.width: 100%
|
||||
layout.margin: 20
|
||||
views:
|
||||
- id: state
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
- id: radiant
|
||||
$type: ru.m.tankz.frame.common.LifeView
|
||||
image.image: $asset:image:resources/image/tank/bc-0.png
|
||||
image.color: 0xff4422
|
||||
- $type: haxework.gui.SpriteView
|
||||
geometry.size.width: 100%
|
||||
geometry.size.height: 20
|
||||
- id: dire
|
||||
$type: ru.m.tankz.frame.common.LifeView
|
||||
image.image: $asset:image:resources/image/tank/bc-0.png
|
||||
image.color: 0x3284ff
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
---
|
||||
geometry.size.stretch: true
|
||||
layout:
|
||||
$type: haxework.gui.layout.HorizontalLayout
|
||||
views:
|
||||
@@ -9,7 +8,6 @@ views:
|
||||
$type: haxework.gui.layout.VerticalLayout
|
||||
hAlign: center
|
||||
factory: $this:playerViewFactory
|
||||
geometry.size.percent: [50, 100]
|
||||
geometry.padding: 10
|
||||
- id: levels
|
||||
$type: haxework.gui.DataView<Int>
|
||||
@@ -19,5 +17,4 @@ views:
|
||||
margin: 5
|
||||
factory: $this:levelViewFactory
|
||||
+onDataSelect: $code:function(value) level = value
|
||||
geometry.size.percent: [50, 100]
|
||||
geometry.padding: 10
|
||||
|
||||
@@ -3,7 +3,6 @@ package ru.m.tankz.frame.settings;
|
||||
import haxework.gui.HGroupView;
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.list.ListView.IListItemView;
|
||||
import haxework.gui.skin.ColorSkin;
|
||||
import openfl.Assets;
|
||||
import openfl.events.KeyboardEvent;
|
||||
import promhx.Deferred;
|
||||
@@ -11,7 +10,6 @@ import promhx.Promise;
|
||||
import ru.m.tankz.control.ActionConfig;
|
||||
import ru.m.tankz.control.Control;
|
||||
|
||||
|
||||
class KeyboardMap {
|
||||
|
||||
private var data:Map<Int, String>;
|
||||
@@ -36,7 +34,6 @@ class KeyboardMap {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@:template class ActionView extends HGroupView implements IListItemView<ActionItem> {
|
||||
|
||||
public var item_index(default, default):Int;
|
||||
@@ -67,7 +64,7 @@ class KeyboardMap {
|
||||
}
|
||||
|
||||
public function edit():Promise<Int> {
|
||||
cast(this.skin[0], ColorSkin).color = 0x00ff00;
|
||||
action.skinId = key.skinId = "text.box.active";
|
||||
toRedraw();
|
||||
editDeferred = new Deferred();
|
||||
content.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
|
||||
@@ -76,9 +73,8 @@ class KeyboardMap {
|
||||
|
||||
private function onKeyDown(event: KeyboardEvent):Void {
|
||||
content.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
|
||||
cast(this.skin[0], ColorSkin).color = 0x000000;
|
||||
action.skinId = key.skinId = "text.box";
|
||||
toRedraw();
|
||||
|
||||
data.key = event.keyCode;
|
||||
key.text = keyLabel(data.key);
|
||||
editDeferred.resolve(data.key);
|
||||
|
||||
@@ -1,21 +1,12 @@
|
||||
---
|
||||
geometry.size.width: 100%
|
||||
geometry.size.height: 44
|
||||
geometry.margin: 5
|
||||
layout.margin: 5
|
||||
views:
|
||||
- id: action
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
geometry.size.width: 50%
|
||||
geometry.size.height: 100%
|
||||
text: ""
|
||||
- id: key
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
geometry.size.width: 50%
|
||||
geometry.size.height: 100%
|
||||
text: ""
|
||||
skin:
|
||||
- $type: haxework.gui.skin.ColorSkin
|
||||
color: 0x000000
|
||||
alpha: 0.2
|
||||
- id: action
|
||||
$type: haxework.gui.LabelView
|
||||
geometry.size.fixed: [200, 38]
|
||||
skinId: text.box
|
||||
- id: key
|
||||
$type: haxework.gui.LabelView
|
||||
geometry.size.fixed: [200, 38]
|
||||
skinId: text.box
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package ru.m.tankz.frame.settings;
|
||||
|
||||
import haxework.gui.ButtonView;
|
||||
import haxework.gui.DataView;
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.list.ListView;
|
||||
import haxework.gui.VGroupView;
|
||||
import promhx.Promise;
|
||||
import ru.m.tankz.control.ActionConfig.ActionItem;
|
||||
@@ -14,7 +14,7 @@ import ru.m.tankz.storage.SettingsStorage;
|
||||
public var controlIndex(default, set): Int;
|
||||
|
||||
@:view var label:LabelView;
|
||||
@:view var list:ListView<ActionItem>;
|
||||
@:view var list:DataView<ActionItem>;
|
||||
@:view var change:ButtonView;
|
||||
@:view var clear:ButtonView;
|
||||
@:view var reset:ButtonView;
|
||||
@@ -28,6 +28,13 @@ import ru.m.tankz.storage.SettingsStorage;
|
||||
return this.controlIndex;
|
||||
}
|
||||
|
||||
private function viewFactory(index:Int, value:ActionItem) {
|
||||
var view = new ActionView();
|
||||
view.item_index = index;
|
||||
view.data = value;
|
||||
return view;
|
||||
}
|
||||
|
||||
public function onPress(view:ButtonView):Void {
|
||||
switch (view.id) {
|
||||
case "change": _change();
|
||||
@@ -39,7 +46,7 @@ import ru.m.tankz.storage.SettingsStorage;
|
||||
|
||||
private function _change():Void {
|
||||
var p: Promise<Int> = Promise.promise(0);
|
||||
for (view in list.items) {
|
||||
for (view in list.views) {
|
||||
var v: ActionView = cast view;
|
||||
if (v.data == null) break;
|
||||
p = p.pipe(function(_):Promise<Int> return v.edit());
|
||||
@@ -51,6 +58,7 @@ import ru.m.tankz.storage.SettingsStorage;
|
||||
for (item in list.data) {
|
||||
item.key = -1;
|
||||
}
|
||||
list.data = list.data;
|
||||
list.toUpdate();
|
||||
_save();
|
||||
}
|
||||
|
||||
@@ -1,32 +1,29 @@
|
||||
layout.margin: 10
|
||||
layout.hAlign: center
|
||||
views:
|
||||
- id: label
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
- $type: haxework.gui.HGroupView
|
||||
layout.margin: 10
|
||||
views:
|
||||
- id: change
|
||||
$type: haxework.gui.ButtonView
|
||||
+onPress: $this:onPress
|
||||
skinId: button.simple
|
||||
text: Change
|
||||
- id: clear
|
||||
$type: haxework.gui.ButtonView
|
||||
+onPress: $this:onPress
|
||||
skinId: button.simple
|
||||
text: Clear
|
||||
- id: reset
|
||||
$type: haxework.gui.ButtonView
|
||||
+onPress: $this:onPress
|
||||
skinId: button.simple
|
||||
text: Reset
|
||||
- id: list
|
||||
$type: haxework.gui.list.VListView<ru.m.tankz.control.ActionItem>
|
||||
factory: $code:function() return new ru.m.tankz.frame.settings.ActionView()
|
||||
geometry.size.stretch: true
|
||||
scroll:
|
||||
$type: haxework.gui.list.VScrollBarView
|
||||
geometry.position: absolute
|
||||
visible: false
|
||||
- id: label
|
||||
$type: haxework.gui.LabelView
|
||||
skinId: text
|
||||
- $type: haxework.gui.HGroupView
|
||||
layout.margin: 10
|
||||
views:
|
||||
- id: change
|
||||
$type: haxework.gui.ButtonView
|
||||
+onPress: $this:onPress
|
||||
skinId: button.simple
|
||||
text: Change
|
||||
- id: clear
|
||||
$type: haxework.gui.ButtonView
|
||||
+onPress: $this:onPress
|
||||
skinId: button.simple
|
||||
text: Clear
|
||||
- id: reset
|
||||
$type: haxework.gui.ButtonView
|
||||
+onPress: $this:onPress
|
||||
skinId: button.simple
|
||||
text: Reset
|
||||
- id: list
|
||||
$type: haxework.gui.DataView<ru.m.tankz.control.ActionItem>
|
||||
layout:
|
||||
$type: haxework.gui.layout.VerticalLayout
|
||||
factory: $this:viewFactory
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package ru.m.tankz.render;
|
||||
|
||||
import haxework.gui.utils.BitmapUtil;
|
||||
import haxework.color.Color;
|
||||
import ru.m.draw.BitmapUtil;
|
||||
import flash.display.BitmapData;
|
||||
import openfl.Assets;
|
||||
import ru.m.animate.Animate;
|
||||
@@ -9,7 +9,6 @@ import ru.m.animate.OnceAnimate;
|
||||
import ru.m.tankz.core.Tank;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
|
||||
class AnimateBundle {
|
||||
|
||||
private static function buildAnimate(name:String, sequence:Array<Int>):OnceAnimate {
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package ru.m.tankz.render;
|
||||
|
||||
import haxework.resources.IResources;
|
||||
import haxework.provider.Provider;
|
||||
import flash.display.DisplayObjectContainer;
|
||||
import flash.display.Graphics;
|
||||
import flash.display.Sprite;
|
||||
@@ -9,6 +7,8 @@ import flash.text.TextField;
|
||||
import flash.text.TextFormat;
|
||||
import haxe.Timer;
|
||||
import haxework.gui.SpriteView;
|
||||
import haxework.provider.Provider;
|
||||
import haxework.resources.IResources;
|
||||
import ru.m.animate.Animate;
|
||||
import ru.m.animate.OnceAnimate;
|
||||
import ru.m.geom.Point;
|
||||
@@ -17,7 +17,6 @@ import ru.m.tankz.engine.Engine;
|
||||
import ru.m.tankz.render.RenderItem;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
|
||||
class Render extends SpriteView {
|
||||
|
||||
private var backgroundLayer:Sprite;
|
||||
|
||||
@@ -3,8 +3,8 @@ package ru.m.tankz.editor.tank;
|
||||
import flash.display.Bitmap;
|
||||
import flash.display.BitmapData;
|
||||
import haxework.color.Color;
|
||||
import haxework.gui.utils.BitmapUtil;
|
||||
import haxework.gui.View;
|
||||
import ru.m.draw.BitmapUtil;
|
||||
|
||||
class TankView extends View<Bitmap> {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user