Changed GUIMessageBox.MessageBoxes from a queue to a list to make it easier to remove messageboxes that aren't currently visible, fixed clients creating multiple "permissions changed" messageboxes if there's another messagebox on the screen

This commit is contained in:
Regalis
2017-02-18 15:58:46 +02:00
parent 6c8f5b8999
commit 04f86865f7
7 changed files with 27 additions and 51 deletions

View File

@@ -191,16 +191,12 @@ namespace Launcher2
PlayerInput.Update(deltaTime);
if (GUIMessageBox.MessageBoxes.Count > 0)
if (GUIMessageBox.VisibleBox != null)
{
var messageBox = GUIMessageBox.MessageBoxes.Peek();
if (messageBox != null)
{
GUIComponent.ForceMouseOn(messageBox);
messageBox.Update(deltaTime);
return;
}
}
GUIComponent.ForceMouseOn(GUIMessageBox.VisibleBox);
GUIMessageBox.VisibleBox.Update(deltaTime);
return;
}
GUIComponent.ClearUpdateList();
guiRoot.AddToGUIUpdateList();
@@ -223,12 +219,8 @@ namespace Launcher2
spriteBatch.Draw(titleTexture, new Vector2(40.0f, 20.0f), null, Color.White, 0.0f, Vector2.Zero, new Vector2(0.2f, 0.2f), SpriteEffects.None, 0.0f);
guiRoot.Draw(spriteBatch);
if (GUIMessageBox.MessageBoxes.Count > 0)
{
var messageBox = GUIMessageBox.MessageBoxes.Peek();
if (messageBox != null) messageBox.Draw(spriteBatch);
}
if (GUIMessageBox.VisibleBox != null) GUIMessageBox.VisibleBox.Draw(spriteBatch);
spriteBatch.End();
}

View File

@@ -480,11 +480,10 @@ namespace Barotrauma
DrawMessages(spriteBatch, (float)deltaTime);
if (GUIMessageBox.MessageBoxes.Count>0)
if (GUIMessageBox.VisibleBox != null)
{
var messageBox = GUIMessageBox.MessageBoxes.Peek();
if (messageBox != null) messageBox.Draw(spriteBatch);
}
GUIMessageBox.VisibleBox.Draw(spriteBatch);
}
if (pauseMenuOpen)
{
@@ -516,14 +515,10 @@ namespace Barotrauma
GameMain.Config.SettingsFrame.AddToGUIUpdateList();
}
if (GUIMessageBox.MessageBoxes.Count > 0)
if (GUIMessageBox.VisibleBox != null)
{
var messageBox = GUIMessageBox.MessageBoxes.Peek();
if (messageBox != null)
{
messageBox.AddToGUIUpdateList();
}
}
GUIMessageBox.VisibleBox.AddToGUIUpdateList();
}
}
public static void Update(float deltaTime)
@@ -538,14 +533,10 @@ namespace Barotrauma
GameMain.Config.SettingsFrame.Update(deltaTime);
}
if (GUIMessageBox.MessageBoxes.Count > 0)
if (GUIMessageBox.VisibleBox != null)
{
var messageBox = GUIMessageBox.MessageBoxes.Peek();
if (messageBox != null)
{
messageBox.Update(deltaTime);
}
}
GUIMessageBox.VisibleBox.Update(deltaTime);
}
}
public static void AddMessage(string message, Color color, float lifeTime = 3.0f, bool playSound = true)

View File

