[editor] refactor MapEditView
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
package ru.m.tankz.render;
|
||||
|
||||
import haxework.view.IView;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.game.IGame;
|
||||
|
||||
interface IRender extends IView<Dynamic> {
|
||||
public var game(default, set):IGame;
|
||||
interface IRender extends IView<Dynamic> extends GameListener {
|
||||
public var config(default, set):Config;
|
||||
public function draw():Void;
|
||||
public function reset():Void;
|
||||
}
|
||||
|
||||
@@ -14,17 +14,17 @@ import ru.m.geom.Point;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.core.EntityType;
|
||||
import ru.m.tankz.game.GameEvent;
|
||||
import ru.m.tankz.game.IGame;
|
||||
import ru.m.tankz.render.item.BonusRenderItem;
|
||||
import ru.m.tankz.render.item.BrickRenderItem;
|
||||
import ru.m.tankz.render.item.BulletRenderItem;
|
||||
import ru.m.tankz.render.item.EagleRenderItem;
|
||||
import ru.m.tankz.render.item.IRenderItem;
|
||||
import ru.m.tankz.render.item.TankRenderItem;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
class Render extends SpriteView implements IRender implements GameListener {
|
||||
class Render extends SpriteView implements IRender {
|
||||
|
||||
public var game(default, set):IGame;
|
||||
public var config(default, set):Config;
|
||||
|
||||
private var backgroundLayer:Sprite;
|
||||
private var groundLayer:Sprite;
|
||||
@@ -32,7 +32,6 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
private var upLayer:Sprite;
|
||||
private var upperLayer:Sprite;
|
||||
|
||||
private var background:Sprite;
|
||||
private var items:Map<Int, IRenderItem>;
|
||||
|
||||
public function new() {
|
||||
@@ -51,13 +50,11 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
reset();
|
||||
}
|
||||
|
||||
private function set_game(value:IGame):IGame {
|
||||
game = value;
|
||||
game.connect(this);
|
||||
return game;
|
||||
private function set_config(value:Config):Config {
|
||||
return config = value;
|
||||
}
|
||||
|
||||
private function drawBackground(config:Config):Void {
|
||||
private function drawBackground():Void {
|
||||
var width = config.map.cellWidth * config.map.gridWidth;
|
||||
var height = config.map.cellHeight * config.map.gridHeight;
|
||||
var g:Graphics = backgroundLayer.graphics;
|
||||
@@ -72,9 +69,6 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
for (item in items) {
|
||||
item.update();
|
||||
}
|
||||
if (background == null) {
|
||||
drawBackground(game.config);
|
||||
}
|
||||
}
|
||||
|
||||
private function onEnterFrame(event:Event):Void {
|
||||
@@ -91,10 +85,6 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
item.dispose();
|
||||
}
|
||||
items = new Map();
|
||||
if (background != null) {
|
||||
backgroundLayer.removeChild(background);
|
||||
background = null;
|
||||
}
|
||||
clearLayer(entryLayer);
|
||||
clearLayer(groundLayer);
|
||||
clearLayer(upLayer);
|
||||
@@ -108,9 +98,10 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
case COMPLETE(_, _):
|
||||
content.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
|
||||
case SPAWN(BRICK(bricks)):
|
||||
drawBackground();
|
||||
for (brick in bricks) {
|
||||
var item:IRenderItem = new BrickRenderItem(brick.rect, brick.type);
|
||||
var config = game.config.getBrick(brick.type);
|
||||
var config = config.getBrick(brick.type);
|
||||
items[brick.id] = item;
|
||||
if (config.layer > 2) {
|
||||
upLayer.addChild(item.view);
|
||||
@@ -119,15 +110,15 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
}
|
||||
}
|
||||
case SPAWN(EAGLE(id, rect, teamId)):
|
||||
var item = new EagleRenderItem(rect);
|
||||
var item = new EagleRenderItem(rect, config.getColor(new PlayerId(teamId, -1)));
|
||||
items.set(id, item);
|
||||
entryLayer.addChild(item.view);
|
||||
item.update();
|
||||
case SPAWN(TANK(id, rect, playerId, info)):
|
||||
var item = new TankRenderItem(rect);
|
||||
var config = game.config.getTank(info.type);
|
||||
item.color = game.config.getColor(playerId);
|
||||
item.skin = config.skin;
|
||||
var tankConfig = config.getTank(info.type);
|
||||
item.color = config.getColor(playerId);
|
||||
item.skin = tankConfig.skin;
|
||||
item.hits = info.hits;
|
||||
item.bonus = info.bonus;
|
||||
items.set(id, item);
|
||||
@@ -144,6 +135,11 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
items.set(id, item);
|
||||
upperLayer.addChild(item.view);
|
||||
item.update();
|
||||
case MOVE(EAGLE(id, position)):
|
||||
if (items.exists(id)) {
|
||||
var item = items[id];
|
||||
item.move(position);
|
||||
}
|
||||
case MOVE(BULLET(id, position)):
|
||||
if (items.exists(id)) {
|
||||
var item = items[id];
|
||||
@@ -163,7 +159,7 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
case CHANGE(TANK(id, type, hits, bonus)):
|
||||
if (items.exists(id)) {
|
||||
var item:TankRenderItem = cast items[id];
|
||||
item.skin = game.config.getTank(type).skin;
|
||||
item.skin = config.getTank(type).skin;
|
||||
item.hits = hits;
|
||||
item.bonus = bonus;
|
||||
}
|
||||
@@ -177,6 +173,11 @@ class Render extends SpriteView implements IRender implements GameListener {
|
||||
var item:EagleRenderItem = cast items[id];
|
||||
item.protect = state;
|
||||
}
|
||||
case CHANGE(BRICK(id, type)):
|
||||
if (items.exists(id)) {
|
||||
var item:BrickRenderItem = cast items[id];
|
||||
item.type = type;
|
||||
}
|
||||
case DESTROY(TANK(id, shot)):
|
||||
if (items.exists(id)) {
|
||||
var item = items[id];
|
||||
|
||||
@@ -26,14 +26,13 @@ class BrickRenderItem extends RenderItem {
|
||||
public function new(rect:Rectangle, type:BrickType) {
|
||||
super(rect);
|
||||
this.shape = new Shape();
|
||||
this.type = type;
|
||||
cells = [
|
||||
new Point(0, 0),
|
||||
new Point(0, 1),
|
||||
new Point(1, 0),
|
||||
new Point(1, 1),
|
||||
];
|
||||
redraw();
|
||||
this.type = type;
|
||||
move(rect.position);
|
||||
}
|
||||
|
||||
@@ -53,6 +52,7 @@ class BrickRenderItem extends RenderItem {
|
||||
if (type != value) {
|
||||
type = value;
|
||||
image = Assets.getBitmapData('resources/image/map/${type}.png');
|
||||
redraw();
|
||||
}
|
||||
return type;
|
||||
}
|
||||
@@ -69,6 +69,7 @@ class BrickRenderItem extends RenderItem {
|
||||
|
||||
public function redraw():Void {
|
||||
shape.graphics.clear();
|
||||
if (type == "none") return;
|
||||
switch state {
|
||||
case UNBROKEN:
|
||||
shape.graphics.beginBitmapFill(image);
|
||||
|
||||
@@ -2,18 +2,22 @@ package ru.m.tankz.render.item;
|
||||
|
||||
import flash.display.DisplayObject;
|
||||
import flash.display.Sprite;
|
||||
import haxework.color.Color;
|
||||
import haxework.view.utils.BitmapUtil;
|
||||
import ru.m.animate.Animate;
|
||||
import ru.m.geom.Rectangle;
|
||||
|
||||
class EagleRenderItem extends BitmapRenderItem {
|
||||
public var color(default, default):Color;
|
||||
public var death(default, set):Bool = true;
|
||||
public var protect(default, set):Bool;
|
||||
|
||||
private var container:Sprite;
|
||||
private var protectView:Animate;
|
||||
|
||||
public function new(rect:Rectangle) {
|
||||
public function new(rect:Rectangle, color:Color) {
|
||||
super(rect);
|
||||
this.color = color;
|
||||
container = new Sprite();
|
||||
container.addChild(bitmap);
|
||||
protectView = AnimateBundle.tankProtect();
|
||||
@@ -45,6 +49,9 @@ class EagleRenderItem extends BitmapRenderItem {
|
||||
death = value;
|
||||
var suffix = death ? '-death' : '';
|
||||
image = 'resources/image/eagle/eagle${suffix}.png';
|
||||
if (!color.zero) {
|
||||
bitmap.bitmapData = bitmapData = BitmapUtil.colorize(bitmapData, color);
|
||||
}
|
||||
}
|
||||
return death;
|
||||
}
|
||||
|
||||
@@ -50,7 +50,8 @@ import ru.m.tankz.view.game.GameView;
|
||||
private function start(state:GameState):Void {
|
||||
gameView.type = state.type;
|
||||
game = new Game(state);
|
||||
gameView.render.game = game;
|
||||
gameView.render.config = game.config;
|
||||
game.connect(gameView.render);
|
||||
game.connect(soundManager);
|
||||
game.connect(this);
|
||||
if (gameView.panel != null) {
|
||||
@@ -67,7 +68,8 @@ import ru.m.tankz.view.game.GameView;
|
||||
private function play(record:GameRecord):Void {
|
||||
gameView.type = record.info.type;
|
||||
game = new Game(record.state);
|
||||
gameView.render.game = game;
|
||||
gameView.render.config = game.config;
|
||||
game.connect(gameView.render);
|
||||
game.connect(soundManager);
|
||||
//game.connect(this);
|
||||
if (gameView.panel != null) {
|
||||
|
||||
Reference in New Issue
Block a user