[common] clock bonus freeze team instead tanks
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
* Updated `CreateGamePopup` for any screen sizes
|
||||
* Fixed tank destroy zero score label
|
||||
* Added custom size map support
|
||||
* Fixed clock bonus for spawned tanks
|
||||
|
||||
0.14.0
|
||||
------
|
||||
|
||||
2
WORK.md
2
WORK.md
@@ -1,4 +1,3 @@
|
||||
* [bug] **clock** bonus for spawned tanks
|
||||
* [feature] **shovel** bonus with armor bricks
|
||||
* [feature] bonuses in dota/death mod
|
||||
* [feature] tanks and bullets speed balancing
|
||||
@@ -6,3 +5,4 @@
|
||||
* [feature] network game series
|
||||
* [feature] map packs (create in editor, import in game, save imported in local storage)
|
||||
* [feature] update bots
|
||||
* [feature] improve bonuses system
|
||||
|
||||
@@ -74,6 +74,9 @@ class GameRunner extends Game implements EngineListener {
|
||||
private function spawn(task:SpawnTask):Void {
|
||||
var player = getPlayer(task.playerId);
|
||||
var tank = builder.buildTank(task.point, task.playerId, task.tankType, player.state.color, player.state.name);
|
||||
if (getTeam(player.id.team).freezing) {
|
||||
tank.freezing = true;
|
||||
}
|
||||
engine.spawn(tank);
|
||||
gameEventSignal.emit(EventUtil.buildTankSpawn(tank));
|
||||
if (player.config.protect > 0) {
|
||||
@@ -101,6 +104,8 @@ class GameRunner extends Game implements EngineListener {
|
||||
|
||||
private function freezeTank(tank:Tank, duration:Float):Void {
|
||||
tank.freezing = true;
|
||||
tank.stop();
|
||||
gameEventSignal.emit(STOP(TANK(tank.id)));
|
||||
gameEventSignal.emit(CHANGE(TANK_FREEZE(tank.id, tank.freezing)));
|
||||
engine.ticker.emit(function() {
|
||||
tank.freezing = false;
|
||||
@@ -108,6 +113,23 @@ class GameRunner extends Game implements EngineListener {
|
||||
}, Std.int(duration * 1000));
|
||||
}
|
||||
|
||||
private function freezeTeam(teamId:TeamId, duration:Float):Void {
|
||||
getTeam(teamId).freezing = true;
|
||||
for (tank in engine.iterTanks(teamTank(teamId))) {
|
||||
tank.freezing = true;
|
||||
tank.stop();
|
||||
gameEventSignal.emit(STOP(TANK(tank.id)));
|
||||
gameEventSignal.emit(CHANGE(TANK_FREEZE(tank.id, tank.freezing)));
|
||||
}
|
||||
engine.ticker.emit(function() {
|
||||
getTeam(teamId).freezing = false;
|
||||
for (tank in engine.iterTanks(teamTank(teamId))) {
|
||||
tank.freezing = false;
|
||||
gameEventSignal.emit(CHANGE(TANK_FREEZE(tank.id, tank.freezing)));
|
||||
}
|
||||
}, Std.int(duration * 1000));
|
||||
}
|
||||
|
||||
private function checkComplete():Void {
|
||||
var actives:Array<TeamId> = [];
|
||||
for (team in teams.iterator()) {
|
||||
@@ -121,12 +143,17 @@ class GameRunner extends Game implements EngineListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (actives.length == 1) {
|
||||
switch actives {
|
||||
case [winner]: complete(winner);
|
||||
case []: complete(null);
|
||||
case _:
|
||||
}
|
||||
/*if (actives.length == 1) {
|
||||
complete(actives[0]);
|
||||
}
|
||||
if (actives.length == 0) {
|
||||
complete(null);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private function complete(winner:TeamId):Void {
|
||||
@@ -244,6 +271,10 @@ class GameRunner extends Game implements EngineListener {
|
||||
gameEventSignal.emit(EventUtil.buildBonusSpawn(bonus));
|
||||
}
|
||||
|
||||
private inline function teamTank(team:TeamId):Tank->Bool {
|
||||
return function(tank:Tank):Bool return team == tank.playerId.team;
|
||||
}
|
||||
|
||||
private inline function alienTank(team:TeamId):Tank->Bool {
|
||||
return function(tank:Tank):Bool return team != tank.playerId.team;
|
||||
}
|
||||
@@ -261,11 +292,14 @@ class GameRunner extends Game implements EngineListener {
|
||||
case "helmet":
|
||||
protectTank(tank, bonus.config.duration);
|
||||
case "clock":
|
||||
for (t in engine.iterTanks(alienTank(tank.playerId.team))) {
|
||||
freezeTank(t, bonus.config.duration);
|
||||
t.stop();
|
||||
gameEventSignal.emit(STOP(TANK(t.id)));
|
||||
for (team in teams) {
|
||||
if (team.id != tank.playerId.team) {
|
||||
freezeTeam(team.id, bonus.config.duration);
|
||||
}
|
||||
}
|
||||
/*for (t in engine.iterTanks(alienTank(tank.playerId.team))) {
|
||||
freezeTank(t, bonus.config.duration);
|
||||
}*/
|
||||
case "shovel":
|
||||
// ToDo: protect eagle/area
|
||||
var team:Team = teams[tank.playerId.team];
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package ru.m.tankz.game;
|
||||
|
||||
import ru.m.tankz.game.GameState.TeamState;
|
||||
import ru.m.tankz.Type;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
class Team {
|
||||
|
||||
@@ -15,6 +15,7 @@ class Team {
|
||||
public var eagleId(default, default):Int;
|
||||
private var active(default, default):Int;
|
||||
public var state(default, default):TeamState;
|
||||
public var freezing(default, default):Bool;
|
||||
|
||||
public function new(config:TeamConfig, points:Array<SpawnPoint>, state:TeamState = null) {
|
||||
this.id = config.id;
|
||||
|
||||
Reference in New Issue
Block a user