[comon] ArmorEagleBonus improve
This commit is contained in:
3
WORK.md
3
WORK.md
@@ -1,6 +1,7 @@
|
|||||||
* bonuses
|
* bonuses
|
||||||
* spawn bonus by timer
|
* spawn bonus by timer
|
||||||
* eagle armor bonus for enemy
|
* dota and death game types bonuses
|
||||||
|
* boat bonus
|
||||||
* tanks and bullets speed balancing
|
* tanks and bullets speed balancing
|
||||||
* game series
|
* game series
|
||||||
* network series
|
* network series
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import ru.m.tankz.core.Eagle;
|
|||||||
import ru.m.tankz.engine.IEngine;
|
import ru.m.tankz.engine.IEngine;
|
||||||
import ru.m.tankz.game.GameEvent;
|
import ru.m.tankz.game.GameEvent;
|
||||||
import ru.m.tankz.game.IGame;
|
import ru.m.tankz.game.IGame;
|
||||||
import ru.m.tankz.game.Team;
|
import ru.m.tankz.map.LevelMap;
|
||||||
import ru.m.tankz.Type;
|
import ru.m.tankz.Type;
|
||||||
|
|
||||||
using ru.m.tankz.game.GameUtil;
|
using ru.m.tankz.game.GameUtil;
|
||||||
@@ -14,30 +14,50 @@ class ArmorEagleBonus extends BaseBonus {
|
|||||||
|
|
||||||
public static inline var CLASS = "armor.eagle";
|
public static inline var CLASS = "armor.eagle";
|
||||||
|
|
||||||
|
private static var brickMap(default, never) = [
|
||||||
|
[1, 1, 1, 1],
|
||||||
|
[1, 0, 0, 1],
|
||||||
|
[1, 0, 0, 1],
|
||||||
|
[1, 1, 1, 1],
|
||||||
|
];
|
||||||
|
|
||||||
override public function apply(playerId:PlayerId, game:IGame, engine:IEngine):Void {
|
override public function apply(playerId:PlayerId, game:IGame, engine:IEngine):Void {
|
||||||
var team:Team = game.getTeam(playerId.team);
|
for (team in game.teams) {
|
||||||
if (team.eagleId > 0) {
|
if (team.eagleId > 0) {
|
||||||
var eagle:Eagle = cast(engine.entities[team.eagleId], Eagle);
|
var brickType = team.id == playerId.team ? "armor" : "none";
|
||||||
|
applyEagleArmor(team.eagleId, brickType, config.duration, game, engine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getEagleBricksIds(eagle:Eagle, map:LevelMap):Array<Int> {
|
||||||
|
var result:Array<Int> = [];
|
||||||
var center = eagle.rect.center;
|
var center = eagle.rect.center;
|
||||||
var cx:Int = Math.round(center.x / engine.map.cellWidth);
|
var cx:Int = Math.round(center.x / map.cellWidth - brickMap.length / 2);
|
||||||
var cy:Int = Math.round(center.y / engine.map.cellHeight);
|
var cy:Int = Math.round(center.y / map.cellHeight - brickMap[0].length / 2);
|
||||||
var bricks:Array<Int> = [];
|
for (x in 0...brickMap.length) {
|
||||||
for (x in cx - 2...cx + 2) {
|
for (y in 0...brickMap[0].length) {
|
||||||
for (y in cy - 2...cy + 2) {
|
if (brickMap[x][y] > 0) {
|
||||||
var brick = engine.map.getBrick(new Point(x, y));
|
var brick = map.getBrick(new Point(cx + x, cy + y));
|
||||||
if (brick != null && brick.config.type != "none") {
|
if (brick != null) {
|
||||||
bricks.push(brick.id);
|
result.push(brick.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function applyEagleArmor(eagleId:Int, brickType:BrickType, duration:Int, game:IGame, engine:IEngine):Void {
|
||||||
|
var eagle:Eagle = engine.getEntity(eagleId);
|
||||||
|
var bricks:Array<Int> = getEagleBricksIds(eagle, engine.map);
|
||||||
for (brickId in bricks) {
|
for (brickId in bricks) {
|
||||||
game.gameEventSignal.emit(CHANGE(BRICK(brickId, "armor")));
|
game.gameEventSignal.emit(CHANGE(BRICK(brickId, brickType)));
|
||||||
}
|
}
|
||||||
game.ticker.emit(function() {
|
game.ticker.emit(function() {
|
||||||
for (brickId in bricks) {
|
for (brickId in bricks) {
|
||||||
game.gameEventSignal.emit(CHANGE(BRICK(brickId, "brick")));
|
game.gameEventSignal.emit(CHANGE(BRICK(brickId, "brick")));
|
||||||
}
|
}
|
||||||
}, Std.int(config.duration * 1000), '$CLASS.${eagle.id}');
|
}, Std.int(duration * 1000), '$CLASS.${eagle.id}');
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user