[common] add EntityBuilder

This commit is contained in:
2019-05-06 16:21:45 +03:00
parent d11d0ac53f
commit d6b572aead
17 changed files with 205 additions and 66 deletions

View File

@@ -18,6 +18,7 @@ import ru.m.tankz.proto.pack.Response;
import ru.m.tankz.sound.SoundManager;
import ru.m.tankz.storage.GameStorage;
import ru.m.tankz.storage.MultiplayerStorage;
import ru.m.tankz.storage.RecordStorage;
import ru.m.tankz.storage.SettingsStorage;
#if flash
import flash.Lib;
@@ -33,6 +34,7 @@ class Init {
@:provide static var settingsStorage:SettingsStorage;
@:provide static var multiplayerStorage:MultiplayerStorage;
@:provide static var gameStorage:GameStorage;
@:provide static var recordStorage:RecordStorage;
@:provide static var soundManager:SoundManager;
@:provide static var networkManager:NetworkManager;
@:provide static var controlFactory:IControlFactory;
@@ -62,10 +64,15 @@ class Init {
settingsStorage = new SettingsStorage();
multiplayerStorage = new MultiplayerStorage();
gameStorage = new GameStorage();
recordStorage = new RecordStorage();
soundManager = new SoundManager();
controlFactory = new ClientControlFactory();
popupManager = new PopupManager();
for (record in recordStorage) {
L.w("RECORD", '${record.id}. ${record.date}');
}
popupManager.showAnimateFactory = function(v) return new UnFadeAnimate(v, 100);
popupManager.closeAnimateFactory = function(v) return new FadeAnimate(v, 100);

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.render;
import ru.m.tankz.core.EntityType;
import flash.display.DisplayObjectContainer;
import flash.display.Graphics;
import flash.display.Sprite;
@@ -15,7 +16,7 @@ import ru.m.tankz.game.GameEvent;
import ru.m.tankz.game.IGame;
import ru.m.tankz.render.RenderItem;
class Render extends SpriteView implements GameListener {
class Render extends SpriteView implements GameListener implements EngineListener {
private var backgroundLayer:Sprite;
private var groundLayer:Sprite;
@@ -97,6 +98,23 @@ class Render extends SpriteView implements GameListener {
clearLayer(upperLayer);
}
public function onSpawn(entity:EntityType):Void {
switch entity {
case EAGLE(eagle):
var item = new EagleItem(eagle);
items.set(eagle.key, item);
entryLayer.addChild(item.view);
item.update();
case _:
}
}
public function onCollision(entity:EntityType, with:EntityType):Void {
}
public function onMove(entity:EntityType):Void {
}
public function onGameEvent(event:GameEvent):Void {
switch event {
case SPAWN(TANK(tank)):
@@ -110,11 +128,11 @@ class Render extends SpriteView implements GameListener {
items.set(bullet.key, item);
entryLayer.addChild(item.view);
item.update();
case SPAWN(EAGLE(eagle)):
/*case SPAWN(EAGLE(eagle)):
var item = new EagleItem(eagle);
items.set(eagle.key, item);
entryLayer.addChild(item.view);
item.update();
item.update();*/
case SPAWN(BONUS(bonus)):
var item = new BonusItem(bonus);
items.set(bonus.key, item);

View File

@@ -0,0 +1,28 @@
package ru.m.tankz.storage;
import haxe.DynamicAccess;
import haxework.storage.SharedObjectStorage;
import ru.m.tankz.game.record.GameRecord;
@:yield class RecordStorage extends SharedObjectStorage {
private static inline var VERSION = 1;
public function new() {
super('record_${VERSION}');
}
public function save(record:GameRecord):Void {
trace(record.id);
trace(record.date);
trace(record.events);
write(record.id, record);
}
public function iterator():Iterator<GameRecord> {
var data:DynamicAccess<String> = so.data;
for (id in data.keys()) {
@yield return read(id);
}
}
}

View File

@@ -14,6 +14,7 @@ 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.storage.RecordStorage;
import ru.m.tankz.view.common.IGamePanel;
class GameFrame extends GroupView implements GameListener {
@@ -28,7 +29,8 @@ class GameFrame extends GroupView implements GameListener {
@:provide var state:GameState;
@:provide("result") var result:GameState;
@:provide var switcher:FrameSwitcher;
@:provide var storage:GameStorage;
@:provide var gameStorage:GameStorage;
@:provide var recordStorage:RecordStorage;
private var game:IGame;
private var runner:GameRunner;
@@ -49,6 +51,7 @@ class GameFrame extends GroupView implements GameListener {
private function start(state:GameState):Void {
game = new Game(state.type);
game.connect(render);
game.engine.connect(render);
game.connect(soundManager);
game.connect(this);
if (panel != null) {
@@ -79,14 +82,15 @@ class GameFrame extends GroupView implements GameListener {
public function onGameEvent(event:GameEvent):Void {
switch event {
case GameEvent.COMPLETE(state, winner):
L.w("RECORD", Std.string(recorder.data));
// ToDo:
//recordStorage.save(recorder.record);
result = state;
this.state = switch runner.next() {
case Some(s):
// ToDo:
var progress = storage.get(game.type);
var progress = gameStorage.get(game.type);
progress.completeLevel(result.levelId, result.presetId);
storage.set(progress);
gameStorage.set(progress);
s;
case None: null;
}