diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
index 509675c09..02427dc57 100644
--- a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
+++ b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs
@@ -68,14 +68,81 @@ namespace Barotrauma
Point scrollButtonSize = new Point((int)(200 * GUI.Scale), (int)(30 * GUI.Scale));
- var characterInfo = new CharacterInfo(subElement);
- characterInfos.Add(characterInfo);
- foreach (XElement invElement in subElement.Elements())
+ crewArea = new GUIFrame(HUDLayoutSettings.ToRectTransform(HUDLayoutSettings.CrewArea, guiFrame.RectTransform), "", Color.Transparent)
+ {
+ CanBeFocused = false
+ };
+ toggleCrewButton = new GUIButton(new RectTransform(new Point((int)(30 * GUI.Scale), HUDLayoutSettings.CrewArea.Height), guiFrame.RectTransform)
+ { AbsoluteOffset = HUDLayoutSettings.CrewArea.Location },
+ "", style: "UIToggleButton");
+ toggleCrewButton.OnClicked += (GUIButton btn, object userdata) =>
+ {
+ toggleCrewAreaOpen = !toggleCrewAreaOpen;
+ foreach (GUIComponent child in btn.Children)
{
- if (invElement.Name.ToString().ToLowerInvariant() != "inventory") continue;
- characterInfo.InventoryData = invElement;
- break;
+ child.SpriteEffects = toggleCrewAreaOpen ? SpriteEffects.None : SpriteEffects.FlipHorizontally;
}
+ return true;
+ };
+
+ characterListBox = new GUIListBox(new RectTransform(new Point(100, (int)(crewArea.Rect.Height - scrollButtonSize.Y * 1.6f)), crewArea.RectTransform, Anchor.CenterLeft), false, Color.Transparent, null)
+ {
+ //Spacing = (int)(3 * GUI.Scale),
+ ScrollBarEnabled = false,
+ ScrollBarVisible = false,
+ CanBeFocused = false
+ };
+
+ scrollButtonUp = new GUIButton(new RectTransform(scrollButtonSize, crewArea.RectTransform, Anchor.TopLeft, Pivot.TopLeft), "", Alignment.Center, "GUIButtonVerticalArrow")
+ {
+ Visible = false,
+ UserData = -1,
+ OnClicked = ScrollCharacterList
+ };
+ scrollButtonDown = new GUIButton(new RectTransform(scrollButtonSize, crewArea.RectTransform, Anchor.BottomLeft, Pivot.BottomLeft), "", Alignment.Center, "GUIButtonVerticalArrow")
+ {
+ Visible = false,
+ UserData = 1,
+ OnClicked = ScrollCharacterList
+ };
+ scrollButtonDown.Children.ForEach(c => c.SpriteEffects = SpriteEffects.FlipVertically);
+
+ if (isSinglePlayer)
+ {
+ chatBox = new ChatBox(guiFrame, isSinglePlayer: true)
+ {
+ OnEnterMessage = (textbox, text) =>
+ {
+ if (Character.Controlled?.Info == null)
+ {
+ textbox.Deselect();
+ textbox.Text = "";
+ return true;
+ }
+
+ textbox.TextColor = ChatMessage.MessageColor[(int)ChatMessageType.Default];
+
+ if (!string.IsNullOrWhiteSpace(text))
+ {
+ string msgCommand = ChatMessage.GetChatMessageCommand(text, out string msg);
+ AddSinglePlayerChatMessage(
+ Character.Controlled.Info.Name,
+ msg,
+ ((msgCommand == "r" || msgCommand == "radio") && ChatMessage.CanUseRadio(Character.Controlled)) ? ChatMessageType.Radio : ChatMessageType.Default,
+ Character.Controlled);
+ var headset = GetHeadset(Character.Controlled, true);
+ if (headset != null && headset.CanTransmit())
+ {
+ headset.TransmitSignal(stepsTaken: 0, signal: msg, source: headset.Item, sender: Character.Controlled, sendToChat: false);
+ }
+ }
+ textbox.Deselect();
+ textbox.Text = "";
+ return true;
+ }
+ };
+
+ chatBox.InputBox.OnTextChanged += chatBox.TypingChatMessage;
}
var reports = Order.PrefabList.FindAll(o => o.TargetAllCharacters && o.SymbolSprite != null);
@@ -114,12 +181,14 @@ namespace Barotrauma
Visible = false
};
- var img = new GUIImage(new RectTransform(Vector2.One, btn.RectTransform), order.Prefab.SymbolSprite, scaleToFit: true)
+ var characterInfo = new CharacterInfo(subElement);
+ characterInfos.Add(characterInfo);
+ foreach (XElement invElement in subElement.Elements())
{
- Color = order.Color,
- HoverColor = Color.Lerp(order.Color, Color.White, 0.5f),
- ToolTip = order.Name
- };
+ if (invElement.Name.ToString().ToLowerInvariant() != "inventory") continue;
+ characterInfo.InventoryData = invElement;
+ break;
+ }
}
screenResolution = new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight);
diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/ItemComponent.cs
index cc9829018..e5c8ea551 100644
--- a/Barotrauma/BarotraumaClient/Source/Items/Components/ItemComponent.cs
+++ b/Barotrauma/BarotraumaClient/Source/Items/Components/ItemComponent.cs
@@ -175,6 +175,63 @@ namespace Barotrauma.Items.Components
}
}
}
+
+ public void ApplyTo(RectTransform target)
+ {
+ if (RelativeOffset.HasValue)
+ {
+ target.RelativeOffset = RelativeOffset.Value;
+ }
+ else if (AbsoluteOffset.HasValue)
+ {
+ target.AbsoluteOffset = AbsoluteOffset.Value;
+ }
+ if (RelativeSize.HasValue)
+ {
+ target.RelativeSize = RelativeSize.Value;
+ }
+ else if (AbsoluteSize.HasValue)
+ {
+ target.NonScaledSize = AbsoluteSize.Value;
+ }
+ if (Anchor.HasValue)
+ {
+ target.Anchor = Anchor.Value;
+ }
+ if (Pivot.HasValue)
+ {
+ target.Pivot = Pivot.Value;
+ }
+ else
+ {
+ target.Pivot = RectTransform.MatchPivotToAnchor(target.Anchor);
+ }
+ target.RecalculateChildren(true, true);
+ }
+ }
+
+ public GUIFrame GuiFrame { get; protected set; }
+
+ [Serialize(false, false)]
+ public bool AllowUIOverlap
+ {
+ get;
+ set;
+ }
+
+ private ItemComponent linkToUIComponent;
+ [Serialize("", false)]
+ public string LinkUIToComponent
+ {
+ get;
+ set;
+ }
+
+ [Serialize(0, false)]
+ public int HudPriority
+ {
+ get;
+ private set;
}
private bool shouldMuffleLooping;
diff --git a/Barotrauma/BarotraumaShared/SharedContent.projitems b/Barotrauma/BarotraumaShared/SharedContent.projitems
index 22a728bff..141ff1db9 100644
--- a/Barotrauma/BarotraumaShared/SharedContent.projitems
+++ b/Barotrauma/BarotraumaShared/SharedContent.projitems
@@ -1913,6 +1913,18 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
@@ -2470,9 +2482,6 @@
PreserveNewest
-
- PreserveNewest
-
PreserveNewest