[common] add engine interface

This commit is contained in:
2019-05-05 21:18:36 +03:00
parent ab02460b11
commit d11d0ac53f
9 changed files with 64 additions and 26 deletions

View File

@@ -8,14 +8,11 @@ import ru.m.tankz.core.Entity;
import ru.m.tankz.core.EntityType;
import ru.m.tankz.core.MobileEntity;
import ru.m.tankz.core.Tank;
import ru.m.tankz.engine.IEngine;
import ru.m.tankz.map.Grid;
import ru.m.tankz.map.LevelMap;
interface EngineListener {
public function onCollision(entity:EntityType, with:EntityType):Void;
}
@:yield @:dispatcher(EngineListener) class Engine {
@:yield @:dispatcher(EngineListener) class Engine implements IEngine {
public var config(default, default):Config;
public var map(default, null):LevelMap;
@@ -134,6 +131,7 @@ interface EngineListener {
if (!isStop || Std.is(entity, Bullet)) {
entity.rect.x += entity.mx * (d / 30);
entity.rect.y += entity.my * (d / 30);
moveSignal.emit(entityType);
}
}
}

View File

@@ -0,0 +1,36 @@
package ru.m.tankz.engine;
import haxework.signal.Signal;
import ru.m.tankz.config.Config;
import ru.m.tankz.core.Entity;
import ru.m.tankz.core.EntityType;
import ru.m.tankz.core.Tank;
import ru.m.tankz.map.LevelMap;
interface IEngine {
public var entities(default, null):Map<Int, Entity>;
public var config(default, default):Config;
public var map(default, null):LevelMap;
public var collisionSignal(default, null):Signal2<EntityType, EntityType>;
public var moveSignal(default, null):Signal1<EntityType>;
public function spawn(entity:Entity):Void;
public function destroy(entity:Entity):Void;
public function update():Void;
public function iterTanks(filter:Tank->Bool):Iterator<Tank>;
public function connect(listener:EngineListener):Void;
public function disconnect(listener:EngineListener):Void;
public function dispose():Void;
}
interface EngineListener {
public function onCollision(entity:EntityType, with:EntityType):Void;
public function onMove(entity:EntityType):Void;
}

View File

@@ -4,13 +4,11 @@ import ru.m.tankz.bundle.IConfigBundle;
import ru.m.tankz.config.Config;
import ru.m.tankz.core.EntityType;
import ru.m.tankz.engine.Engine;
import ru.m.tankz.engine.IEngine;
import ru.m.tankz.game.GameState;
import ru.m.tankz.game.IGame;
import ru.m.tankz.Type;
interface GameListener {
public function onGameEvent(event:GameEvent):Void;
}
@:dispatcher(GameListener) class Game implements IGame implements GameListener {
private static var TAG(default, never):String = "Game";
@@ -18,7 +16,7 @@ interface GameListener {
public var type(default, null):GameType;
public var teams(default, null):Map<TeamId, Team>;
public var config(default, null):Config;
public var engine(default, null):Engine;
public var engine(default, null):IEngine;
public var winner(default, null):Null<TeamId>;
public var state(default, null):GameState;

View File

@@ -13,8 +13,8 @@ import ru.m.tankz.core.Eagle;
import ru.m.tankz.core.Entity;
import ru.m.tankz.core.EntityType;
import ru.m.tankz.core.Tank;
import ru.m.tankz.engine.Engine;
import ru.m.tankz.game.Game;
import ru.m.tankz.engine.IEngine;
import ru.m.tankz.game.IGame;
import ru.m.tankz.game.Spawner;
import ru.m.tankz.Type;
@@ -232,6 +232,10 @@ class GameRunner implements EngineListener implements GameListener {
}
}
public function onMove(entity:EntityType):Void {
}
private function spawnBonus(?type:BonusType):Void {
var bonusConfig:BonusConfig = type != null ? game.config.getBonus(type) : game.config.bonuses[Math.floor(Math.random() * game.config.bonuses.length)];
var bonus = new Bonus(bonusConfig);

View File

@@ -2,17 +2,17 @@ package ru.m.tankz.game;
import haxework.signal.Signal;
import ru.m.tankz.config.Config;
import ru.m.tankz.engine.Engine;
import ru.m.tankz.game.Game;
import ru.m.tankz.engine.IEngine;
import ru.m.tankz.Type;
interface IGame {
public var type(default, null):GameType;
public var teams(default, null):Map<TeamId, Team>;
public var config(default, null):Config;
public var engine(default, null):Engine;
public var engine(default, null):IEngine;
public var winner(default, null):Null<TeamId>;
public var state(default, null):GameState;
public var gameEventSignal(default, null):Signal<GameEvent>;
public function connect(listener:GameListener):Void;
@@ -25,3 +25,7 @@ interface IGame {
public function getPlayer(playerId:PlayerId):Player;
}
interface GameListener {
public function onGameEvent(event:GameEvent):Void;
}

View File

@@ -2,7 +2,7 @@ package ru.m.tankz.game.record;
import flash.events.Event;
import flash.Lib;
import ru.m.tankz.game.Game.GameListener;
import ru.m.tankz.game.IGame;
class GameRecorder implements GameListener {