From 4e9ea23db8aa2e27a5bc22677b8a604581d12aca Mon Sep 17 00:00:00 2001 From: Thanos Paravantis Date: Wed, 22 Jun 2016 21:47:39 +0300 Subject: [PATCH] Fix spawn facing, separate scoreboard functions --- .../game/games/mineware/BawkBawkBattles.java | 233 +++++++++++------- .../mineware/challenge/TeamChallenge.java | 1 - 2 files changed, 147 insertions(+), 87 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java index dfd3c6c84..cd5990384 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java @@ -59,7 +59,6 @@ import mineplex.core.common.util.UtilTextBottom; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTextTop; import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilWorld; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; import mineplex.core.recharge.Recharge; @@ -76,6 +75,7 @@ import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.mineware.challenge.Challenge; +import nautilus.game.arcade.game.games.mineware.challenge.ChallengeData; import nautilus.game.arcade.game.games.mineware.challenge.ChallengeList; import nautilus.game.arcade.game.games.mineware.challenge.ChallengeSettings; import nautilus.game.arcade.game.games.mineware.challenge.TeamChallenge; @@ -214,6 +214,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown DeathTeleport = false; AutomaticRespawn = false; DeathMessages = false; + FixSpawnFacing = false; TeleportsDisqualify = false; GiveClock = false; @@ -426,9 +427,14 @@ public class BawkBawkBattles extends TeamGame implements IThrown { ArrayList selected = _challenge.createSpawns(); + for (Location spawn : selected) + { + spawn.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory2d(spawn, _challenge.getCenter()))); + } + _challenge.getData().setSpawns(selected); _playerTeam.SetSpawns(selected); - SpectatorSpawn = UtilWorld.averageLocation(selected).add(0, 7, 0); + SpectatorSpawn = _challenge.getCenter().add(0, 7, 0); return selected; } @@ -453,13 +459,17 @@ public class BawkBawkBattles extends TeamGame implements IThrown } } + /* + * Spawns + */ + private void teleportSpectatorsToSpawn() { for (Player player : GetPlayers(false)) { if (!IsAlive(player)) { - player.teleport(SpectatorSpawn); + player.teleport(GetSpectatorLocation()); } } } @@ -606,7 +616,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown if (!IsLive()) return; - if (_challenge == null) // Triggered after the first challenge ends. + if (_challenge == null) // When challenge is null, a new one should start. { if (!UtilTime.elapsed(_delay, 1500)) { @@ -634,7 +644,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown _delay = System.currentTimeMillis(); _settings.setWaiting(true); } - else if (_settings.isWaiting()) // Triggered when a challenge should start. + else if (_settings.isWaiting()) // If challenge is waiting, show description. { if (!UtilTime.elapsed(_delay, 1000)) { @@ -643,7 +653,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown displayDescriptionAndStartChallenge(); } - else // Triggered when a challenge should end. + else // Otherwise, check if the challenge is ended. { checkChallengeEnd(); } @@ -1466,6 +1476,10 @@ public class BawkBawkBattles extends TeamGame implements IThrown } } + /* + * Scoreboard + */ + @Override @EventHandler public void ScoreboardUpdate(UpdateEvent event) @@ -1477,94 +1491,139 @@ public class BawkBawkBattles extends TeamGame implements IThrown if (getPlayersWithRemainingLives() > 14) { - int alive = getPlayersWithRemainingLives(); - - Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cYellow + C.Bold + "Players"); - Scoreboard.Write(alive + " "); - - boolean check = _challenge != null && _settings.isChallengeStarted(); - - Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cGreen + C.Bold + "Alive"); - - if (check) - Scoreboard.Write("" + _challenge.getPlayersIn(false).size()); - else - Scoreboard.Write("-"); - - Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cGold + C.Bold + "Completed"); - - if (check) - Scoreboard.Write("" + _challenge.getData().getCompletedPlayers().size()); - else - Scoreboard.Write("-"); - - Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cGray + C.Bold + "Dead"); - - if (check) - Scoreboard.Write("" + _challenge.getData().getLostPlayers().size()); - else - Scoreboard.Write("-"); - + displayGenericScoreboard(); } else { - Scoreboard.WriteBlank(); - - for (Player player : super.GetPlayers(true)) - { - int currentLives = lives(player); - String status; - String currentlyOut = ""; - - if (_challenge != null) - { - if (_challenge.getData().isLost(player)) - { - currentlyOut = C.cDRed + "X "; - } - else if (_challenge.getData().isCompleted(player)) - { - currentlyOut = C.cGreen + "✔ "; - } - } - - switch (currentLives) - { - case 5: - status = currentlyOut + C.cGreen + player.getName(); - break; - case 4: - status = currentlyOut + C.cYellow + player.getName(); - break; - case 3: - status = currentlyOut + C.cGold + player.getName(); - break; - case 2: - status = currentlyOut + C.cRed + player.getName(); - break; - case 1: - status = currentlyOut + C.cRed + player.getName(); - break; - default: - status = C.cGray + C.Strike + player.getName(); - break; - } - - Scoreboard.WriteOrdered("Lives Left", status, currentLives, true); - } + displayDetailedScoreboard(); } Scoreboard.Draw(); } + private void displayGenericScoreboard() + { + displayPlayerTotal(); + displayAlivePlayers(); + displayCompletedPlayers(); + displayDeadPlayers(); + } + + private void displayPlayerTotal() + { + Scoreboard.WriteBlank(); + Scoreboard.Write(C.cYellow + C.Bold + "Players"); + Scoreboard.Write(getPlayersWithRemainingLives() + " "); + } + + private void displayAlivePlayers() + { + int data = _challenge.getPlayersIn(false).size(); + + Scoreboard.WriteBlank(); + Scoreboard.Write(C.cGreen + C.Bold + "Alive"); + + if (_settings.isChallengeStarted()) + { + Scoreboard.Write("" + data); + } + else + { + Scoreboard.Write("-"); + } + } + + private void displayCompletedPlayers() + { + int data = _challenge.getData().getCompletedPlayers().size(); + + Scoreboard.WriteBlank(); + Scoreboard.Write(C.cGold + C.Bold + "Completed"); + + if (_settings.isChallengeStarted()) + { + Scoreboard.Write("" + data); + } + else + { + Scoreboard.Write("-"); + } + } + + private void displayDeadPlayers() + { + int data = _challenge.getData().getLostPlayers().size(); + + Scoreboard.WriteBlank(); + Scoreboard.Write(C.cGray + C.Bold + "Dead"); + + if (_settings.isChallengeStarted()) + { + Scoreboard.Write("" + data); + } + else + { + Scoreboard.Write("-"); + } + } + + private void displayDetailedScoreboard() + { + Scoreboard.WriteBlank(); + + for (Player player : super.GetPlayers(true)) // Use super.GetPlayers(true) to show players during chicken attack. + { + displayPersonalScore(player); + } + } + + private void displayPersonalScore(Player player) + { + int lives = lives(player); + String state = definePlayerState(player); + String display = definePlayerDisplay(player.getName(), lives, state); + + Scoreboard.WriteOrdered("Lives Left", display, lives, true); + } + + private String definePlayerDisplay(String name, int lives, String state) + { + switch (lives) + { + case 5: + return state + C.cGreen + name; + case 4: + return state + C.cYellow + name; + case 3: + return state + C.cGold + name; + case 2: + return state + C.cRed + name; + case 1: + return state + C.cRed + name; + default: + return C.cGray + C.Strike + name; + } + } + + private String definePlayerState(Player player) + { + if (_settings.isChallengeStarted()) + { + ChallengeData data = _challenge.getData(); + + if (data.isLost(player)) + { + return C.cDRed + "X "; + } + else if (data.isCompleted(player)) + { + return C.cGreen + "✔ "; + } + } + + return ""; + } + /* * Helper methods */ @@ -1573,7 +1632,9 @@ public class BawkBawkBattles extends TeamGame implements IThrown public boolean isInsideMap(Player player) { if (_challenge != null && !_settings.isWaiting()) + { return _challenge.isInsideMap(player); + } return true; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java index 9a27a344a..66bccef61 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java @@ -76,7 +76,6 @@ public abstract class TeamChallenge extends Challenge for (Location spawn : randomSpawns) { - spawn = Host.getPlayerTeam().fixFacing(spawn); Block block = spawn.getBlock().getRelative(BlockFace.DOWN); if (block.getData() == _firstTeamSpawnBlockData && firstTeamIndex < firstTeam.size())