[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

@@ -10,9 +10,9 @@ import promhx.Promise;
import ru.m.animate.Animate;
import ru.m.animate.OnceAnimate;
import ru.m.geom.Point;
import ru.m.tankz.engine.Engine;
import ru.m.tankz.game.Game.GameListener;
import ru.m.tankz.engine.IEngine;
import ru.m.tankz.game.GameEvent;
import ru.m.tankz.game.IGame;
import ru.m.tankz.render.RenderItem;
class Render extends SpriteView implements GameListener {
@@ -42,18 +42,16 @@ class Render extends SpriteView implements GameListener {
reset();
}
private function drawBackground(game:Engine):Void {
var mapWidth = game.map.gridWidth * game.map.cellWidth;
var mapHeight = game.map.gridHeight * game.map.cellHeight;
private function drawBackground(engine:IEngine):Void {
var g:Graphics = backgroundLayer.graphics;
g.clear();
g.beginFill(0x000000);
g.drawRect(0, 0, mapWidth, mapHeight);
g.drawRect(0, 0, engine.map.width, engine.map.height);
g.endFill();
setContentSize(mapWidth, mapHeight);
setContentSize(engine.map.width, engine.map.height);
}
public function draw(game:Engine):Void {
public function draw(game:IEngine):Void {
for (brick in game.map.bricks) if (brick.config.index > 0) {
if (!items.exists(brick.key)) {
var item:RenderItem<Dynamic, Dynamic> = switch(brick.config.type) {

View File

@@ -5,8 +5,8 @@ import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
import openfl.utils.Assets;
import ru.m.tankz.game.Game;
import ru.m.tankz.game.GameEvent;
import ru.m.tankz.game.IGame;
class SoundManager implements GameListener {
private static var TAG(default, never):String = 'SoundManager';

View File

@@ -1,7 +1,7 @@
package ru.m.tankz.view.common;
import haxework.view.IView;
import ru.m.tankz.game.Game.GameListener;
import ru.m.tankz.game.IGame;
interface IGamePanel extends IView<Dynamic> extends GameListener {

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 {