diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj
index f0d80d9ee..411dec235 100644
--- a/Barotrauma/BarotraumaClient/LinuxClient.csproj
+++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj
@@ -192,6 +192,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
index b67af8559..5e2918897 100644
--- a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
+++ b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.8.9.10")]
-[assembly: AssemblyFileVersion("0.8.9.10")]
+[assembly: AssemblyVersion("0.8.10.0")]
+[assembly: AssemblyFileVersion("0.8.10.0")]
diff --git a/Barotrauma/BarotraumaClient/Source/Fonts/ScalableFont.cs b/Barotrauma/BarotraumaClient/Source/Fonts/ScalableFont.cs
index a5ef20967..9443ebcab 100644
--- a/Barotrauma/BarotraumaClient/Source/Fonts/ScalableFont.cs
+++ b/Barotrauma/BarotraumaClient/Source/Fonts/ScalableFont.cs
@@ -390,7 +390,7 @@ namespace Barotrauma
if (text[i] == '\n')
{
currentLineX = 0.0f;
- retVal.Y += baseHeight * 18 / 10;
+ retVal.Y += baseHeight * 1.8f;
continue;
}
uint charIndex = text[i];
diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs
index 55114def0..0c091c992 100644
--- a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs
+++ b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs
@@ -46,15 +46,17 @@ namespace Barotrauma
Header = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), Content.RectTransform),
headerText, textAlignment: Alignment.Center, wrap: true);
+ GUI.Style.Apply(Header, "", this);
Header.RectTransform.MinSize = new Point(0, Header.Rect.Height);
- GUI.Style.Apply(Header, "", this);
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);
+ Text.RectTransform.NonScaledSize = Text.RectTransform.MinSize = Text.RectTransform.MaxSize =
+ new Point(Text.Rect.Width, Text.Rect.Height);
+ Text.RectTransform.IsFixedSize = true;
}
var buttonContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.15f), Content.RectTransform, Anchor.BottomCenter, maxSize: new Point(1000, 50)),
@@ -65,14 +67,18 @@ namespace Barotrauma
};
buttonContainer.RectTransform.NonScaledSize = buttonContainer.RectTransform.MinSize = buttonContainer.RectTransform.MaxSize =
new Point(buttonContainer.Rect.Width, (int)(30 * GUI.Scale));
+ buttonContainer.RectTransform.IsFixedSize = true;
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));
+
+ InnerFrame.RectTransform.NonScaledSize =
+ new Point(InnerFrame.Rect.Width, (int)Math.Max(height / Content.RectTransform.RelativeSize.Y, height + 50));
+ Content.RectTransform.NonScaledSize =
+ new Point(Content.Rect.Width, height);
}
Buttons = new List(buttons.Length);
diff --git a/Barotrauma/BarotraumaClient/Source/GameMain.cs b/Barotrauma/BarotraumaClient/Source/GameMain.cs
index 3eb99f0ed..2741cee63 100644
--- a/Barotrauma/BarotraumaClient/Source/GameMain.cs
+++ b/Barotrauma/BarotraumaClient/Source/GameMain.cs
@@ -749,12 +749,13 @@ namespace Barotrauma
{
var msgBox = new GUIMessageBox(TextManager.Get("EditorDisclaimerTitle"), TextManager.Get("EditorDisclaimerText"));
var linkHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.25f), msgBox.Content.RectTransform)) { Stretch = true, RelativeSpacing = 0.025f };
+ linkHolder.RectTransform.MaxSize = new Point(int.MaxValue, linkHolder.Rect.Height);
List> links = new List>()
- {
- new Pair(TextManager.Get("EditorDisclaimerWikiLink"),TextManager.Get("EditorDisclaimerWikiUrl")),
- new Pair(TextManager.Get("EditorDisclaimerDiscordLink"),TextManager.Get("EditorDisclaimerDiscordUrl")),
- new Pair(TextManager.Get("EditorDisclaimerForumLink"),TextManager.Get("EditorDisclaimerForumUrl")),
- };
+ {
+ new Pair(TextManager.Get("EditorDisclaimerWikiLink"),TextManager.Get("EditorDisclaimerWikiUrl")),
+ new Pair(TextManager.Get("EditorDisclaimerDiscordLink"),TextManager.Get("EditorDisclaimerDiscordUrl")),
+ new Pair(TextManager.Get("EditorDisclaimerForumLink"),TextManager.Get("EditorDisclaimerForumUrl")),
+ };
foreach (var link in links)
{
new GUIButton(new RectTransform(new Vector2(1.0f, 0.2f), linkHolder.RectTransform), link.First, style: "MainMenuGUIButton", textAlignment: Alignment.Left)
@@ -767,10 +768,9 @@ namespace Barotrauma
}
};
}
-
- msgBox.Text.RectTransform.MaxSize = new Point(int.MaxValue, msgBox.Text.Rect.Height);
- linkHolder.RectTransform.MaxSize = new Point(int.MaxValue, linkHolder.Rect.Height);
- msgBox.RectTransform.MinSize = new Point(0, msgBox.Rect.Height + linkHolder.Rect.Height + msgBox.Buttons.First().Rect.Height * 8);
+
+ msgBox.InnerFrame.RectTransform.MinSize = new Point(0,
+ msgBox.InnerFrame.Rect.Height + linkHolder.Rect.Height + msgBox.Content.AbsoluteSpacing * 2 + 10);
Config.EditorDisclaimerShown = true;
Config.SaveNewPlayerConfig();
}
diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
index c888d06cd..5300dbd54 100644
--- a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
+++ b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
@@ -74,17 +74,12 @@ namespace Barotrauma
public CrewManager(XElement element, bool isSinglePlayer)
: this(isSinglePlayer)
{
- if (GameMain.Client != null)
+ if (!isSinglePlayer)
{
- //let the server create random conversations in MP
+ DebugConsole.ThrowError("Cannot add messages to single player chat box in multiplayer mode!\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));
- }
+ if (string.IsNullOrEmpty(text)) { return; }
var characterInfo = new CharacterInfo(subElement);
characterInfos.Add(characterInfo);
@@ -95,6 +90,7 @@ namespace Barotrauma
break;
}
}
+ ChatBox.AddMessage(ChatMessage.Create(senderName, text, messageType, sender));
}
partial void InitProjectSpecific()
@@ -242,24 +238,27 @@ namespace Barotrauma
public IEnumerable GetCharacters()
{
- if (characterInfos.Contains(characterInfo))
- {
- DebugConsole.ThrowError("Tried to add the same character info to CrewManager twice.\n" + Environment.StackTrace);
- return;
- }
+ if (character?.Inventory == null) return null;
- characterInfos.Add(characterInfo);
+ 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();
}
public IEnumerable GetCharacterInfos()
{
- if (character == null)
+ if (GameMain.Client != null)
{
- DebugConsole.ThrowError("Tried to remove a null character from CrewManager.\n" + Environment.StackTrace);
+ //let the server create random conversations in MP
return;
}
- characters.Remove(character);
- if (removeInfo) characterInfos.Remove(character.Info);
+ List availableSpeakers = Character.CharacterList.FindAll(c =>
+ c.AIController is HumanAIController &&
+ !c.IsDead &&
+ c.SpeechImpediment <= 100.0f);
+ pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
}
public void AddCharacter(Character character)
@@ -633,183 +632,9 @@ namespace Barotrauma
{
characterListBox.BarScroll = roundedPos;
}
- 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;
+ soundIcon.Visible = !muted && !mutedLocally;
+ soundIconDisabled.Visible = muted || mutedLocally;
+ soundIconDisabled.ToolTip = TextManager.Get(mutedLocally ? "MutedLocally" : "MutedGlobally");
}
private IEnumerable