diff --git a/Barotrauma/BarotraumaClient/ClientCode.projitems b/Barotrauma/BarotraumaClient/ClientCode.projitems
index 8360a00c7..e2df0a544 100644
--- a/Barotrauma/BarotraumaClient/ClientCode.projitems
+++ b/Barotrauma/BarotraumaClient/ClientCode.projitems
@@ -44,7 +44,6 @@
-
diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs
index 90d96a1dd..bb18cab55 100644
--- a/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs
+++ b/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs
@@ -1551,14 +1551,7 @@ namespace Barotrauma
{
if (Tutorial.Initialized)
{
- if (GameMain.GameSession.GameMode is SinglePlayerCampaign)
- {
- ((SinglePlayerCampaign)GameMain.GameSession.GameMode).ContextualTutorial.Stop();
- }
- else
- {
- ((TutorialMode)GameMain.GameSession.GameMode).Tutorial.Stop();
- }
+ ((TutorialMode)GameMain.GameSession.GameMode).Tutorial.Stop();
}
if (GameSettings.SendUserStatistics)
diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs
index 9735f3b0a..55114def0 100644
--- a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs
+++ b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs
@@ -41,224 +41,19 @@ namespace Barotrauma
InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
GUI.Style.Apply(InnerFrame, "", this);
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null);
- GUI.Style.Apply(InnerFrame, "", this);
-
- Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 };
- Tag = tag;
-
- if (height == 0)
- {
- string wrappedText = ToolBox.WrapText(text, Content.Rect.Width, GUI.Font);
- string[] lines = wrappedText.Split('\n');
- foreach (string line in lines)
- {
- height += (int)GUI.Font.MeasureString(line).Y;
- }
- height += string.IsNullOrWhiteSpace(headerText) ? 220 : 220 - headerHeight;
- }
- InnerFrame.RectTransform.NonScaledSize = new Point(InnerFrame.Rect.Width, height);
-
+
Header = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), Content.RectTransform),
headerText, textAlignment: Alignment.Center, wrap: true);
+ Header.RectTransform.MinSize = new Point(0, Header.Rect.Height);
GUI.Style.Apply(Header, "", this);
- if (height == 0)
+ if (!string.IsNullOrWhiteSpace(text))
{
Text = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), Content.RectTransform),
text, textAlignment: textAlignment, wrap: true);
+ Text.RectTransform.MinSize = new Point(0, Text.Rect.Height);
GUI.Style.Apply(Text, "", this);
}
@@ -268,7 +63,18 @@ namespace Barotrauma
AbsoluteSpacing = 5,
IgnoreLayoutGroups = true
};
-
+ buttonContainer.RectTransform.NonScaledSize = buttonContainer.RectTransform.MinSize = buttonContainer.RectTransform.MaxSize =
+ new Point(buttonContainer.Rect.Width, (int)(30 * GUI.Scale));
+
+ if (height == 0)
+ {
+ height += Header.Rect.Height + Content.AbsoluteSpacing;
+ height += (Text == null ? 0 : Text.Rect.Height) + Content.AbsoluteSpacing;
+ height += buttonContainer.Rect.Height;
+
+ InnerFrame.RectTransform.NonScaledSize = new Point(InnerFrame.Rect.Width, (int)(height / Content.RectTransform.RelativeSize.Y));
+ }
+
Buttons = new List(buttons.Length);
for (int i = 0; i < buttons.Length; i++)
{
diff --git a/Barotrauma/BarotraumaClient/Source/GameMain.cs b/Barotrauma/BarotraumaClient/Source/GameMain.cs
index 542ee3cf1..3eb99f0ed 100644
--- a/Barotrauma/BarotraumaClient/Source/GameMain.cs
+++ b/Barotrauma/BarotraumaClient/Source/GameMain.cs
@@ -722,7 +722,7 @@ namespace Barotrauma
PerformanceCounter.DrawTimeGraph.Update(sw.ElapsedTicks / (float)TimeSpan.TicksPerMillisecond);
}
- public void ShowCampaignDisclaimer()
+ public void ShowCampaignDisclaimer(Action onContinue)
{
var msgBox = new GUIMessageBox(TextManager.Get("CampaignDisclaimerTitle"), TextManager.Get("CampaignDisclaimerText"),
new string[] { TextManager.Get("CampaignRoadMapTitle"), TextManager.Get("OK") });
@@ -731,13 +731,15 @@ namespace Barotrauma
{
var roadMap = new GUIMessageBox(TextManager.Get("CampaignRoadMapTitle"), TextManager.Get("CampaignRoadMapText"),
new string[] { TextManager.Get("Back"), TextManager.Get("OK") });
- roadMap.Buttons[0].OnClicked = (_, __) => { ShowCampaignDisclaimer(); return true; };
roadMap.Buttons[0].OnClicked += roadMap.Close;
+ roadMap.Buttons[0].OnClicked += (_, __) => { ShowCampaignDisclaimer(onContinue); return true; };
roadMap.Buttons[1].OnClicked += roadMap.Close;
+ roadMap.Buttons[1].OnClicked += (_, __) => { onContinue?.Invoke(); return true; };
return true;
};
msgBox.Buttons[0].OnClicked += msgBox.Close;
msgBox.Buttons[1].OnClicked += msgBox.Close;
+ msgBox.Buttons[1].OnClicked += (_, __) => { onContinue?.Invoke(); return true; };
Config.CampaignDisclaimerShown = true;
Config.SaveNewPlayerConfig();
diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
index 5300dbd54..c888d06cd 100644
--- a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
+++ b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
@@ -74,12 +74,17 @@ namespace Barotrauma
public CrewManager(XElement element, bool isSinglePlayer)
: this(isSinglePlayer)
{
- if (!isSinglePlayer)
+ if (GameMain.Client != null)
{
- DebugConsole.ThrowError("Cannot add messages to single player chat box in multiplayer mode!\n" + Environment.StackTrace);
+ //let the server create random conversations in MP
return;
}
- if (string.IsNullOrEmpty(text)) { return; }
+ List availableSpeakers = Character.CharacterList.FindAll(c =>
+ c.AIController is HumanAIController &&
+ !c.IsDead &&
+ c.SpeechImpediment <= 100.0f);
+ pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
+ }
var characterInfo = new CharacterInfo(subElement);
characterInfos.Add(characterInfo);
@@ -90,7 +95,6 @@ namespace Barotrauma
break;
}
}
- ChatBox.AddMessage(ChatMessage.Create(senderName, text, messageType, sender));
}
partial void InitProjectSpecific()
@@ -238,27 +242,24 @@ namespace Barotrauma
public IEnumerable GetCharacters()
{
- if (character?.Inventory == null) return null;
+ if (characterInfos.Contains(characterInfo))
+ {
+ DebugConsole.ThrowError("Tried to add the same character info to CrewManager twice.\n" + Environment.StackTrace);
+ return;
+ }
- var radioItem = character.Inventory.Items.FirstOrDefault(it => it != null && it.GetComponent() != null);
- if (radioItem == null) return null;
- if (requireEquipped && !character.HasEquippedItem(radioItem)) return null;
-
- return radioItem.GetComponent();
+ characterInfos.Add(characterInfo);
}
public IEnumerable GetCharacterInfos()
{
- if (GameMain.Client != null)
+ if (character == null)
{
- //let the server create random conversations in MP
+ DebugConsole.ThrowError("Tried to remove a null character from CrewManager.\n" + Environment.StackTrace);
return;
}
- List availableSpeakers = Character.CharacterList.FindAll(c =>
- c.AIController is HumanAIController &&
- !c.IsDead &&
- c.SpeechImpediment <= 100.0f);
- pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
+ characters.Remove(character);
+ if (removeInfo) characterInfos.Remove(character.Info);
}
public void AddCharacter(Character character)
@@ -632,9 +633,183 @@ namespace Barotrauma
{
characterListBox.BarScroll = roundedPos;
}
- soundIcon.Visible = !muted && !mutedLocally;
- soundIconDisabled.Visible = muted || mutedLocally;
- soundIconDisabled.ToolTip = TextManager.Get(mutedLocally ? "MutedLocally" : "MutedGlobally");
+ var characterArea = new GUIButton(new RectTransform(new Point(characterInfoWidth, frame.Rect.Height), frame.RectTransform, Anchor.CenterLeft), style: "GUITextBox")
+ {
+ UserData = character,
+ Color = frame.Color,
+ SelectedColor = frame.SelectedColor,
+ HoverColor = frame.HoverColor,
+ ToolTip = characterToolTip
+ };
+
+ var soundIcon = new GUIImage(new RectTransform(new Point((int)(characterArea.Rect.Height * 0.5f)), characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(5, 0) },
+ "GUISoundIcon")
+ {
+ UserData = "soundicon",
+ CanBeFocused = false,
+ Visible = true
+ };
+ soundIcon.Color = new Color(soundIcon.Color, 0.0f);
+ new GUIImage(new RectTransform(new Point((int)(characterArea.Rect.Height * 0.5f)), characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(5, 0) },
+ "GUISoundIconDisabled")
+ {
+ UserData = "soundicondisabled",
+ CanBeFocused = true,
+ Visible = false
+ };
+
+ if (isSinglePlayer)
+ {
+ characterArea.OnClicked = CharacterClicked;
+ }
+ else
+ {
+ characterArea.CanBeFocused = false;
+ characterArea.CanBeSelected = false;
+ }
+
+ var characterImage = new GUICustomComponent(new RectTransform(new Point(characterArea.Rect.Height), characterArea.RectTransform, Anchor.CenterLeft),
+ onDraw: (sb, component) => character.Info.DrawIcon(sb, component.Rect.Center.ToVector2(), targetAreaSize: component.Rect.Size.ToVector2()))
+ {
+ CanBeFocused = false,
+ HoverColor = Color.White,
+ SelectedColor = Color.White,
+ ToolTip = characterToolTip
+ };
+
+ var characterName = new GUITextBlock(new RectTransform(new Point(characterArea.Rect.Width - characterImage.Rect.Width - soundIcon.Rect.Width - 10, characterArea.Rect.Height),
+ characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(soundIcon.Rect.Width + 10, 0) },
+ character.Name, textColor: frame.Color, font: GUI.SmallFont, wrap: true)
+ {
+ Color = frame.Color,
+ HoverColor = Color.Transparent,
+ SelectedColor = Color.Transparent,
+ CanBeFocused = false,
+ ToolTip = characterToolTip,
+ AutoScale = true
+ };
+
+ //---------------- order buttons ----------------
+
+ var orderButtonFrame = new GUILayoutGroup(new RectTransform(new Point(100, frame.Rect.Height), frame.RectTransform)
+ { AbsoluteOffset = new Point(characterInfoWidth + spacing, 0) },
+ isHorizontal: true, childAnchor: Anchor.CenterLeft)
+ {
+ AbsoluteSpacing = (int)(10 * GUI.Scale),
+ UserData = "orderbuttons",
+ CanBeFocused = false
+ };
+
+ //listbox for holding the orders inappropriate for this character
+ //(so we can easily toggle their visibility)
+ var wrongOrderList = new GUIListBox(new RectTransform(new Point(50, orderButtonFrame.Rect.Height), orderButtonFrame.RectTransform), isHorizontal: true, style: null)
+ {
+ ScrollBarEnabled = false,
+ ScrollBarVisible = false,
+ Enabled = false,
+ Spacing = spacing,
+ ClampMouseRectToParent = false
+ };
+ wrongOrderList.Content.ClampMouseRectToParent = false;
+
+ for (int i = 0; i < orders.Count; i++)
+ {
+ var order = orders[i];
+ if (order.TargetAllCharacters) continue;
+
+ RectTransform btnParent = (i >= correctOrderCount + neutralOrderCount) ?
+ wrongOrderList.Content.RectTransform :
+ orderButtonFrame.RectTransform;
+
+ var btn = new GUIButton(new RectTransform(new Point(iconSize, iconSize), btnParent, Anchor.CenterLeft),
+ style: null)
+ {
+ UserData = order
+ };
+
+ new GUIFrame(new RectTransform(new Vector2(1.5f), btn.RectTransform, Anchor.Center), "OuterGlow")
+ {
+ Color = Color.Lerp(order.Color, frame.Color, 0.5f) * 0.8f,
+ HoverColor = Color.Lerp(order.Color, frame.Color, 0.5f) * 1.0f,
+ PressedColor = Color.Lerp(order.Color, frame.Color, 0.5f) * 0.6f,
+ UserData = "selected",
+ CanBeFocused = false,
+ Visible = false
+ };
+
+ var img = new GUIImage(new RectTransform(Vector2.One, btn.RectTransform), order.Prefab.SymbolSprite);
+ img.Scale = iconSize / (float)img.SourceRect.Width;
+ img.Color = Color.Lerp(order.Color, frame.Color, 0.5f);
+ img.ToolTip = order.Name;
+ img.HoverColor = Color.Lerp(img.Color, Color.White, 0.5f);
+
+ btn.OnClicked += (GUIButton button, object userData) =>
+ {
+ if (Character.Controlled == null || Character.Controlled.SpeechImpediment >= 100.0f) return false;
+
+ if (btn.GetChildByUserData("selected").Visible)
+ {
+ SetCharacterOrder(character, Order.PrefabList.Find(o => o.AITag == "dismissed"), null, Character.Controlled);
+ }
+ else
+ {
+ if (order.ItemComponentType != null || order.ItemIdentifiers.Length > 0 || order.Options.Length > 1)
+ {
+ CreateOrderTargetFrame(button, character, order);
+ }
+ else
+ {
+ SetCharacterOrder(character, order, null, Character.Controlled);
+ }
+ }
+ return true;
+ };
+ btn.UserData = order;
+ btn.ToolTip = order.Name;
+
+ //divider between different groups of orders
+ if (i == correctOrderCount - 1 || i == correctOrderCount + neutralOrderCount - 1)
+ {
+ //TODO: divider sprite
+ new GUIFrame(new RectTransform(new Point(8, iconSize), orderButtonFrame.RectTransform), style: "GUIButton");
+ }
+ }
+
+ var toggleWrongOrderBtn = new GUIButton(new RectTransform(new Point((int)(30 * GUI.Scale), wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform),
+ "", style: "UIToggleButton")
+ {
+ UserData = "togglewrongorder",
+ CanBeFocused = false
+ };
+
+ wrongOrderList.RectTransform.NonScaledSize = new Point(
+ wrongOrderList.Content.Children.Sum(c => c.Rect.Width + wrongOrderList.Spacing),
+ wrongOrderList.RectTransform.NonScaledSize.Y);
+ wrongOrderList.RectTransform.SetAsLastChild();
+
+ new GUIFrame(new RectTransform(new Point(
+ wrongOrderList.Rect.Width - toggleWrongOrderBtn.Rect.Width - wrongOrderList.Spacing * 2,
+ wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform),
+ style: null)
+ {
+ CanBeFocused = false
+ };
+
+ //scale to fit the content
+ orderButtonFrame.RectTransform.NonScaledSize = new Point(
+ orderButtonFrame.Children.Sum(c => c.Rect.Width + orderButtonFrame.AbsoluteSpacing),
+ orderButtonFrame.RectTransform.NonScaledSize.Y);
+
+ frame.RectTransform.NonScaledSize = new Point(
+ characterInfoWidth + spacing + (orderButtonFrame.Rect.Width - wrongOrderList.Rect.Width),
+ frame.RectTransform.NonScaledSize.Y);
+
+ characterListBox.RectTransform.NonScaledSize = new Point(
+ characterListBox.Content.Children.Max(c => c.Rect.Width) + wrongOrderList.Rect.Width,
+ characterListBox.RectTransform.NonScaledSize.Y);
+ characterListBox.Content.RectTransform.NonScaledSize = characterListBox.RectTransform.NonScaledSize;
+ characterListBox.UpdateScrollBarSize();
+ return frame;
}
private IEnumerable