diff --git a/src/client/haxe/ru/m/tankz/render/Render.hx b/src/client/haxe/ru/m/tankz/render/Render.hx index 8736861..ae67812 100755 --- a/src/client/haxe/ru/m/tankz/render/Render.hx +++ b/src/client/haxe/ru/m/tankz/render/Render.hx @@ -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; diff --git a/src/client/haxe/ru/m/tankz/sound/SoundManager.hx b/src/client/haxe/ru/m/tankz/sound/SoundManager.hx index 59fffb7..f43dd57 100644 --- a/src/client/haxe/ru/m/tankz/sound/SoundManager.hx +++ b/src/client/haxe/ru/m/tankz/sound/SoundManager.hx @@ -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 diff --git a/src/client/haxe/ru/m/tankz/view/common/GameFrame.hx b/src/client/haxe/ru/m/tankz/view/common/GameFrame.hx index 161ced2..f318d65 100644 --- a/src/client/haxe/ru/m/tankz/view/common/GameFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/common/GameFrame.hx @@ -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"; diff --git a/src/client/haxe/ru/m/tankz/view/common/IGamePanel.hx b/src/client/haxe/ru/m/tankz/view/common/IGamePanel.hx index 72d9dfd..4d71e53 100644 --- a/src/client/haxe/ru/m/tankz/view/common/IGamePanel.hx +++ b/src/client/haxe/ru/m/tankz/view/common/IGamePanel.hx @@ -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 extends GameListener { -interface IGamePanel extends IView { - public function onGameStart(state:GameState):Void; - public function onGameChange(state:GameState):Void; - public function onGameComplete(state:GameState):Void; } diff --git a/src/common/haxe/ru/m/tankz/engine/Engine.hx b/src/common/haxe/ru/m/tankz/engine/Engine.hx index a187c23..e7d4ac9 100755 --- a/src/common/haxe/ru/m/tankz/engine/Engine.hx +++ b/src/common/haxe/ru/m/tankz/engine/Engine.hx @@ -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; - public var collisionSignal(default, null):Signal2; - public var destroySignal(default, null):Signal2; - - public function new() { - spawnSignal = new Signal1(); - collisionSignal = new Signal2(); - destroySignal = new Signal2(); - } - - 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(); diff --git a/src/common/haxe/ru/m/tankz/game/Game.hx b/src/common/haxe/ru/m/tankz/game/Game.hx index 5f3ad93..0670351 100644 --- a/src/common/haxe/ru/m/tankz/game/Game.hx +++ b/src/common/haxe/ru/m/tankz/game/Game.hx @@ -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 = new Signal(); - public var onGameChange(default, null):Signal = new Signal(); - public var onGameComplete(default, null):Signal = 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 {