From df7daa5925db46f30ddc1565bbe22c96288a1dcb Mon Sep 17 00:00:00 2001 From: Regalis Date: Mon, 24 Apr 2017 19:08:25 +0300 Subject: [PATCH] Fixed incorrectly positioned character info boxes in the info menu --- Subsurface/Source/GameSession/CrewManager.cs | 27 +++++++++---------- Subsurface/Source/Networking/GameClient.cs | 7 +++-- Subsurface/Source/Networking/GameServer.cs | 8 ++---- Subsurface/Source/Networking/NetworkMember.cs | 2 +- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/Subsurface/Source/GameSession/CrewManager.cs b/Subsurface/Source/GameSession/CrewManager.cs index cb410e17d..6fcb6d3ea 100644 --- a/Subsurface/Source/GameSession/CrewManager.cs +++ b/Subsurface/Source/GameSession/CrewManager.cs @@ -212,11 +212,15 @@ namespace Barotrauma GUIListBox crewList = new GUIListBox(new Rectangle(0, y, 280, listBoxHeight), Color.White * 0.7f, "", crewFrame); crewList.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); - crewList.OnSelected = SelectCrewCharacter; + crewList.OnSelected = (component, obj) => + { + SelectCrewCharacter(component.UserData as Character, crewList); + return true; + }; foreach (Character character in crew.FindAll(c => c.TeamID == teamIDs[i])) { - GUIFrame frame = new GUIFrame(new Rectangle(0, 0, 0, 40), Color.Transparent, null, crewList); + GUIFrame frame = new GUIFrame(new Rectangle(0, 0, 0, 40), Color.Transparent, "ListBoxElement", crewList); frame.UserData = character; frame.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f); frame.Color = (GameMain.NetworkMember != null && GameMain.NetworkMember.Character == character) ? Color.Gold * 0.2f : Color.Transparent; @@ -238,29 +242,22 @@ namespace Barotrauma } - protected virtual bool SelectCrewCharacter(GUIComponent component, object obj) + protected virtual bool SelectCrewCharacter(Character character, GUIComponent crewList) { - Character character = obj as Character; if (character == null) return false; - - var crewFrame = component.Parent; - while (crewFrame.Parent!=null) - { - crewFrame = crewFrame.Parent; - } - - GUIComponent existingFrame = crewFrame.FindChild("selectedcharacter"); - if (existingFrame != null) crewFrame.RemoveChild(existingFrame); + + GUIComponent existingFrame = crewList.Parent.FindChild("selectedcharacter"); + if (existingFrame != null) crewList.Parent.RemoveChild(existingFrame); var previewPlayer = new GUIFrame( new Rectangle(0, 0, 230, 300), - new Color(0.0f, 0.0f, 0.0f, 0.8f), Alignment.TopRight, "", crewFrame); + new Color(0.0f, 0.0f, 0.0f, 0.8f), Alignment.TopRight, "", crewList.Parent); previewPlayer.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f); previewPlayer.UserData = "selectedcharacter"; character.Info.CreateInfoFrame(previewPlayer); - if (GameMain.NetworkMember != null) GameMain.NetworkMember.SelectCrewCharacter(component, obj); + if (GameMain.NetworkMember != null) GameMain.NetworkMember.SelectCrewCharacter(character, crewList); return true; } diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 1e0d80211..3d6c0dcd7 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -910,13 +910,12 @@ namespace Barotrauma.Networking } - public override bool SelectCrewCharacter(GUIComponent component, object obj) + public override bool SelectCrewCharacter(Character character, GUIComponent crewFrame) { - var characterFrame = component.Parent.Parent.FindChild("selectedcharacter"); - - Character character = obj as Character; if (character == null) return false; + var characterFrame = crewFrame.FindChild("selectedcharacter"); + if (character != myCharacter) { var client = GameMain.NetworkMember.ConnectedClients.Find(c => c.Character == character); diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index f914c04a7..8fc732759 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -1544,15 +1544,11 @@ namespace Barotrauma.Networking SaveClientPermissions(); } - public override bool SelectCrewCharacter(GUIComponent component, object obj) + public override bool SelectCrewCharacter(Character character, GUIComponent crewFrame) { - base.SelectCrewCharacter(component, obj); - - var characterFrame = component.Parent.Parent.FindChild("selectedcharacter"); - - Character character = obj as Character; if (character == null) return false; + var characterFrame = crewFrame.FindChild("selectedcharacter"); if (character != myCharacter) { var banButton = new GUIButton(new Rectangle(0, 0, 100, 20), "Ban", Alignment.BottomRight, "", characterFrame); diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index 89cbdfbf9..e252ee869 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -427,7 +427,7 @@ namespace Barotrauma.Networking } } - public virtual bool SelectCrewCharacter(GUIComponent component, object obj) + public virtual bool SelectCrewCharacter(Character character, GUIComponent crewFrame) { return false; }