120 lines
3.9 KiB
Java
120 lines
3.9 KiB
Java
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 org.bukkit.boss.BossBar;
|
|
import org.bukkit.boss.BarStyle;
|
|
import org.bukkit.boss.BarColor;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.entity.Player;
|
|
|
|
public class BossBars {
|
|
BossBar m_gameBar = Bukkit.createBossBar("Malloc Defense", BarColor.PURPLE, BarStyle.SOLID);
|
|
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;
|
|
|
|
double m_countdownProgress;
|
|
|
|
public void setCountdownProgress(double v) {
|
|
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;
|
|
m_gameBar.setVisible(true);
|
|
m_waveBar.setVisible(false);
|
|
m_bombBar.setVisible(false);
|
|
}
|
|
|
|
public void addPlayer(Player p) {
|
|
m_gameBar.addPlayer(p);
|
|
m_waveBar.addPlayer(p);
|
|
m_bombBar.addPlayer(p);
|
|
}
|
|
|
|
public void removePlayer(Player p) {
|
|
m_gameBar.removePlayer(p);
|
|
m_waveBar.removePlayer(p);
|
|
m_bombBar.removePlayer(p);
|
|
}
|
|
|
|
public void update() {
|
|
switch(m_runner.getStage()) {
|
|
case Idle:
|
|
m_gameBar.setProgress(1.0);
|
|
m_gameBar.setTitle("Waiting for players...");
|
|
m_gameBar.setColor(BarColor.PURPLE);
|
|
m_waveBar.setVisible(false);
|
|
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.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_bombBar.setVisible(false);
|
|
break;
|
|
case Countdown:
|
|
m_gameBar.setProgress(m_waves.progress());
|
|
m_gameBar.setTitle("Wave " + m_waves.currentWaveNum() + " / " + m_game.getWaveCount());
|
|
m_gameBar.setColor(BarColor.PURPLE);
|
|
m_waveBar.setVisible(true);
|
|
m_waveBar.setColor(BarColor.YELLOW);
|
|
m_waveBar.setTitle("Wave starting!");
|
|
m_waveBar.setProgress(m_countdownProgress);
|
|
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.setColor(BarColor.PURPLE);
|
|
if (m_mobs.createdMobs() > 0) {
|
|
m_waveBar.setVisible(true);
|
|
m_waveBar.setColor(BarColor.GREEN);
|
|
m_waveBar.setTitle("Mobs remaining: " + m_mobs.remainingMobs());
|
|
m_waveBar.setProgress(m_mobs.progress());
|
|
} else {
|
|
m_waveBar.setVisible(false);
|
|
}
|
|
if (m_fuse.isLit()) {
|
|
m_bombBar.setVisible(true);
|
|
m_bombBar.setProgress(1.0 - m_fuse.getProgress());
|
|
} else {
|
|
m_bombBar.setVisible(false);
|
|
}
|
|
break;
|
|
case GameOver:
|
|
m_gameBar.setColor(BarColor.RED);
|
|
m_gameBar.setProgress(1.0);
|
|
m_gameBar.setTitle("Game Over!");
|
|
m_waveBar.setVisible(true);
|
|
m_waveBar.setColor(BarColor.BLUE);
|
|
m_waveBar.setTitle("Returning to lobby...");
|
|
m_waveBar.setProgress(m_countdownProgress);
|
|
m_bombBar.setVisible(false);
|
|
break;
|
|
}
|
|
}
|
|
}
|