[common] added Eagle death flag
@@ -126,11 +126,15 @@ class Render extends SpriteView implements EngineListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function onCollision(entity:EntityType, with:EntityType):Void {
|
public function onCollision(entity:EntityType, with:EntityType):Void {
|
||||||
|
switch [entity, with] {
|
||||||
|
case [EntityType.BULLET(_), EntityType.EAGLE(eagle)]:
|
||||||
|
playTankBoom(eagle.rect.center);
|
||||||
|
case _:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onDestroy(entity:EntityType):Void {
|
public function onDestroy(entity:EntityType):Void {
|
||||||
switch(entity) {
|
switch entity {
|
||||||
case EntityType.TANK(tank):
|
case EntityType.TANK(tank):
|
||||||
if (items.exists(tank.key)) {
|
if (items.exists(tank.key)) {
|
||||||
entryLayer.removeChild(items.get(tank.key).view);
|
entryLayer.removeChild(items.get(tank.key).view);
|
||||||
@@ -143,12 +147,6 @@ class Render extends SpriteView implements EngineListener {
|
|||||||
items.remove(bullet.key);
|
items.remove(bullet.key);
|
||||||
playBulletBoom(bullet.rect.center.add(new Point(bullet.rect.width * bullet.rect.direction.x, bullet.rect.height * bullet.rect.direction.y)));
|
playBulletBoom(bullet.rect.center.add(new Point(bullet.rect.width * bullet.rect.direction.x, bullet.rect.height * bullet.rect.direction.y)));
|
||||||
}
|
}
|
||||||
case EntityType.EAGLE(eagle):
|
|
||||||
if (items.exists(eagle.key)) {
|
|
||||||
cast(items.get(eagle.key), EagleItem).destoyed = true;
|
|
||||||
items.get(eagle.key).redraw();
|
|
||||||
playTankBoom(eagle.rect.center);
|
|
||||||
}
|
|
||||||
case EntityType.BONUS(bonus):
|
case EntityType.BONUS(bonus):
|
||||||
if (items.exists(bonus.key)) {
|
if (items.exists(bonus.key)) {
|
||||||
entryLayer.removeChild(items.get(bonus.key).view);
|
entryLayer.removeChild(items.get(bonus.key).view);
|
||||||
|
|||||||
@@ -227,10 +227,19 @@ class BulletItem extends BitmapItem<Bullet> {
|
|||||||
|
|
||||||
class EagleItem extends BitmapItem<Eagle> {
|
class EagleItem extends BitmapItem<Eagle> {
|
||||||
|
|
||||||
public var destoyed(default, default):Bool;
|
private var death:Bool;
|
||||||
|
|
||||||
|
override public function update():Void {
|
||||||
|
super.update();
|
||||||
|
var d = value.death;
|
||||||
|
if (d != death) {
|
||||||
|
death = d;
|
||||||
|
redraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override private function getImage():String {
|
override private function getImage():String {
|
||||||
return 'resources/images/eagle/eagle-${destoyed ? 1 : 0}.png';
|
return 'resources/image/eagle/eagle${value.death ? '-death' : ''}.png';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 374 B |
|
Before Width: | Height: | Size: 737 B After Width: | Height: | Size: 737 B |
|
Before Width: | Height: | Size: 93 B |
|
Before Width: | Height: | Size: 307 B |
|
Before Width: | Height: | Size: 969 B |
|
Before Width: | Height: | Size: 598 B |
|
Before Width: | Height: | Size: 531 B |
|
Before Width: | Height: | Size: 598 B |
|
Before Width: | Height: | Size: 304 B |
|
Before Width: | Height: | Size: 279 B |
@@ -7,9 +7,11 @@ import ru.m.tankz.Type;
|
|||||||
class Eagle extends Entity {
|
class Eagle extends Entity {
|
||||||
|
|
||||||
public var team(default, null):TeamId;
|
public var team(default, null):TeamId;
|
||||||
|
public var death(default, default):Bool;
|
||||||
|
|
||||||
public function new(team:TeamId) {
|
public function new(team:TeamId) {
|
||||||
super(new Rectangle(0, 0, 44, 44));
|
super(new Rectangle(0, 0, 44, 44));
|
||||||
this.team = team;
|
this.team = team;
|
||||||
|
this.death = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,14 +12,12 @@ import ru.m.tankz.core.Tank;
|
|||||||
import ru.m.tankz.map.LevelMap;
|
import ru.m.tankz.map.LevelMap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
interface 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):Void;
|
public function onDestroy(entity:EntityType):Void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class CollisionProcessor implements EngineListener {
|
class CollisionProcessor implements EngineListener {
|
||||||
|
|
||||||
private var engine:Engine;
|
private var engine:Engine;
|
||||||
@@ -44,40 +42,27 @@ class CollisionProcessor implements EngineListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function onCollision(entity:EntityType, with:EntityType):Void {
|
public function onCollision(entity:EntityType, with:EntityType):Void {
|
||||||
switch (entity) {
|
switch [entity, with] {
|
||||||
case EntityType.TANK(tank1):
|
case [EntityType.TANK(tank), EntityType.TANK(other_tank)]:
|
||||||
switch (with) {
|
tank.rect.lean(other_tank.rect);
|
||||||
case EntityType.TANK(tank2):
|
case [EntityType.TANK(tank), EntityType.EAGLE(eagle)]:
|
||||||
tank1.rect.lean(tank2.rect);
|
tank.rect.lean(eagle.rect);
|
||||||
case EntityType.BULLET(bullet2):
|
case [EntityType.TANK(tank), EntityType.BONUS(bonus)]:
|
||||||
if (checkTankBullet(tank1, bullet2)) {
|
engine.destroy(bonus);
|
||||||
hitTank(tank1);
|
case [EntityType.TANK(tank), EntityType.BULLET(bullet)] |
|
||||||
engine.destroy(bullet2);
|
[EntityType.BULLET(bullet), EntityType.TANK(tank)]:
|
||||||
}
|
if (checkTankBullet(tank, bullet)) {
|
||||||
case EntityType.EAGLE(eagle):
|
hitTank(tank);
|
||||||
tank1.rect.lean(eagle.rect);
|
engine.destroy(bullet);
|
||||||
case EntityType.CELL(cell):
|
|
||||||
tank1.rect.lean(cell.rect);
|
|
||||||
case EntityType.BONUS(bonus):
|
|
||||||
engine.destroy(bonus);
|
|
||||||
}
|
|
||||||
case EntityType.BULLET(bullet1):
|
|
||||||
switch (with) {
|
|
||||||
case EntityType.TANK(tank2):
|
|
||||||
if (checkTankBullet(tank2, bullet1)) {
|
|
||||||
engine.destroy(bullet1);
|
|
||||||
hitTank(tank2);
|
|
||||||
}
|
|
||||||
case EntityType.BULLET(bullet2):
|
|
||||||
engine.destroy(bullet1);
|
|
||||||
engine.destroy(bullet2);
|
|
||||||
case EntityType.EAGLE(eagle):
|
|
||||||
engine.destroy(bullet1);
|
|
||||||
engine.destroy(eagle);
|
|
||||||
case EntityType.CELL(cell):
|
|
||||||
engine.destroy(bullet1);
|
|
||||||
case EntityType.BONUS(bonus):
|
|
||||||
}
|
}
|
||||||
|
case [EntityType.BULLET(bullet), EntityType.BULLET(other_bullet)]:
|
||||||
|
engine.destroy(bullet);
|
||||||
|
engine.destroy(other_bullet);
|
||||||
|
case [EntityType.BULLET(bullet), EntityType.CELL(cell)]:
|
||||||
|
engine.destroy(bullet);
|
||||||
|
case [EntityType.BULLET(bullet), EntityType.EAGLE(eagle)]:
|
||||||
|
engine.destroy(bullet);
|
||||||
|
eagle.death = true;
|
||||||
case _:
|
case _:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,7 +70,6 @@ class CollisionProcessor implements EngineListener {
|
|||||||
public function onDestroy(entity:EntityType):Void { }
|
public function onDestroy(entity:EntityType):Void { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class Engine implements ControlHandler {
|
class Engine implements ControlHandler {
|
||||||
|
|
||||||
public var config(default, default):Config;
|
public var config(default, default):Config;
|
||||||
|
|||||||
@@ -150,21 +150,21 @@ class Game implements EngineListener {
|
|||||||
switch (entity) {
|
switch (entity) {
|
||||||
case EntityType.TANK(tank):
|
case EntityType.TANK(tank):
|
||||||
getPlayer(tank.playerId).control.start();
|
getPlayer(tank.playerId).control.start();
|
||||||
case x:
|
case _:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onCollision(entity:EntityType, with:EntityType):Void {
|
public function onCollision(entity:EntityType, with:EntityType):Void {
|
||||||
switch (entity) {
|
switch [entity, with] {
|
||||||
case EntityType.TANK(tank):
|
case [EntityType.TANK(tank), _]:
|
||||||
var control = getPlayer(tank.playerId).control;
|
var control = getPlayer(tank.playerId).control;
|
||||||
if (control != null) control.onCollision(with);
|
if (control != null) control.onCollision(with);
|
||||||
switch (with) {
|
case [EntityType.TANK(tank), EntityType.BONUS(bonus)]:
|
||||||
case EntityType.BONUS(bonus):
|
applyBonus(tank, bonus);
|
||||||
applyBonus(tank, bonus);
|
case [EntityType.BULLET(_), EntityType.EAGLE(eagle)]:
|
||||||
case x:
|
lose(eagle.team);
|
||||||
}
|
deferred.resolve(state);
|
||||||
case x:
|
case _:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,10 +184,7 @@ class Game implements EngineListener {
|
|||||||
}
|
}
|
||||||
if (tank.bonus) spawnBonus();
|
if (tank.bonus) spawnBonus();
|
||||||
deferred.resolve(state);
|
deferred.resolve(state);
|
||||||
case EntityType.EAGLE(eagle):
|
case _:
|
||||||
lose(eagle.team);
|
|
||||||
deferred.resolve(state);
|
|
||||||
case x:
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||