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