[common] update GameEvent

This commit is contained in:
2019-05-14 12:24:29 +03:00
parent 608ed3acc4
commit aa10825b12
14 changed files with 194 additions and 151 deletions

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.render;
import ru.m.geom.Rectangle;
import flash.display.DisplayObjectContainer;
import flash.display.Graphics;
import flash.display.Sprite;
@@ -24,7 +25,7 @@ class Render extends SpriteView implements IRender {
private var upperLayer:Sprite;
private var background:Sprite;
private var items:Map<String, RenderItem<Dynamic, Dynamic>>;
private var items:Map<Int, RenderItem<Dynamic, Dynamic>>;
public function new() {
super();
@@ -53,7 +54,7 @@ class Render extends SpriteView implements IRender {
public function draw(game:IEngine):Void {
for (brick in game.map.bricks) if (brick.config.index > 0) {
if (!items.exists(brick.key)) {
if (!items.exists(brick.id)) {
var item:RenderItem<Dynamic, Dynamic> = switch(brick.config.type) {
case 'ace' | 'bush': new BrickItem(brick);
case 'water': new BrickAnimateItem(brick);
@@ -61,7 +62,7 @@ class Render extends SpriteView implements IRender {
case x: null;
};
if (item != null) {
items[brick.key] = item;
items[brick.id] = item;
if (brick.config.layer > 2) {
upLayer.addChild(item.view);
} else {
@@ -101,23 +102,23 @@ class Render extends SpriteView implements IRender {
switch entity {
case EAGLE(eagle):
var item = new EagleItem(eagle);
items.set(eagle.key, item);
items.set(eagle.id, item);
entryLayer.addChild(item.view);
item.update();
case TANK(tank):
var item = new TankItem(tank);
items.set(tank.key, item);
items.set(tank.id, item);
entryLayer.addChild(item.view);
item.update();
playAnimate(tank.rect.center, AnimateBundle.tankSpawn());
case BULLET(bullet):
var item = new BulletItem(bullet);
items.set(bullet.key, item);
items.set(bullet.id, item);
entryLayer.addChild(item.view);
item.update();
case BONUS(bonus):
var item = new BonusItem(bonus);
items.set(bonus.key, item);
items.set(bonus.id, item);
upperLayer.addChild(item.view);
item.update();
case _:
@@ -135,34 +136,44 @@ class Render extends SpriteView implements IRender {
public function onGameEvent(event:GameEvent):Void {
switch event {
case DESTROY(TANK(tank, who, wherewith, score)):
if (items.exists(tank.key)) {
entryLayer.removeChild(items.get(tank.key).view);
items.remove(tank.key);
playAnimate(tank.rect.center, AnimateBundle.tankBoom());
if (score != 0) {
showScore(tank.rect.center, score);
case DESTROY(TANK(id, shot)):
if (items.exists(id)) {
var item = items[id];
entryLayer.removeChild(item.view);
var rect:Rectangle = item.value.rect;
playAnimate(rect.center, AnimateBundle.tankBoom());
if (shot.score != 0) {
showScore(rect.center, shot.score);
}
items.remove(id);
}
case DESTROY(BULLET(bullet)):
if (items.exists(bullet.key)) {
entryLayer.removeChild(items.get(bullet.key).view);
items.remove(bullet.key);
var point = bullet.rect.center.add(new Point(bullet.rect.width * bullet.rect.direction.x, bullet.rect.height * bullet.rect.direction.y));
case DESTROY(BULLET(id)):
if (items.exists(id)) {
var item = items[id];
entryLayer.removeChild(item.view);
var rect:Rectangle = item.value.rect;
var point = rect.center.add(new Point(rect.width * rect.direction.x, rect.height * rect.direction.y));
playAnimate(point, AnimateBundle.bulletBoom());
items.remove(id);
}
case DESTROY(BONUS(bonus, who, score)):
if (items.exists(bonus.key)) {
upperLayer.removeChild(items.get(bonus.key).view);
items.remove(bonus.key);
if (score != 0) {
showScore(bonus.rect.center, score);
case DESTROY(BONUS(id, shot)):
if (items.exists(id)) {
var item = items[id];
upperLayer.removeChild(item.view);
var rect:Rectangle = item.value.rect;
if (shot.score != 0) {
showScore(rect.center, shot.score);
}
items.remove(id);
}
case DESTROY(EAGLE(eagle, who, wherewith, score)):
playAnimate(eagle.rect.center, AnimateBundle.tankBoom());
if (score != 0) {
showScore(eagle.rect.center, score);
case DESTROY(EAGLE(id, shot)):
if (items.exists(id)) {
var item = items[id];
var rect:Rectangle = item.value.rect;
playAnimate(rect.center, AnimateBundle.tankBoom());
if (shot.score != 0) {
showScore(rect.center, shot.score);
}
}
case _:
}

View File

@@ -76,26 +76,28 @@ class SoundManager implements GameListener {
public function onGameEvent(event:GameEvent):Void {
switch event {
case START(state):
case START(_):
play('start');
case SPAWN(_, BULLET(_)):
if (false /* ToDo: human tank */) {
case SPAWN(BULLET(_)):
if (false /*ToDo: human tank*/) {
play('shot');
}
case SPAWN(_, BONUS(_, _)):
case SPAWN(BONUS(_, _)):
play('bonus_add');
case HIT(TANK(tank, who, wherewith)):
case HIT(TANK(_, _)):
play('bullet_hit');
case DESTROY(TANK(tank, who, wherewith, score)):
if (true /* ToDo: human tank */) {
case DESTROY(TANK(_, _)):
if (true /*ToDo: human tank*/) {
play('boom_player');
} else {
play('boom_bot');
}
case DESTROY(EAGLE(eagle, who, wherewith, score)):
case DESTROY(EAGLE(_, _)):
play('boom_player');
case DESTROY(BONUS(bonus, who, score)):
if (bonus.type == 'life') {
case DESTROY(BONUS(_, _)):
// ToDo: bonus type
play('bonus_get');
if (false /*ToDo: bonus.type == 'life'*/) {
play('live');
} else {
play('bonus_get');

View File

@@ -13,9 +13,6 @@ import ru.m.tankz.game.record.GameRecord;
}
public function save(record:GameRecord):Void {
trace(record.id);
trace(record.date);
trace(record.events);
write(record.id, record);
}

View File

@@ -98,7 +98,7 @@ import ru.m.tankz.view.game.GameView;
public function onGameEvent(event:GameEvent):Void {
switch event {
case GameEvent.COMPLETE(state, winner):
case GameEvent.COMPLETE(state, _):
// ToDo:
recordStorage.save(recorder.record);
result = state;