Implement in-game sidebars
This commit is contained in:
@@ -1,12 +1,7 @@
|
||||
package gg.malloc.defense.ui;
|
||||
|
||||
import gg.malloc.defense.engine.GameRunner;
|
||||
import gg.malloc.defense.engine.WaveManager;
|
||||
import gg.malloc.defense.engine.PlayerManager;
|
||||
import gg.malloc.defense.engine.MobManager;
|
||||
import gg.malloc.defense.engine.BombFuse;
|
||||
|
||||
import gg.malloc.defense.model.Game;
|
||||
import gg.malloc.defense.model.State;
|
||||
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
@@ -19,12 +14,7 @@ public class BossBars {
|
||||
BossBar m_waveBar = Bukkit.createBossBar("Malloc Defense", BarColor.PURPLE, BarStyle.SOLID);
|
||||
BossBar m_bombBar = Bukkit.createBossBar("Bomb Fuse", BarColor.RED, BarStyle.SOLID);
|
||||
|
||||
GameRunner m_runner;
|
||||
MobManager m_mobs;
|
||||
WaveManager m_waves;
|
||||
PlayerManager m_players;
|
||||
BombFuse m_fuse;
|
||||
Game m_game;
|
||||
State m_gameState;
|
||||
|
||||
double m_countdownProgress;
|
||||
|
||||
@@ -32,13 +22,8 @@ public class BossBars {
|
||||
m_countdownProgress = v;
|
||||
}
|
||||
|
||||
public BossBars(GameRunner runner, Game game, WaveManager waves, PlayerManager players, BombFuse fuse, MobManager mobs) {
|
||||
m_runner = runner;
|
||||
m_game = game;
|
||||
m_waves = waves;
|
||||
m_players = players;
|
||||
m_fuse = fuse;
|
||||
m_mobs = mobs;
|
||||
public BossBars(State gameState) {
|
||||
m_gameState = gameState;
|
||||
m_gameBar.setVisible(true);
|
||||
m_waveBar.setVisible(false);
|
||||
m_bombBar.setVisible(false);
|
||||
@@ -57,7 +42,7 @@ public class BossBars {
|
||||
}
|
||||
|
||||
public void update() {
|
||||
switch(m_runner.getStage()) {
|
||||
switch(m_gameState.getStage()) {
|
||||
case Idle:
|
||||
m_gameBar.setProgress(1.0);
|
||||
m_gameBar.setTitle("Waiting for players...");
|
||||
@@ -66,18 +51,18 @@ public class BossBars {
|
||||
m_bombBar.setVisible(false);
|
||||
break;
|
||||
case Warmup:
|
||||
m_gameBar.setProgress(m_waves.progress());
|
||||
m_gameBar.setTitle("Wave " + m_waves.currentWaveNum() + " / " + m_game.getWaveCount());
|
||||
m_gameBar.setProgress(m_gameState.waveProgress().toDouble());
|
||||
m_gameBar.setTitle("Wave " + m_gameState.waveProgress().value() + " / " + m_gameState.waveProgress().maximum());
|
||||
m_gameBar.setColor(BarColor.PURPLE);
|
||||
m_waveBar.setVisible(true);
|
||||
m_waveBar.setColor(BarColor.BLUE);
|
||||
m_waveBar.setTitle("Warmup - Waiting for players to get ready...");
|
||||
m_waveBar.setProgress(m_players.readyProgress());
|
||||
m_waveBar.setProgress(m_gameState.playerReadyProgress().toDouble());
|
||||
m_bombBar.setVisible(false);
|
||||
break;
|
||||
case Countdown:
|
||||
m_gameBar.setProgress(m_waves.progress());
|
||||
m_gameBar.setTitle("Wave " + m_waves.currentWaveNum() + " / " + m_game.getWaveCount());
|
||||
m_gameBar.setProgress(m_gameState.waveProgress().toDouble());
|
||||
m_gameBar.setTitle("Wave " + m_gameState.waveProgress().value() + " / " + m_gameState.waveProgress().maximum());
|
||||
m_gameBar.setColor(BarColor.PURPLE);
|
||||
m_waveBar.setVisible(true);
|
||||
m_waveBar.setColor(BarColor.YELLOW);
|
||||
@@ -86,20 +71,20 @@ public class BossBars {
|
||||
m_bombBar.setVisible(false);
|
||||
break;
|
||||
case Playing:
|
||||
m_gameBar.setProgress(m_waves.progress());
|
||||
m_gameBar.setTitle("Wave " + m_waves.currentWaveNum() + " / " + m_game.getWaveCount());
|
||||
m_gameBar.setProgress(m_gameState.waveProgress().toDouble());
|
||||
m_gameBar.setTitle("Wave " + m_gameState.waveProgress().value() + " / " + m_gameState.waveProgress().maximum());
|
||||
m_gameBar.setColor(BarColor.PURPLE);
|
||||
if (m_mobs.createdMobs() > 0) {
|
||||
if (m_gameState.mobProgress().maximum() > 0) {
|
||||
m_waveBar.setVisible(true);
|
||||
m_waveBar.setColor(BarColor.GREEN);
|
||||
m_waveBar.setTitle("Mobs remaining: " + m_mobs.remainingMobs());
|
||||
m_waveBar.setProgress(m_mobs.progress());
|
||||
m_waveBar.setTitle("Mobs remaining: " + (m_gameState.mobProgress().maximum() - m_gameState.mobProgress().value()));
|
||||
m_waveBar.setProgress(m_gameState.mobProgress().toDouble());
|
||||
} else {
|
||||
m_waveBar.setVisible(false);
|
||||
}
|
||||
if (m_fuse.isLit()) {
|
||||
if (m_gameState.fuseProgress().value() > 0) {
|
||||
m_bombBar.setVisible(true);
|
||||
m_bombBar.setProgress(1.0 - m_fuse.getProgress());
|
||||
m_bombBar.setProgress(1.0 - m_gameState.fuseProgress().toDouble());
|
||||
} else {
|
||||
m_bombBar.setVisible(false);
|
||||
}
|
||||
|
||||
87
src/main/java/gg/malloc/defense/ui/Sidebar.java
Normal file
87
src/main/java/gg/malloc/defense/ui/Sidebar.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package gg.malloc.defense.ui;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import gg.malloc.defense.model.State;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
import org.bukkit.scoreboard.Score;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
import org.bukkit.scoreboard.Objective;
|
||||
|
||||
public class Sidebar {
|
||||
Scoreboard m_scoreboard;
|
||||
Objective m_objective;
|
||||
ArrayList<String> m_rowKeys;
|
||||
HashMap<Integer, String> m_rows;
|
||||
ArrayList<Team> m_teams;
|
||||
int m_size;
|
||||
|
||||
State m_state;
|
||||
|
||||
public Sidebar(State state, Scoreboard scoreboard) {
|
||||
m_state = state;
|
||||
m_scoreboard = scoreboard;
|
||||
m_objective = m_scoreboard.registerNewObjective("text", "dummy", ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "Malloc Defense");
|
||||
m_objective.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
m_rowKeys = new ArrayList<>();
|
||||
m_rows = new HashMap<>();
|
||||
m_teams = new ArrayList<>();
|
||||
m_rowKeys.add(ChatColor.BLACK + "" + ChatColor.WHITE);
|
||||
m_rowKeys.add(ChatColor.GOLD+ "" + ChatColor.WHITE);
|
||||
m_rowKeys.add(ChatColor.WHITE+ "" + ChatColor.WHITE);
|
||||
for(String key : m_rowKeys) {
|
||||
Team team = m_scoreboard.registerNewTeam(key);
|
||||
team.addEntry(key);
|
||||
m_teams.add(team);
|
||||
}
|
||||
}
|
||||
|
||||
public void update() {
|
||||
switch(m_state.getStage()) {
|
||||
case Idle:
|
||||
m_rows.put(0, ChatColor.LIGHT_PURPLE + "Waiting for players...");
|
||||
m_size = 1;
|
||||
break;
|
||||
case Warmup:
|
||||
m_rows.put(0, ChatColor.LIGHT_PURPLE + "Wave " + m_state.waveProgress().value() + " / " + m_state.waveProgress().maximum());
|
||||
m_rows.put(1, ChatColor.AQUA + "Get ready!");
|
||||
m_rows.put(2, ChatColor.AQUA + "Balance: ");
|
||||
m_size = 3;
|
||||
break;
|
||||
case Countdown:
|
||||
m_rows.put(0, ChatColor.LIGHT_PURPLE + "Wave " + m_state.waveProgress().value() + " / " + m_state.waveProgress().maximum());
|
||||
m_rows.put(1, ChatColor.GOLD + "Wave incoming!");
|
||||
m_rows.put(2, ChatColor.AQUA + "Balance: ");
|
||||
m_size = 3;
|
||||
break;
|
||||
case Playing:
|
||||
m_rows.put(0, ChatColor.LIGHT_PURPLE + "Wave " + m_state.waveProgress().value() + " / " + m_state.waveProgress().maximum());
|
||||
m_rows.put(1, ChatColor.GREEN + "Mobs remaining: " + (m_state.mobProgress().maximum() - m_state.mobProgress().value()));
|
||||
m_rows.put(2, ChatColor.AQUA + "Balance: ");
|
||||
m_size = 3;
|
||||
break;
|
||||
case GameOver:
|
||||
m_rows.put(0, ChatColor.RED + "Game over!");
|
||||
m_size = 1;
|
||||
}
|
||||
|
||||
for(int i = 0; i < Math.min(m_size, m_rowKeys.size()); i++) {
|
||||
Score rowScore = m_objective.getScore(m_rowKeys.get(i));
|
||||
rowScore.setScore(m_rowKeys.size() - i);
|
||||
if (m_rows.containsKey(i)) {
|
||||
m_teams.get(i).setPrefix(m_rows.get(i));
|
||||
} else {
|
||||
m_teams.get(i).setPrefix("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Scoreboard getScoreboard() {
|
||||
return m_scoreboard;
|
||||
}
|
||||
}
|
||||
35
src/main/java/gg/malloc/defense/ui/Sidebars.java
Normal file
35
src/main/java/gg/malloc/defense/ui/Sidebars.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package gg.malloc.defense.ui;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.ScoreboardManager;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import gg.malloc.defense.model.State;
|
||||
|
||||
public class Sidebars {
|
||||
State m_state;
|
||||
ScoreboardManager m_scoreboards;
|
||||
HashMap<Player, Sidebar> m_sidebars = new HashMap<>();
|
||||
|
||||
public Sidebars(State state, ScoreboardManager scoreboards) {
|
||||
m_state = state;
|
||||
m_scoreboards = scoreboards;
|
||||
}
|
||||
|
||||
public void addPlayer(Player player) {
|
||||
m_sidebars.put(player, new Sidebar(m_state, m_scoreboards.getNewScoreboard()));
|
||||
player.setScoreboard(m_sidebars.get(player).getScoreboard());
|
||||
}
|
||||
|
||||
public void removePlayer(Player player) {
|
||||
m_sidebars.remove(player);
|
||||
player.setScoreboard(m_scoreboards.getMainScoreboard());
|
||||
}
|
||||
|
||||
public void update() {
|
||||
for(Player p : m_sidebars.keySet()) {
|
||||
m_sidebars.get(p).update();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user