use dispatcher macro
This commit is contained in:
@@ -15,7 +15,7 @@ import ru.m.tankz.engine.Engine;
|
||||
import ru.m.tankz.render.RenderItem;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
class Render extends SpriteView {
|
||||
class Render extends SpriteView implements EngineListener {
|
||||
|
||||
private var backgroundLayer:Sprite;
|
||||
private var groundLayer:Sprite;
|
||||
|
||||
@@ -6,9 +6,10 @@ import flash.media.SoundChannel;
|
||||
import flash.media.SoundTransform;
|
||||
import openfl.utils.Assets;
|
||||
import ru.m.tankz.core.EntityType;
|
||||
import ru.m.tankz.engine.Engine;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
class SoundManager {
|
||||
class SoundManager implements EngineListener {
|
||||
private static var TAG(default, never):String = 'SoundManager';
|
||||
|
||||
#if flash
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package ru.m.tankz.view.common;
|
||||
|
||||
import ru.m.tankz.storage.GameStorage;
|
||||
import flash.events.Event;
|
||||
import haxe.ds.Option;
|
||||
import haxe.Timer;
|
||||
@@ -11,9 +10,10 @@ import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.render.Render;
|
||||
import ru.m.tankz.sound.SoundManager;
|
||||
import ru.m.tankz.storage.GameStorage;
|
||||
import ru.m.tankz.view.common.IGamePanel;
|
||||
|
||||
class GameFrame extends GroupView {
|
||||
class GameFrame extends GroupView implements GameListener {
|
||||
|
||||
private static inline var TAG = "GameFrame";
|
||||
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package ru.m.tankz.view.common;
|
||||
|
||||
import haxework.view.IView;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.game.Game.GameListener;
|
||||
|
||||
interface IGamePanel extends IView<Dynamic> extends GameListener {
|
||||
|
||||
interface IGamePanel extends IView<Dynamic> {
|
||||
public function onGameStart(state:GameState):Void;
|
||||
public function onGameChange(state:GameState):Void;
|
||||
public function onGameComplete(state:GameState):Void;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package ru.m.tankz.engine;
|
||||
|
||||
import haxework.signal.Signal;
|
||||
import ru.m.geom.Line;
|
||||
import ru.m.geom.Point;
|
||||
import ru.m.tankz.config.Config;
|
||||
@@ -14,7 +13,7 @@ import ru.m.tankz.map.Grid;
|
||||
import ru.m.tankz.map.LevelMap;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
typedef EngineListener = {
|
||||
interface EngineListener {
|
||||
public function onSpawn(entity:EntityType):Void;
|
||||
public function onCollision(entity:EntityType, with:EntityType):Void;
|
||||
public function onDestroy(entity:EntityType, ?playerId:PlayerId):Void;
|
||||
@@ -54,33 +53,7 @@ class CollisionProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class EngineDispatcher {
|
||||
public var spawnSignal(default, null):Signal1<EntityType>;
|
||||
public var collisionSignal(default, null):Signal2<EntityType, EntityType>;
|
||||
public var destroySignal(default, null):Signal2<EntityType, PlayerId>;
|
||||
|
||||
public function new() {
|
||||
spawnSignal = new Signal1<EntityType>();
|
||||
collisionSignal = new Signal2<EntityType, EntityType>();
|
||||
destroySignal = new Signal2<EntityType, PlayerId>();
|
||||
}
|
||||
|
||||
public function connect(listener:EngineListener) {
|
||||
spawnSignal.connect(listener.onSpawn);
|
||||
collisionSignal.connect(listener.onCollision);
|
||||
destroySignal.connect(listener.onDestroy);
|
||||
}
|
||||
|
||||
public function disconnect(listener:EngineListener) {
|
||||
spawnSignal.disconnect(listener.onSpawn);
|
||||
collisionSignal.disconnect(listener.onCollision);
|
||||
destroySignal.disconnect(listener.onDestroy);
|
||||
}
|
||||
}
|
||||
|
||||
@:yield
|
||||
class Engine extends EngineDispatcher implements ControlHandler {
|
||||
@:yield @:dispatcher(EngineListener) class Engine implements ControlHandler {
|
||||
|
||||
public var config(default, default):Config;
|
||||
public var map(default, null):LevelMap;
|
||||
@@ -92,7 +65,6 @@ class Engine extends EngineDispatcher implements ControlHandler {
|
||||
private var time:Float;
|
||||
|
||||
public function new(config:Config) {
|
||||
super();
|
||||
this.config = config;
|
||||
map = new LevelMap(config.map);
|
||||
entities = new Map<Int, Entity>();
|
||||
|
||||
@@ -2,7 +2,6 @@ package ru.m.tankz.game;
|
||||
|
||||
import haxe.ds.Option;
|
||||
import haxe.Timer;
|
||||
import haxework.signal.Signal;
|
||||
import ru.m.geom.Point;
|
||||
import ru.m.tankz.bundle.IConfigBundle;
|
||||
import ru.m.tankz.config.Config;
|
||||
@@ -19,35 +18,13 @@ import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.game.Spawner;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
typedef GameListener = {
|
||||
interface GameListener {
|
||||
public function onGameStart(state:GameState):Void;
|
||||
public function onGameChange(state:GameState):Void;
|
||||
public function onGameComplete(state:GameState):Void;
|
||||
}
|
||||
|
||||
class GameDispatcher {
|
||||
|
||||
public var onGameStart(default, null):Signal<GameState> = new Signal();
|
||||
public var onGameChange(default, null):Signal<GameState> = new Signal();
|
||||
public var onGameComplete(default, null):Signal<GameState> = new Signal();
|
||||
|
||||
public function new() {
|
||||
}
|
||||
|
||||
public function connect(listener:GameListener) {
|
||||
onGameStart.connect(listener.onGameStart);
|
||||
onGameChange.connect(listener.onGameChange);
|
||||
onGameComplete.connect(listener.onGameComplete);
|
||||
}
|
||||
|
||||
public function disconnect(listener:GameListener) {
|
||||
onGameStart.disconnect(listener.onGameStart);
|
||||
onGameChange.disconnect(listener.onGameChange);
|
||||
onGameComplete.disconnect(listener.onGameComplete);
|
||||
}
|
||||
}
|
||||
|
||||
class Game extends GameDispatcher {
|
||||
@:dispatcher(GameListener) class Game implements EngineListener {
|
||||
|
||||
private static var TAG(default, never):String = "Game";
|
||||
|
||||
@@ -65,7 +42,6 @@ class Game extends GameDispatcher {
|
||||
@:provide var controlFactory:IControlFactory;
|
||||
|
||||
public function new(type:GameType) {
|
||||
super();
|
||||
this.type = type;
|
||||
this.config = configBundle.get(type);
|
||||
this.engine = new Engine(config);
|
||||
@@ -142,8 +118,8 @@ class Game extends GameDispatcher {
|
||||
engine.spawn(eagle);
|
||||
}
|
||||
}
|
||||
onGameStart.emit(state);
|
||||
onGameChange.emit(state);
|
||||
gameStartSignal.emit(state);
|
||||
gameChangeSignal.emit(state);
|
||||
}
|
||||
|
||||
private function spawn(task:SpawnTask):Void {
|
||||
@@ -155,7 +131,7 @@ class Game extends GameDispatcher {
|
||||
player.tankId = tank.id;
|
||||
player.state.tank = tank.config.type;
|
||||
engine.spawn(tank);
|
||||
onGameChange.emit(state);
|
||||
gameChangeSignal.emit(state);
|
||||
}
|
||||
|
||||
private function checkComplete() {
|
||||
@@ -187,8 +163,8 @@ class Game extends GameDispatcher {
|
||||
}
|
||||
}
|
||||
Timer.delay(function() {
|
||||
//onGameChange.emit(state);
|
||||
onGameComplete.emit(state);
|
||||
//gameChangeSignal.emit(state);
|
||||
gameCompleteSignal.emit(state);
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
@@ -240,7 +216,7 @@ class Game extends GameDispatcher {
|
||||
getPlayer(bullet.playerId).state.score += eagle.score;
|
||||
}
|
||||
checkComplete();
|
||||
onGameChange.emit(state);
|
||||
gameChangeSignal.emit(state);
|
||||
}
|
||||
case _:
|
||||
}
|
||||
@@ -268,7 +244,7 @@ class Game extends GameDispatcher {
|
||||
getPlayer(playerId).state.frags++;
|
||||
getPlayer(playerId).state.score += tank.config.score * (tank.playerId.team == playerId.team ? 0 : 1);
|
||||
}
|
||||
onGameChange.emit(state);
|
||||
gameChangeSignal.emit(state);
|
||||
case _:
|
||||
}
|
||||
}
|
||||
@@ -295,9 +271,9 @@ class Game extends GameDispatcher {
|
||||
|
||||
public function dispose():Void {
|
||||
engine.dispose();
|
||||
onGameStart.dispose();
|
||||
onGameChange.dispose();
|
||||
onGameComplete.dispose();
|
||||
gameStartSignal.dispose();
|
||||
gameChangeSignal.dispose();
|
||||
gameCompleteSignal.dispose();
|
||||
}
|
||||
|
||||
private function spawnBonus(?type:BonusType):Void {
|
||||
@@ -343,7 +319,7 @@ class Game extends GameDispatcher {
|
||||
if (bonus.config.score > 0) {
|
||||
getPlayer(tank.playerId).state.score += bonus.config.score;
|
||||
}
|
||||
onGameChange.emit(state);
|
||||
gameChangeSignal.emit(state);
|
||||
}
|
||||
|
||||
public function upgradeTank(tank:Tank, level:Int = 1):Void {
|
||||
|
||||
Reference in New Issue
Block a user