diff --git a/MCGalaxy/Commands/Fun/CmdMapSet.cs b/MCGalaxy/Commands/Fun/CmdMapSet.cs index c3f066a08..769c9c82e 100644 --- a/MCGalaxy/Commands/Fun/CmdMapSet.cs +++ b/MCGalaxy/Commands/Fun/CmdMapSet.cs @@ -16,7 +16,6 @@ permissions and limitations under the Licenses. */ using System; -using MCGalaxy.Games.ZS; namespace MCGalaxy.Commands.Fun { public sealed class CmdMapSet : Command { @@ -52,7 +51,7 @@ namespace MCGalaxy.Commands.Fun { p.level.Config.Pillaring = value; Player.Message(p, "Set pillaring allowed to: " + value); - HUD.UpdateAllSecondary(Server.zombie); + Server.zombie.UpdateAllStatus2(); } else if (args[0].CaselessEq("build") || args[0].CaselessEq("buildtype")) { BuildType value = BuildType.Normal; if (!CommandParser.GetEnum(p, args[1], "Build type", ref value)) return; @@ -60,7 +59,7 @@ namespace MCGalaxy.Commands.Fun { p.level.Config.BuildType = value; p.level.UpdateBlockPermissions(); Player.Message(p, "Set build type to: " + value); - HUD.UpdateAllSecondary(Server.zombie); + Server.zombie.UpdateAllStatus2(); } else if (args[0].CaselessEq("minroundtime") || args[0].CaselessEq("minround")) { int time = GetRoundTime(p, args[1]); if (time == 0) return; diff --git a/MCGalaxy/Games/Countdown/CountdownGame.cs b/MCGalaxy/Games/Countdown/CountdownGame.cs index 032846ca7..85434b87f 100644 --- a/MCGalaxy/Games/Countdown/CountdownGame.cs +++ b/MCGalaxy/Games/Countdown/CountdownGame.cs @@ -112,8 +112,7 @@ namespace MCGalaxy.Games { Players.Clear(); Remaining.Clear(); squaresLeft.Clear(); - - MessageAllStatus(); + EndCommon(); } diff --git a/MCGalaxy/Games/IGame.cs b/MCGalaxy/Games/IGame.cs index bfe0d4641..937baa3ec 100644 --- a/MCGalaxy/Games/IGame.cs +++ b/MCGalaxy/Games/IGame.cs @@ -35,6 +35,12 @@ namespace MCGalaxy.Games { public abstract void End(); public abstract void EndRound(); + protected void ResetHUD(Player p) { + p.SendCpeMessage(CpeMessageType.Status1, ""); + p.SendCpeMessage(CpeMessageType.Status2, ""); + p.SendCpeMessage(CpeMessageType.Status3, ""); + } + public void MessageMap(CpeMessageType type, string message) { if (!Running) return; Player[] online = PlayerInfo.Online.Items; diff --git a/MCGalaxy/Games/RoundsGame.cs b/MCGalaxy/Games/RoundsGame.cs index 6d0226ff0..65c5dc4cd 100644 --- a/MCGalaxy/Games/RoundsGame.cs +++ b/MCGalaxy/Games/RoundsGame.cs @@ -147,6 +147,7 @@ namespace MCGalaxy.Games { foreach (Player pl in online) { if (pl.level != Map) continue; TabList.Update(pl, true); + ResetHUD(pl); } if (Map != null) Map.Message(GameName + " %Sgame ended"); diff --git a/MCGalaxy/Games/ZombieSurvival/HUD.cs b/MCGalaxy/Games/ZombieSurvival/HUD.cs deleted file mode 100644 index 53ed22b01..000000000 --- a/MCGalaxy/Games/ZombieSurvival/HUD.cs +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright 2015 MCGalaxy - - Dual-licensed under the Educational Community License, Version 2.0 and - the GNU General Public License, Version 3 (the "Licenses"); you may - not use this file except in compliance with the Licenses. You may - obtain a copy of the Licenses at - - http://www.opensource.org/licenses/ecl2.php - http://www.gnu.org/licenses/gpl-3.0.html - - Unless required by applicable law or agreed to in writing, - software distributed under the Licenses are distributed on an "AS IS" - BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - or implied. See the Licenses for the specific language governing - permissions and limitations under the Licenses. - */ -using System; - -namespace MCGalaxy.Games.ZS { - internal static class HUD { - - internal static void UpdateAllPrimary(ZSGame game) { - int left = (int)(game.RoundEnd - DateTime.UtcNow).TotalSeconds; - string status = FormatPrimary(game, left); - game.MessageMap(CpeMessageType.Status1, status); - } - - internal static void UpdatePrimary(ZSGame game, Player p) { - int left = (int)(game.RoundEnd - DateTime.UtcNow).TotalSeconds; - string status = FormatPrimary(game, left); - p.SendCpeMessage(CpeMessageType.Status1, status); - } - - internal static void UpdateAllSecondary(ZSGame game) { - string status = FormatSecondary(game); - game.MessageMap(CpeMessageType.Status2, status); - } - - internal static void UpdateSecondary(ZSGame game, Player p) { - string status = FormatSecondary(game); - p.SendCpeMessage(CpeMessageType.Status2, status); - } - - internal static void UpdateTertiary(Player p, bool infected) { - string status = FormatTertiary(p, infected); - p.SendCpeMessage(CpeMessageType.Status3, status); - } - - - internal static string GetTimeLeft(int seconds) { - if (seconds < 0) return ""; - if (seconds <= 10) return "10s left"; - if (seconds <= 30) return "30s left"; - if (seconds <= 60) return "1m left"; - return ((seconds + 59) / 60) + "m left"; - } - - internal static void Reset(Player p) { - p.SendCpeMessage(CpeMessageType.Status1, ""); - p.SendCpeMessage(CpeMessageType.Status2, ""); - p.SendCpeMessage(CpeMessageType.Status3, ""); - } - - - static string FormatPrimary(ZSGame game, int seconds) { - string timespan = GetTimeLeft(seconds); - if (timespan.Length > 0) { - return string.Format("&a{0} %Salive %S({2}, map: {1})", - game.Alive.Count, game.Map.MapName, timespan); - } else { - return string.Format("&a{0} %Salive %S(map: {1})", - game.Alive.Count, game.Map.MapName); - } - } - - static string FormatSecondary(ZSGame game) { - string pillar = "%SPillaring " + (game.Map.Config.Pillaring ? "&aYes" : "&cNo"); - string type = "%S, Type is &a" + game.Map.Config.BuildType; - return pillar + type; - } - - static string FormatTertiary(Player p, bool infected) { - string money = "&a" + p.money + " %S" + ServerConfig.Currency; - string state = ", you are " + (infected ? "&cdead" : "&aalive"); - return money + state; - } - } -} diff --git a/MCGalaxy/Games/ZombieSurvival/ZSGame.Plugin.cs b/MCGalaxy/Games/ZombieSurvival/ZSGame.Plugin.cs index 6e8468d7a..d48d51cbf 100644 --- a/MCGalaxy/Games/ZombieSurvival/ZSGame.Plugin.cs +++ b/MCGalaxy/Games/ZombieSurvival/ZSGame.Plugin.cs @@ -25,7 +25,6 @@ using MCGalaxy.Events.EntityEvents; using MCGalaxy.Events.LevelEvents; using MCGalaxy.Events.PlayerEvents; using MCGalaxy.Events.ServerEvents; -using MCGalaxy.Games.ZS; using MCGalaxy.Network; using MCGalaxy.SQL; using BlockID = System.UInt16; @@ -92,7 +91,7 @@ namespace MCGalaxy.Games { void HandleMoneyChanged(Player p) { if (p.level != Map) return; - HUD.UpdateTertiary(p, Get(p).Infected); + UpdateStatus3(p, Get(p).Infected); } void HandleEntitySpawned(Entity entity, ref string name, ref string skin, ref string model, Player dst) { @@ -155,7 +154,7 @@ namespace MCGalaxy.Games { p.SetPrefix(); // TODO: Kinda hacky, not sure if needed if (prevLevel == Map && level != Map) { - HUD.Reset(p); + ResetHUD(p); if (RoundInProgress) PlayerLeftGame(p); } else if (level != Map) { return; } PlayerJoinedGame(p); diff --git a/MCGalaxy/Games/ZombieSurvival/ZSGame.Round.cs b/MCGalaxy/Games/ZombieSurvival/ZSGame.Round.cs index 47f5d97cc..b00539e2b 100644 --- a/MCGalaxy/Games/ZombieSurvival/ZSGame.Round.cs +++ b/MCGalaxy/Games/ZombieSurvival/ZSGame.Round.cs @@ -21,7 +21,6 @@ using System.Collections.Generic; using System.IO; using System.Threading; using MCGalaxy.Commands.World; -using MCGalaxy.Games.ZS; using MCGalaxy.Network; namespace MCGalaxy.Games { @@ -91,9 +90,9 @@ namespace MCGalaxy.Games { } // Update the round time left shown in the top right - string timeLeft = HUD.GetTimeLeft(seconds); + string timeLeft = GetTimeLeft(seconds); if (lastTimeLeft != timeLeft) { - HUD.UpdateAllPrimary(this); + UpdateAllStatus1(); lastTimeLeft = timeLeft; } @@ -244,7 +243,7 @@ namespace MCGalaxy.Games { RoundInProgress = false; RoundStart = DateTime.MinValue; RoundEnd = DateTime.MinValue; - HUD.UpdateAllPrimary(this); + UpdateAllStatus1(); if (!Running) return; Player[] alive = Alive.Items, dead = Infected.Items; @@ -323,8 +322,8 @@ namespace MCGalaxy.Games { pl.SetMoney(pl.money + 1); } - ZSGame.RespawnPlayer(pl); - HUD.UpdateTertiary(pl, data.Infected); + RespawnPlayer(pl); + UpdateStatus3(pl, data.Infected); } } diff --git a/MCGalaxy/Games/ZombieSurvival/ZSGame.cs b/MCGalaxy/Games/ZombieSurvival/ZSGame.cs index 511ffb3ca..93ae6376f 100644 --- a/MCGalaxy/Games/ZombieSurvival/ZSGame.cs +++ b/MCGalaxy/Games/ZombieSurvival/ZSGame.cs @@ -21,7 +21,6 @@ using System.Collections.Generic; using System.IO; using System.Threading; using MCGalaxy.DB; -using MCGalaxy.Games.ZS; using MCGalaxy.SQL; namespace MCGalaxy.Games { @@ -182,8 +181,8 @@ namespace MCGalaxy.Games { data.BlocksLeft = infected ? 25 : 50; ResetInvisibility(p, data); - HUD.UpdateAllPrimary(this); - HUD.UpdateTertiary(p, infected); + UpdateAllStatus1(); + UpdateStatus3(p, infected); } void ResetInvisibility(Player p, ZSData data) { @@ -218,7 +217,6 @@ namespace MCGalaxy.Games { ZSData data = Get(pl); data.ResetState(); ResetInvisibility(pl, data); - HUD.Reset(pl); } EndCommon(); @@ -236,9 +234,9 @@ namespace MCGalaxy.Games { public override void PlayerJoinedGame(Player p) { ZSData data = Get(p); // usually this Get() performs the expensive DB stats read p.SetPrefix(); - HUD.UpdatePrimary(this, p); - HUD.UpdateSecondary(this, p); - HUD.UpdateTertiary(p, data.Infected); + p.SendCpeMessage(CpeMessageType.Status1, FormatStatus1()); + p.SendCpeMessage(CpeMessageType.Status2, FormatStatus2()); + UpdateStatus3(p, data.Infected); if (RoundInProgress) { Player.Message(p, "You joined in the middle of a round. &cYou are now infected!"); @@ -331,6 +329,48 @@ namespace MCGalaxy.Games { return ZSConfig.LevelList.Count == 0 || ZSConfig.LevelList.CaselessContains(name); } + + void UpdateAllStatus1() { + MessageMap(CpeMessageType.Status1, FormatStatus1()); + } + + internal void UpdateAllStatus2() { + MessageMap(CpeMessageType.Status2, FormatStatus2()); + } + + void UpdateStatus3(Player p, bool infected) { + string status = FormatStatus3(p, infected); + p.SendCpeMessage(CpeMessageType.Status3, status); + } + + static string GetTimeLeft(int seconds) { + if (seconds < 0) return ""; + if (seconds <= 10) return "10s left"; + if (seconds <= 30) return "30s left"; + if (seconds <= 60) return "1m left"; + return ((seconds + 59) / 60) + "m left"; + } + + string FormatStatus1() { + int left = (int)(RoundEnd - DateTime.UtcNow).TotalSeconds; + string timespan = GetTimeLeft(left); + + string format = timespan.Length == 0 ? "&a{0} %Salive %S(map: {1})" : + "&a{0} %Salive %S({2}, map: {1})"; + return string.Format(format, Alive.Count, Map.MapName, timespan); + } + + string FormatStatus2() { + string pillar = "%SPillaring " + (Map.Config.Pillaring ? "&aYes" : "&cNo"); + string type = "%S, Type is &a" + Map.Config.BuildType; + return pillar + type; + } + + static string FormatStatus3(Player p, bool infected) { + string money = "&a" + p.money + " %S" + ServerConfig.Currency; + string state = ", you are " + (infected ? "&cdead" : "&aalive"); + return money + state; + } } internal class ZSLevelPicker : LevelPicker { diff --git a/MCGalaxy/MCGalaxy_.csproj b/MCGalaxy/MCGalaxy_.csproj index a1a731bac..c15e5eba7 100644 --- a/MCGalaxy/MCGalaxy_.csproj +++ b/MCGalaxy/MCGalaxy_.csproj @@ -505,7 +505,6 @@ -