[common] Render implement EngineListener

This commit is contained in:
2018-01-23 14:00:50 +03:00
parent 981a4b5bab
commit 0e809812e7
9 changed files with 79 additions and 44 deletions

View File

@@ -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 _:
}
}
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -57,7 +57,7 @@ teams:
direction: top
- id: bot
size: 6
spawnInterval: 1000
spawnInterval: 3000
points:
- type: tank
index: -1