diff --git a/CHANGELOG.md b/CHANGELOG.md index b30ad9b..42db538 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 ------ diff --git a/WORK.md b/WORK.md index 7a2a00d..2d15ce1 100644 --- a/WORK.md +++ b/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 diff --git a/src/common/haxe/ru/m/tankz/game/GameRunner.hx b/src/common/haxe/ru/m/tankz/game/GameRunner.hx index 448d2ce..5ac16a2 100644 --- a/src/common/haxe/ru/m/tankz/game/GameRunner.hx +++ b/src/common/haxe/ru/m/tankz/game/GameRunner.hx @@ -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 = []; 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]; diff --git a/src/common/haxe/ru/m/tankz/game/Team.hx b/src/common/haxe/ru/m/tankz/game/Team.hx index 0ebbc33..7897f11 100644 --- a/src/common/haxe/ru/m/tankz/game/Team.hx +++ b/src/common/haxe/ru/m/tankz/game/Team.hx @@ -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, state:TeamState = null) { this.id = config.id;