[common] Render implement EngineListener
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package ru.m.tankz.render;
|
||||
|
||||
import ru.m.tankz.core.EntityType;
|
||||
import flash.display.DisplayObject;
|
||||
import Type.ValueType;
|
||||
import ru.m.tankz.render.RenderItem;
|
||||
@@ -11,7 +12,7 @@ import flash.display.Graphics;
|
||||
import haxework.gui.SpriteView;
|
||||
|
||||
|
||||
class Render extends SpriteView {
|
||||
class Render extends SpriteView implements EngineListener {
|
||||
|
||||
private var backgroundLayer:Sprite;
|
||||
private var groundLayer:Sprite;
|
||||
@@ -59,23 +60,6 @@ class Render extends SpriteView {
|
||||
}
|
||||
}
|
||||
}
|
||||
for (entity in game.entities) {
|
||||
if (!items.exists(entity.key)) {
|
||||
items[entity.key] = switch (Type.typeof(entity)) {
|
||||
case ValueType.TClass(Tank): cast new TankItem(cast entity);
|
||||
case ValueType.TClass(Bullet): cast new BulletItem(cast entity);
|
||||
case x: null;
|
||||
}
|
||||
entryLayer.addChild(items[entity.key].view);
|
||||
}
|
||||
}
|
||||
/*for (key in game.removedEntities) {
|
||||
if (items.exists(key)) {
|
||||
var view:DisplayObject = items[key].view;
|
||||
view.parent.removeChild(view);
|
||||
items.remove(key);
|
||||
}
|
||||
}*/
|
||||
for (item in items) {
|
||||
item.update();
|
||||
}
|
||||
@@ -91,4 +75,41 @@ class Render extends SpriteView {
|
||||
background = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function onSpawn(entity:EntityType):Void {
|
||||
switch(entity) {
|
||||
case EntityType.TANK(tank):
|
||||
var item = new TankItem(tank);
|
||||
items.set(tank.key, item);
|
||||
entryLayer.addChild(item.view);
|
||||
item.update();
|
||||
case EntityType.BULLET(bullet):
|
||||
var item = new BulletItem(bullet);
|
||||
items.set(bullet.key, item);
|
||||
entryLayer.addChild(item.view);
|
||||
item.update();
|
||||
case _:
|
||||
}
|
||||
}
|
||||
|
||||
public function onCollision(entity:EntityType, with:EntityType):Void {
|
||||
|
||||
}
|
||||
|
||||
public function onDestroy(entity:EntityType):Void {
|
||||
switch(entity) {
|
||||
case EntityType.TANK(tank):
|
||||
if (items.exists(tank.key)) {
|
||||
entryLayer.removeChild(items.get(tank.key).view);
|
||||
items.remove(tank.key);
|
||||
}
|
||||
case EntityType.BULLET(bullet):
|
||||
if (items.exists(bullet.key)) {
|
||||
entryLayer.removeChild(items.get(bullet.key).view);
|
||||
items.remove(bullet.key);
|
||||
}
|
||||
case _:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.m.tankz.view.frames;
|
||||
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.control.PlayerControl;
|
||||
import flash.events.Event;
|
||||
import haxe.Timer;
|
||||
@@ -28,10 +29,16 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
|
||||
}
|
||||
|
||||
public function onShow():Void {
|
||||
game = new ClassicGame(ConfigBundle.get(ClassicGame.TYPE, 0));
|
||||
var config:Config = Provider.get(Config);
|
||||
game = switch (config.type) {
|
||||
case ClassicGame.TYPE: new ClassicGame(config);
|
||||
case x: throw 'Unsupported game type "${x}"';
|
||||
}
|
||||
game.engine.listeners.push(render);
|
||||
game.start();
|
||||
game.setControl({team:'human', index:0}, PlayerControl.forPlayer(0));
|
||||
game.setControl({team:'human', index:1}, PlayerControl.forPlayer(1));
|
||||
for (index in 0...game.config.getTeam('human').size) {
|
||||
game.setControl({team:'human', index:index}, PlayerControl.forPlayer(index));
|
||||
}
|
||||
content.addEventListener(Event.ENTER_FRAME, redraw);
|
||||
Provider.get(IConnection).packetHandler.addListener(this);
|
||||
render.draw(game.engine);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package ru.m.tankz.view.frames;
|
||||
|
||||
import ru.m.tankz.proto.core.GameType;
|
||||
import ru.m.tankz.proto.core.Player;
|
||||
import ru.m.tankz.proto.core.Game;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.game.ClassicGame;
|
||||
import ru.m.tankz.config.ConfigBundle;
|
||||
import haxework.gui.frame.IFrameSwitcher;
|
||||
import haxework.provider.Provider;
|
||||
import haxework.gui.ButtonView;
|
||||
@@ -21,23 +21,18 @@ class StartFrame extends VGroupView implements ViewBuilder {
|
||||
|
||||
public function onPress(view:ButtonView):Void {
|
||||
switch (view.id) {
|
||||
case "start_1p":
|
||||
case 'start_1p':
|
||||
startGame(1);
|
||||
case "start_2p":
|
||||
case 'start_2p':
|
||||
startGame(2);
|
||||
}
|
||||
}
|
||||
|
||||
private function startGame(playersCount:Int):Void {
|
||||
var game = new Game();
|
||||
game.type = GameType.CLASSIC;
|
||||
for (i in 0...playersCount) {
|
||||
var player = new Player();
|
||||
player.id = i;
|
||||
game.players.push(player);
|
||||
}
|
||||
game.id = 1;
|
||||
Provider.set(Game, game);
|
||||
private function startGame(players:Int):Void {
|
||||
var config = ConfigBundle.get(ClassicGame.TYPE, 0);
|
||||
config.getTeam('human').size = players;
|
||||
config.getTeam('bot').size = 2 + 2 * players;
|
||||
Provider.set(Config, config);
|
||||
Provider.get(IFrameSwitcher).change(GameFrame.ID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ teams:
|
||||
direction: top
|
||||
- id: bot
|
||||
size: 6
|
||||
spawnInterval: 1000
|
||||
spawnInterval: 3000
|
||||
points:
|
||||
- type: tank
|
||||
index: -1
|
||||
Reference in New Issue
Block a user