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; } } }