[client] use LabelView for score in render

This commit is contained in:
2019-03-26 22:20:07 +03:00
parent d2f23e7777
commit 404dd77806
3 changed files with 46 additions and 49 deletions

View File

@@ -1,15 +1,12 @@
package ru.m.tankz.render; package ru.m.tankz.render;
import promhx.Promise;
import flash.display.DisplayObjectContainer; import flash.display.DisplayObjectContainer;
import flash.display.Graphics; import flash.display.Graphics;
import flash.display.Sprite; import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;
import haxe.Timer; import haxe.Timer;
import haxework.view.LabelView;
import haxework.view.SpriteView; import haxework.view.SpriteView;
import haxework.provider.Provider; import promhx.Promise;
import haxework.resources.IResources;
import ru.m.animate.Animate; import ru.m.animate.Animate;
import ru.m.animate.OnceAnimate; import ru.m.animate.OnceAnimate;
import ru.m.geom.Point; import ru.m.geom.Point;
@@ -103,24 +100,24 @@ class Render extends SpriteView {
} }
public function onSpawn(entity:EntityType):Void { public function onSpawn(entity:EntityType):Void {
switch(entity) { switch entity {
case EntityType.TANK(tank): case TANK(tank):
var item = new TankItem(tank); var item = new TankItem(tank);
items.set(tank.key, item); items.set(tank.key, item);
entryLayer.addChild(item.view); entryLayer.addChild(item.view);
item.update(); item.update();
playAnimate(tank.rect.center, AnimateBundle.tankSpawn()); playAnimate(tank.rect.center, AnimateBundle.tankSpawn());
case EntityType.BULLET(bullet): case BULLET(bullet):
var item = new BulletItem(bullet); var item = new BulletItem(bullet);
items.set(bullet.key, item); items.set(bullet.key, item);
entryLayer.addChild(item.view); entryLayer.addChild(item.view);
item.update(); item.update();
case EntityType.EAGLE(eagle): case EAGLE(eagle):
var item = new EagleItem(eagle); var item = new EagleItem(eagle);
items.set(eagle.key, item); items.set(eagle.key, item);
entryLayer.addChild(item.view); entryLayer.addChild(item.view);
item.update(); item.update();
case EntityType.BONUS(bonus): case BONUS(bonus):
var item = new BonusItem(bonus); var item = new BonusItem(bonus);
items.set(bonus.key, item); items.set(bonus.key, item);
upperLayer.addChild(item.view); upperLayer.addChild(item.view);
@@ -133,7 +130,7 @@ class Render extends SpriteView {
public function onCollision(entity:EntityType, with:EntityType):Void { public function onCollision(entity:EntityType, with:EntityType):Void {
switch [entity, with] { switch [entity, with] {
case [EntityType.BULLET(_), EntityType.EAGLE(eagle)]: case [BULLET(_), EAGLE(eagle)]:
if (eagle.death) { if (eagle.death) {
playAnimate(eagle.rect.center, AnimateBundle.tankBoom()); playAnimate(eagle.rect.center, AnimateBundle.tankBoom());
} }
@@ -143,7 +140,7 @@ class Render extends SpriteView {
public function onDestroy(entity:EntityType, ?playerId:PlayerId):Void { public function onDestroy(entity:EntityType, ?playerId:PlayerId):Void {
switch entity { switch entity {
case EntityType.TANK(tank): case 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);
items.remove(tank.key); items.remove(tank.key);
@@ -152,14 +149,14 @@ class Render extends SpriteView {
showScore(tank.rect.center, tank.config.score); showScore(tank.rect.center, tank.config.score);
} }
} }
case EntityType.BULLET(bullet): case BULLET(bullet):
if (items.exists(bullet.key)) { if (items.exists(bullet.key)) {
entryLayer.removeChild(items.get(bullet.key).view); entryLayer.removeChild(items.get(bullet.key).view);
items.remove(bullet.key); 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)); var point = bullet.rect.center.add(new Point(bullet.rect.width * bullet.rect.direction.x, bullet.rect.height * bullet.rect.direction.y));
playAnimate(point, AnimateBundle.bulletBoom()); playAnimate(point, AnimateBundle.bulletBoom());
} }
case EntityType.BONUS(bonus): case BONUS(bonus):
if (items.exists(bonus.key)) { if (items.exists(bonus.key)) {
upperLayer.removeChild(items.get(bonus.key).view); upperLayer.removeChild(items.get(bonus.key).view);
items.remove(bonus.key); items.remove(bonus.key);
@@ -186,14 +183,14 @@ class Render extends SpriteView {
} }
private function showScore(point:Point, score:Int):Void { private function showScore(point:Point, score:Int):Void {
var view:TextField = new TextField(); var view:LabelView = new LabelView();
view.embedFonts = true; view.skinId = "text";
var font:String = Provider.get(IResources).text.get('font');
view.defaultTextFormat = new TextFormat(font, 28, 0xffffff);
view.text = Std.string(score); view.text = Std.string(score);
view.x = point.x - view.textWidth / 2; view.update();
view.y = point.y - view.textHeight / 2; view.redraw();
upperLayer.addChild(view); view.x = point.x - view.width / 2;
Timer.delay(function() upperLayer.removeChild(view), 1000); view.y = point.y - view.height / 2;
upperLayer.addChild(view.content);
Timer.delay(function() upperLayer.removeChild(view.content), 1000);
} }
} }

View File

@@ -40,41 +40,41 @@ class CollisionProcessor {
public function onCollision(entity:EntityType, with:EntityType):Void { public function onCollision(entity:EntityType, with:EntityType):Void {
switch [entity, with] { switch [entity, with] {
case [EntityType.TANK(tank), EntityType.TANK(other_tank)]: case [TANK(tank), TANK(other_tank)]:
tank.rect.lean(other_tank.rect); tank.rect.lean(other_tank.rect);
case [EntityType.TANK(tank), EntityType.EAGLE(eagle)]: case [TANK(tank), EAGLE(eagle)]:
tank.rect.lean(eagle.rect); tank.rect.lean(eagle.rect);
case [EntityType.TANK(tank), EntityType.BONUS(bonus)]: case [TANK(tank), BONUS(bonus)]:
engine.destroy(bonus, tank.playerId); engine.destroy(bonus, tank.playerId);
case [EntityType.TANK(tank), EntityType.BULLET(bullet)] | case [TANK(tank), BULLET(bullet)] |
[EntityType.BULLET(bullet), EntityType.TANK(tank)]: [BULLET(bullet), TANK(tank)]:
if (bullet.tankId == tank.id || (!engine.config.game.friendlyFire && tank.playerId.team == bullet.playerId.team)) { if (bullet.tankId == tank.id || (!engine.config.game.friendlyFire && tank.playerId.team == bullet.playerId.team)) {
// Nothing // Nothing
} else { } else {
if (!tank.protect.active) { if (!tank.protect.active) {
if (tank.config.downgrade != null) { if (tank.config.downgrade != null) {
tank.config = engine.config.getTank(tank.config.downgrade); tank.config = engine.config.getTank(tank.config.downgrade);
engine.change(tank, EntityChange.TYPE); engine.change(tank, TYPE);
} else if (tank.hits > 0) { } else if (tank.hits > 0) {
tank.hits--; tank.hits--;
engine.change(tank, EntityChange.HIT); engine.change(tank, HIT);
} else { } else {
engine.destroy(tank, bullet.tank.playerId); engine.destroy(tank, bullet.tank.playerId);
} }
} }
engine.destroy(bullet); engine.destroy(bullet);
} }
case [EntityType.BULLET(bullet), EntityType.BULLET(other_bullet)]: case [BULLET(bullet), BULLET(other_bullet)]:
engine.destroy(bullet); engine.destroy(bullet);
engine.destroy(other_bullet); engine.destroy(other_bullet);
case [EntityType.BULLET(bullet), EntityType.CELL(cell)]: case [BULLET(bullet), CELL(cell)]:
engine.destroy(bullet); engine.destroy(bullet);
case [EntityType.BULLET(bullet), EntityType.EAGLE(eagle)]: case [BULLET(bullet), EAGLE(eagle)]:
engine.destroy(bullet); engine.destroy(bullet);
if (!eagle.protect.active) { if (!eagle.protect.active) {
eagle.death = true; eagle.death = true;
// ToDo: change // ToDo: change
engine.change(eagle, EntityChange.DEATH(bullet.playerId)); engine.change(eagle, DEATH(bullet.playerId));
} }
case _: case _:
} }
@@ -148,7 +148,7 @@ class Engine extends EngineDispatcher implements ControlHandler {
if (entities.exists(entity.id)) { if (entities.exists(entity.id)) {
var type = EntityTypeResolver.of(entity); var type = EntityTypeResolver.of(entity);
switch (type) { switch (type) {
case EntityType.BULLET(bullet): case BULLET(bullet):
var tank:Tank = cast entities.get(bullet.tankId); var tank:Tank = cast entities.get(bullet.tankId);
if (tank != null) tank.onDestroyBullet(); if (tank != null) tank.onDestroyBullet();
case _: case _:
@@ -162,16 +162,16 @@ class Engine extends EngineDispatcher implements ControlHandler {
if (!entities.exists(tankId)) return; if (!entities.exists(tankId)) return;
var tank:Tank = cast entities.get(tankId); var tank:Tank = cast entities.get(tankId);
switch (action) { switch (action) {
case TankAction.MOVE(direction): case MOVE(direction):
tank.move(direction); tank.move(direction);
case TankAction.UPGRADE: case UPGRADE:
if (tank.config.upgrade != null) { if (tank.config.upgrade != null) {
tank.config = config.getTank(tank.config.upgrade); tank.config = config.getTank(tank.config.upgrade);
change(tank, EntityChange.TYPE); change(tank, TYPE);
} }
case TankAction.STOP: case STOP:
tank.stop(); tank.stop();
case TankAction.SHOT: case SHOT:
var bullet = tank.shot(); var bullet = tank.shot();
if (bullet != null) { if (bullet != null) {
spawn(bullet); spawn(bullet);

View File

@@ -185,10 +185,10 @@ class Game extends GameDispatcher {
} }
public function onSpawn(entity:EntityType):Void { public function onSpawn(entity:EntityType):Void {
switch (entity) { switch entity {
case EntityType.TANK(tank): case TANK(tank):
getPlayer(tank.playerId).control.start(); getPlayer(tank.playerId).control.start();
case EntityType.BULLET(bullet): case BULLET(bullet):
getPlayer(bullet.playerId).state.shots++; getPlayer(bullet.playerId).state.shots++;
case _: case _:
} }
@@ -196,18 +196,18 @@ class Game extends GameDispatcher {
public function onChange(entity:EntityType, change:EntityChange):Void { public function onChange(entity:EntityType, change:EntityChange):Void {
switch [entity, change] { switch [entity, change] {
case [EntityType.EAGLE(eagle), EntityChange.DEATH(playerId)]: case [EAGLE(eagle), DEATH(playerId)]:
if (eagle.death) { if (eagle.death) {
getPlayer(playerId).state.score += eagle.score * (eagle.team == playerId.team ? 0 : 1); getPlayer(playerId).state.score += eagle.score * (eagle.team == playerId.team ? 0 : 1);
lose(eagle.team); lose(eagle.team);
onGameChange.emit(state); onGameChange.emit(state);
} }
case [EntityType.TANK(tank), EntityChange.HIT]: case [TANK(tank), HIT]:
if (tank.bonus) { if (tank.bonus) {
tank.bonus = false; tank.bonus = false;
spawnBonus(); spawnBonus();
} }
case [EntityType.TANK(tank), EntityChange.TYPE]: case [TANK(tank), TYPE]:
getPlayer(tank.playerId).state.tank = tank.config.type; getPlayer(tank.playerId).state.tank = tank.config.type;
case _: case _:
} }
@@ -221,9 +221,9 @@ class Game extends GameDispatcher {
case _: case _:
} }
switch [entity, with] { switch [entity, with] {
case [EntityType.TANK(tank), EntityType.BONUS(bonus)]: case [TANK(tank), BONUS(bonus)]:
applyBonus(tank, bonus); applyBonus(tank, bonus);
case [EntityType.BULLET(bullet), EntityType.TANK(tank)]: case [BULLET(bullet), TANK(tank)]:
getPlayer(bullet.playerId).state.hits++; getPlayer(bullet.playerId).state.hits++;
case _: case _:
} }
@@ -231,7 +231,7 @@ class Game extends GameDispatcher {
public function onDestroy(entity:EntityType, ?playerId:PlayerId):Void { public function onDestroy(entity:EntityType, ?playerId:PlayerId):Void {
switch (entity) { switch (entity) {
case EntityType.TANK(tank): case TANK(tank):
var team = getTeam(tank.playerId.team); var team = getTeam(tank.playerId.team);
var player = getPlayer(tank.playerId); var player = getPlayer(tank.playerId);
player.control.stop(); player.control.stop();
@@ -252,7 +252,7 @@ class Game extends GameDispatcher {
getPlayer(playerId).state.score += tank.config.score * (tank.playerId.team == playerId.team ? 0 : 1); getPlayer(playerId).state.score += tank.config.score * (tank.playerId.team == playerId.team ? 0 : 1);
} }
onGameChange.emit(state); onGameChange.emit(state);
case EntityType.BONUS(bonus): case BONUS(bonus):
if (bonus.config.score > 0 && playerId != null) { if (bonus.config.score > 0 && playerId != null) {
getPlayer(playerId).state.score += bonus.config.score; getPlayer(playerId).state.score += bonus.config.score;
} }