@@ -5,7 +5,7 @@ namespace Barotrauma
{
public class GUIMessageBox : GUIFrame
{
public static Queue<GUIComponent> MessageBoxes = new Queue<GUIComponent>();
public static List<GUIComponent> MessageBoxes = new List<GUIComponent>();
const int DefaultWidth=400, DefaultHeight=250;
@@ -17,7 +17,7 @@ namespace Barotrauma
public static GUIComponent VisibleBox
{
get { return MessageBoxes.Count==0 ? null : MessageBoxes.Peek(); }
get { return MessageBoxes.Count == 0 ? null : MessageBoxes[0]; }
}
public string Text
@@ -60,7 +60,7 @@ namespace Barotrauma
x += this.Buttons[i].Rect.Width + 20;
}
MessageBoxes.Enqueue(this);
MessageBoxes.Add(this);
}
@@ -68,7 +68,7 @@ namespace Barotrauma
public bool Close(GUIButton button, object obj)
{
if (parent != null) parent.RemoveChild(this);
if (MessageBoxes.Contains(this)) MessageBoxes.Dequeue();
if (MessageBoxes.Contains(this)) MessageBoxes.Remove(this);
return true;
}

View File

@@ -294,7 +294,7 @@ namespace Barotrauma
if (!success)
{
var summaryScreen = GUIMessageBox.MessageBoxes.Peek();
var summaryScreen = GUIMessageBox.VisibleBox;
if (summaryScreen != null)
{
@@ -303,11 +303,11 @@ namespace Barotrauma
var okButton = new GUIButton(new Rectangle(-120, 0, 100, 30), "Load game", Alignment.BottomRight, GUI.Style, summaryScreen);
okButton.OnClicked += GameMain.GameSession.LoadPrevious;
okButton.OnClicked += (GUIButton button, object obj) => { GUIMessageBox.MessageBoxes.Dequeue(); return true; };
okButton.OnClicked += (GUIButton button, object obj) => { GUIMessageBox.MessageBoxes.Remove(GUIMessageBox.VisibleBox); return true; };
var quitButton = new GUIButton(new Rectangle(0, 0, 100, 30), "Quit", Alignment.BottomRight, GUI.Style, summaryScreen);
quitButton.OnClicked += GameMain.LobbyScreen.QuitToMainMenu;
quitButton.OnClicked += (GUIButton button, object obj) => { GUIMessageBox.MessageBoxes.Dequeue(); return true; };
quitButton.OnClicked += (GUIButton button, object obj) => { GUIMessageBox.MessageBoxes.Remove(GUIMessageBox.VisibleBox); return true; };
}
}

View File

@@ -246,9 +246,9 @@ namespace Barotrauma
if (shiftSummary != null)
{
GUIFrame summaryFrame = shiftSummary.CreateSummaryFrame(endMessage);
GUIMessageBox.MessageBoxes.Enqueue(summaryFrame);
GUIMessageBox.MessageBoxes.Add(summaryFrame);
var okButton = new GUIButton(new Rectangle(0, 0, 100, 30), "Ok", Alignment.BottomRight, GUI.Style, summaryFrame.children[0]);
okButton.OnClicked = (GUIButton button, object obj) => { GUIMessageBox.MessageBoxes.Dequeue(); return true; };
okButton.OnClicked = (GUIButton button, object obj) => { GUIMessageBox.MessageBoxes.Remove(summaryFrame); return true; };
}
TaskManager.EndShift();

View File

@@ -587,14 +587,7 @@ namespace Barotrauma.Networking
private void SetPermissions(ClientPermissions newPermissions)
{
if (GUIMessageBox.MessageBoxes.Count > 0)
{
var existingMsgBox = GUIMessageBox.MessageBoxes.Peek();
if (existingMsgBox.UserData as string == "permissions")
{
GUIMessageBox.MessageBoxes.Dequeue();
}
}
GUIMessageBox.MessageBoxes.RemoveAll(mb => mb.UserData as string == "permissions");
string msg = "";
if (newPermissions == ClientPermissions.None)

View File

@@ -1226,7 +1226,7 @@ namespace Barotrauma
if (GUIMessageBox.MessageBoxes.Count>0)
{
var currentMessageBox = GUIMessageBox.MessageBoxes.Peek();
var currentMessageBox = GUIMessageBox.VisibleBox;
if (currentMessageBox != null && currentMessageBox.UserData as string == subName)
{
return false;