Faction Test v1.0.1.0
This commit is contained in:
@@ -516,7 +516,7 @@ namespace Barotrauma
|
||||
new GUIButton(new RectTransform(size, frame.RectTransform) { RelativeOffset = new Vector2(0.025f) }, style: null)
|
||||
{
|
||||
Enabled = CanHire(characterInfo),
|
||||
ToolTip = TextManager.GetWithVariable("campaigncrew.givenicknametooltip", "[mouseprimary]", TextManager.Get($"input.{(PlayerInput.MouseButtonsSwapped() ? "rightmouse" : "leftmouse")}")),
|
||||
ToolTip = TextManager.GetWithVariable("campaigncrew.givenicknametooltip", "[mouseprimary]", PlayerInput.PrimaryMouseLabel),
|
||||
UserData = characterInfo,
|
||||
OnClicked = CreateRenamingComponent
|
||||
};
|
||||
|
||||
@@ -106,6 +106,11 @@ namespace Barotrauma
|
||||
public static float VerticalAspectRatio => GameMain.GraphicsHeight / (float)GameMain.GraphicsWidth;
|
||||
public static float RelativeHorizontalAspectRatio => HorizontalAspectRatio / (ReferenceResolution.X / ReferenceResolution.Y);
|
||||
public static float RelativeVerticalAspectRatio => VerticalAspectRatio / (ReferenceResolution.Y / ReferenceResolution.X);
|
||||
/// <summary>
|
||||
/// A horizontal scaling factor for low aspect ratios (small width relative to height)
|
||||
/// </summary>
|
||||
public static float AspectRatioAdjustment => HorizontalAspectRatio < 1.4f ? (1.0f - (1.4f - HorizontalAspectRatio)) : 1.0f;
|
||||
|
||||
public static bool IsUltrawide => HorizontalAspectRatio > 2.0f;
|
||||
|
||||
public static int UIWidth
|
||||
@@ -2586,8 +2591,11 @@ namespace Barotrauma
|
||||
|
||||
public static void AddMessage(string message, Color color, float? lifeTime = null, bool playSound = true, GUIFont font = null)
|
||||
{
|
||||
if (messages.Any(msg => msg.Text == message)) { return; }
|
||||
messages.Add(new GUIMessage(message, color, lifeTime ?? MathHelper.Clamp(message.Length / 5.0f, 3.0f, 10.0f), font ?? GUIStyle.LargeFont));
|
||||
lock (mutex)
|
||||
{
|
||||
if (messages.Any(msg => msg.Text == message)) { return; }
|
||||
messages.Add(new GUIMessage(message, color, lifeTime ?? MathHelper.Clamp(message.Length / 5.0f, 3.0f, 10.0f), font ?? GUIStyle.LargeFont));
|
||||
}
|
||||
if (playSound) { SoundPlayer.PlayUISound(GUISoundType.UIMessage); }
|
||||
}
|
||||
|
||||
@@ -2597,34 +2605,37 @@ namespace Barotrauma
|
||||
|
||||
var newMessage = new GUIMessage(message, color, pos, velocity, lifeTime, Alignment.Center, GUIStyle.Font, sub: sub);
|
||||
if (playSound) { SoundPlayer.PlayUISound(soundType); }
|
||||
bool overlapFound = true;
|
||||
int tries = 0;
|
||||
while (overlapFound)
|
||||
{
|
||||
overlapFound = false;
|
||||
foreach (var otherMessage in messages)
|
||||
{
|
||||
float xDiff = otherMessage.Pos.X - newMessage.Pos.X;
|
||||
if (Math.Abs(xDiff) > (newMessage.Size.X + otherMessage.Size.X) / 2) { continue; }
|
||||
float yDiff = otherMessage.Pos.Y - newMessage.Pos.Y;
|
||||
if (Math.Abs(yDiff) > (newMessage.Size.Y + otherMessage.Size.Y) / 2) { continue; }
|
||||
Vector2 moveDir = -(new Vector2(xDiff, yDiff) + Rand.Vector(1.0f));
|
||||
if (moveDir.LengthSquared() > 0.0001f)
|
||||
{
|
||||
moveDir = Vector2.Normalize(moveDir);
|
||||
}
|
||||
else
|
||||
{
|
||||
moveDir = Rand.Vector(1.0f);
|
||||
}
|
||||
moveDir.Y = -Math.Abs(moveDir.Y);
|
||||
newMessage.Pos -= Vector2.UnitY * 10;
|
||||
}
|
||||
tries++;
|
||||
if (tries > 20) { break; }
|
||||
}
|
||||
|
||||
messages.Add(newMessage);
|
||||
lock (mutex)
|
||||
{
|
||||
bool overlapFound = true;
|
||||
int tries = 0;
|
||||
while (overlapFound)
|
||||
{
|
||||
overlapFound = false;
|
||||
foreach (var otherMessage in messages)
|
||||
{
|
||||
float xDiff = otherMessage.Pos.X - newMessage.Pos.X;
|
||||
if (Math.Abs(xDiff) > (newMessage.Size.X + otherMessage.Size.X) / 2) { continue; }
|
||||
float yDiff = otherMessage.Pos.Y - newMessage.Pos.Y;
|
||||
if (Math.Abs(yDiff) > (newMessage.Size.Y + otherMessage.Size.Y) / 2) { continue; }
|
||||
Vector2 moveDir = -(new Vector2(xDiff, yDiff) + Rand.Vector(1.0f));
|
||||
if (moveDir.LengthSquared() > 0.0001f)
|
||||
{
|
||||
moveDir = Vector2.Normalize(moveDir);
|
||||
}
|
||||
else
|
||||
{
|
||||
moveDir = Rand.Vector(1.0f);
|
||||
}
|
||||
moveDir.Y = -Math.Abs(moveDir.Y);
|
||||
newMessage.Pos -= Vector2.UnitY * 10;
|
||||
}
|
||||
tries++;
|
||||
if (tries > 20) { break; }
|
||||
}
|
||||
messages.Add(newMessage);
|
||||
}
|
||||
}
|
||||
|
||||
public static void ClearMessages()
|
||||
|
||||
@@ -8,9 +8,7 @@ namespace Barotrauma
|
||||
{
|
||||
public class GUICanvas : RectTransform
|
||||
{
|
||||
private static readonly object mutex = new object();
|
||||
|
||||
protected GUICanvas() : base(size, parent: null) { }
|
||||
protected GUICanvas() : base(Size, parent: null) { }
|
||||
|
||||
private static GUICanvas _instance;
|
||||
public static GUICanvas Instance
|
||||
@@ -33,7 +31,7 @@ namespace Barotrauma
|
||||
//GUICanvas stores the children as weak references, to allow elements that we no longer need to get garbage collected
|
||||
private readonly List<WeakReference<RectTransform>> childrenWeakRef = new List<WeakReference<RectTransform>>();
|
||||
|
||||
private static Vector2 size => new Vector2(GameMain.GraphicsWidth / (float)GUI.UIWidth, 1f);
|
||||
private static Vector2 Size => new Vector2(GameMain.GraphicsWidth / (float)GUI.UIWidth, 1f);
|
||||
|
||||
protected override Rectangle NonScaledUIRect => UIRect;
|
||||
|
||||
@@ -41,25 +39,27 @@ namespace Barotrauma
|
||||
|
||||
private static void OnChildrenChanged(RectTransform _)
|
||||
{
|
||||
lock (mutex)
|
||||
CrossThread.RequestExecutionOnMainThread(RefreshChildren);
|
||||
}
|
||||
|
||||
private static void RefreshChildren()
|
||||
{
|
||||
//add weak reference if we don't have one yet
|
||||
foreach (var child in _instance.Children)
|
||||
{
|
||||
//add weak reference if we don't have one yet
|
||||
foreach (var child in _instance.Children)
|
||||
if (!_instance.childrenWeakRef.Any(c => c.TryGetTarget(out var existingChild) && existingChild == child))
|
||||
{
|
||||
if (!_instance.childrenWeakRef.Any(c => c.TryGetTarget(out var existingChild) && existingChild == child))
|
||||
{
|
||||
_instance.childrenWeakRef.Add(new WeakReference<RectTransform>(child));
|
||||
}
|
||||
_instance.childrenWeakRef.Add(new WeakReference<RectTransform>(child));
|
||||
}
|
||||
//get rid of strong references
|
||||
_instance.children.Clear();
|
||||
//remove dead children
|
||||
for (int i = _instance.childrenWeakRef.Count - 2; i >= 0; i--)
|
||||
}
|
||||
//get rid of strong references
|
||||
_instance.children.Clear();
|
||||
//remove dead children
|
||||
for (int i = _instance.childrenWeakRef.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (!_instance.childrenWeakRef[i].TryGetTarget(out var child) || child.Parent != _instance)
|
||||
{
|
||||
if (!_instance.childrenWeakRef[i].TryGetTarget(out var child) || child.Parent != _instance)
|
||||
{
|
||||
_instance.childrenWeakRef.RemoveAt(i);
|
||||
}
|
||||
_instance.childrenWeakRef.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -67,7 +67,7 @@ namespace Barotrauma
|
||||
// Turn public, if there is a need to call this manually.
|
||||
private static void RecalculateSize()
|
||||
{
|
||||
Vector2 recalculatedSize = size;
|
||||
Vector2 recalculatedSize = Size;
|
||||
|
||||
// Scale children that are supposed to encompass the whole screen so that they are properly scaled on ultrawide as well
|
||||
for (int i = 0; i < Instance.childrenWeakRef.Count; i++)
|
||||
@@ -109,7 +109,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
Instance.Resize(size, resizeChildren: true);
|
||||
Instance.Resize(Size, resizeChildren: true);
|
||||
Instance.GetAllChildren().Select(c => c.GUIComponent as GUITextBlock).ForEach(t => t?.SetTextPos());
|
||||
_instance.children.Clear();
|
||||
}
|
||||
|
||||
@@ -1143,14 +1143,13 @@ namespace Barotrauma
|
||||
bool wrap = element.GetAttributeBool("wrap", true);
|
||||
Alignment alignment =
|
||||
element.GetAttributeEnum("alignment", text.Contains('\n') ? Alignment.Left : Alignment.Center);
|
||||
GUIFont font;
|
||||
if (!GUIStyle.Fonts.TryGetValue(element.GetAttributeIdentifier("font", "Font"), out font))
|
||||
if (!GUIStyle.Fonts.TryGetValue(element.GetAttributeIdentifier("font", "Font"), out GUIFont font))
|
||||
{
|
||||
font = GUIStyle.Font;
|
||||
}
|
||||
|
||||
var textBlock = new GUITextBlock(RectTransform.Load(element, parent),
|
||||
text, color, font, alignment, wrap: wrap, style: style)
|
||||
RichString.Rich(text), color, font, alignment, wrap: wrap, style: style)
|
||||
{
|
||||
TextScale = scale
|
||||
};
|
||||
|
||||
@@ -244,18 +244,16 @@ namespace Barotrauma
|
||||
return parentHierarchy.Last();
|
||||
}
|
||||
|
||||
public void AddItem(LocalizedString text, object userData = null, LocalizedString toolTip = null)
|
||||
public GUIComponent AddItem(LocalizedString text, object userData = null, LocalizedString toolTip = null, Color? color = null, Color? textColor = null)
|
||||
{
|
||||
toolTip ??= "";
|
||||
if (selectMultiple)
|
||||
{
|
||||
var frame = new GUIFrame(new RectTransform(new Point(button.Rect.Width, button.Rect.Height), listBox.Content.RectTransform)
|
||||
{ IsFixedSize = false }, style: "ListBoxElement")
|
||||
var frame = new GUIFrame(new RectTransform(new Point(button.Rect.Width, button.Rect.Height), listBox.Content.RectTransform) { IsFixedSize = false }, style: "ListBoxElement", color: color)
|
||||
{
|
||||
UserData = userData,
|
||||
ToolTip = toolTip
|
||||
};
|
||||
|
||||
new GUITickBox(new RectTransform(new Vector2(1.0f, 0.8f), frame.RectTransform, anchor: Anchor.CenterLeft) { MaxSize = new Point(int.MaxValue, (int)(button.Rect.Height * 0.8f)) }, text)
|
||||
{
|
||||
UserData = userData,
|
||||
@@ -275,7 +273,7 @@ namespace Barotrauma
|
||||
foreach (GUIComponent child in ListBox.Content.Children)
|
||||
{
|
||||
var tickBox = child.GetChild<GUITickBox>();
|
||||
if (tickBox.Selected)
|
||||
if (tickBox is { Selected: true })
|
||||
{
|
||||
selectedDataMultiple.Add(child.UserData);
|
||||
selectedIndexMultiple.Add(i);
|
||||
@@ -289,11 +287,11 @@ namespace Barotrauma
|
||||
return true;
|
||||
}
|
||||
};
|
||||
return frame;
|
||||
}
|
||||
else
|
||||
{
|
||||
new GUITextBlock(new RectTransform(new Point(button.Rect.Width, button.Rect.Height), listBox.Content.RectTransform)
|
||||
{ IsFixedSize = false }, text, style: "ListBoxElement")
|
||||
return new GUITextBlock(new RectTransform(new Point(button.Rect.Width, button.Rect.Height), listBox.Content.RectTransform) { IsFixedSize = false }, text, style: "ListBoxElement", color: color, textColor: textColor)
|
||||
{
|
||||
UserData = userData,
|
||||
ToolTip = toolTip
|
||||
@@ -323,7 +321,7 @@ namespace Barotrauma
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(component is GUITextBlock textBlock))
|
||||
if (component is not GUITextBlock textBlock)
|
||||
{
|
||||
textBlock = component.GetChild<GUITextBlock>();
|
||||
if (textBlock is null && !AllowNonText) { return false; }
|
||||
|
||||
@@ -1059,6 +1059,7 @@ namespace Barotrauma
|
||||
|
||||
GUIComponent child = Content.GetChild(childIndex);
|
||||
if (child is null) { return; }
|
||||
if (!child.Enabled) { return; }
|
||||
|
||||
bool wasSelected = true;
|
||||
if (OnSelected != null)
|
||||
|
||||
@@ -236,7 +236,8 @@ namespace Barotrauma
|
||||
new GUIButton(new RectTransform(new Vector2(0.3f, 0.5f), buttonContainer.RectTransform, Anchor.Center),
|
||||
style: "UIToggleButton")
|
||||
{
|
||||
OnClicked = Close
|
||||
OnClicked = Close,
|
||||
UserData = UIHighlightAction.ElementId.MessageBoxCloseButton
|
||||
}
|
||||
};
|
||||
InputType? closeInput = null;
|
||||
|
||||
@@ -313,7 +313,9 @@ namespace Barotrauma
|
||||
break;
|
||||
}
|
||||
|
||||
RectTransform.MinSize = TextBox.RectTransform.MinSize;
|
||||
RectTransform.MinSize = new Point(
|
||||
Math.Max(rectT.MinSize.X, TextBox.RectTransform.MinSize.X),
|
||||
Math.Max(rectT.MinSize.Y, TextBox.RectTransform.MinSize.Y));
|
||||
LayoutGroup.Recalculate();
|
||||
}
|
||||
|
||||
|
||||
@@ -140,6 +140,7 @@ namespace Barotrauma
|
||||
public readonly static GUIColor HealthBarColorLow = new GUIColor("HealthBarColorLow");
|
||||
public readonly static GUIColor HealthBarColorMedium = new GUIColor("HealthBarColorMedium");
|
||||
public readonly static GUIColor HealthBarColorHigh = new GUIColor("HealthBarColorHigh");
|
||||
public readonly static GUIColor HealthBarColorPoisoned = new GUIColor("HealthBarColorPoisoned");
|
||||
|
||||
public static Point ItemFrameMargin
|
||||
{
|
||||
|
||||
@@ -438,7 +438,7 @@ namespace Barotrauma
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((PlayerInput.LeftButtonClicked() || PlayerInput.RightButtonClicked()) && selected)
|
||||
if ((PlayerInput.PrimaryMouseButtonClicked() || PlayerInput.SecondaryMouseButtonClicked()) && selected)
|
||||
{
|
||||
if (!mouseHeldInside) { Deselect(); }
|
||||
mouseHeldInside = false;
|
||||
|
||||
@@ -143,14 +143,13 @@ namespace Barotrauma
|
||||
}
|
||||
int healthBarHeight = (int)(50f * GUI.Scale);
|
||||
HealthBarArea = new Rectangle(BottomRightInfoArea.Right - healthBarWidth + (int)Math.Floor(1 / GUI.Scale), BottomRightInfoArea.Y - healthBarHeight + GUI.IntScale(10), healthBarWidth, healthBarHeight);
|
||||
HealthBarAfflictionArea = new Rectangle(HealthBarArea.X, HealthBarArea.Y - Padding - afflictionAreaHeight, HealthBarArea.Width, afflictionAreaHeight);
|
||||
HealthBarAfflictionArea = new Rectangle(HealthBarArea.X, HealthBarArea.Y - Padding - afflictionAreaHeight, HealthBarArea.Width, afflictionAreaHeight);
|
||||
|
||||
|
||||
int messageAreaWidth = GameMain.GraphicsWidth / 3;
|
||||
MessageAreaTop = new Rectangle((GameMain.GraphicsWidth - messageAreaWidth) / 2, ButtonAreaTop.Bottom + ButtonAreaTop.Height, messageAreaWidth, ButtonAreaTop.Height);
|
||||
|
||||
bool isFourByThree = GUI.IsFourByThree();
|
||||
int chatBoxWidth = !isFourByThree ? (int)(475 * GUI.Scale) : (int)(375 * GUI.Scale);
|
||||
int chatBoxWidth = (int)(475 * GUI.Scale * GUI.AspectRatioAdjustment);
|
||||
int chatBoxHeight = (int)Math.Max(GameMain.GraphicsHeight * 0.25f, 150);
|
||||
ChatBoxArea = new Rectangle(Padding, GameMain.GraphicsHeight - Padding - chatBoxHeight, chatBoxWidth, chatBoxHeight);
|
||||
|
||||
@@ -187,19 +186,26 @@ namespace Barotrauma
|
||||
|
||||
public static void Draw(SpriteBatch spriteBatch)
|
||||
{
|
||||
DrawRectangle(ButtonAreaTop, Color.White * 0.5f);
|
||||
DrawRectangle(TutorialObjectiveListArea, GUIStyle.Blue * 0.5f);
|
||||
DrawRectangle(MessageAreaTop, GUIStyle.Orange * 0.5f);
|
||||
DrawRectangle(CrewArea, Color.Blue * 0.5f);
|
||||
DrawRectangle(ChatBoxArea, Color.Cyan * 0.5f);
|
||||
DrawRectangle(HealthBarArea, Color.Red * 0.5f);
|
||||
DrawRectangle(HealthBarAfflictionArea, Color.Red * 0.5f);
|
||||
DrawRectangle(InventoryAreaLower, Color.Yellow * 0.5f);
|
||||
DrawRectangle(HealthWindowAreaLeft, Color.Red * 0.5f);
|
||||
DrawRectangle(BottomRightInfoArea, Color.Green * 0.5f);
|
||||
DrawRectangle(ItemHUDArea, Color.Magenta * 0.3f);
|
||||
DrawRectangle(nameof(ButtonAreaTop), ButtonAreaTop, Color.White * 0.5f);
|
||||
DrawRectangle(nameof(TutorialObjectiveListArea), TutorialObjectiveListArea, GUIStyle.Blue * 0.5f);
|
||||
DrawRectangle(nameof(MessageAreaTop), MessageAreaTop, GUIStyle.Orange * 0.5f);
|
||||
DrawRectangle(nameof(CrewArea), CrewArea, Color.Blue * 0.5f);
|
||||
DrawRectangle(nameof(ChatBoxArea), ChatBoxArea, Color.Cyan * 0.5f);
|
||||
DrawRectangle(nameof(HealthBarArea), HealthBarArea, Color.Red * 0.5f);
|
||||
DrawRectangle(nameof(HealthBarAfflictionArea), HealthBarAfflictionArea, Color.Red * 0.5f);
|
||||
DrawRectangle(nameof(InventoryAreaLower), InventoryAreaLower, Color.Yellow * 0.5f);
|
||||
DrawRectangle(nameof(HealthWindowAreaLeft), HealthWindowAreaLeft, Color.Red * 0.5f);
|
||||
DrawRectangle(nameof(BottomRightInfoArea), BottomRightInfoArea, Color.Green * 0.5f);
|
||||
DrawRectangle(nameof(ItemHUDArea), ItemHUDArea, Color.Magenta * 0.3f);
|
||||
|
||||
void DrawRectangle(Rectangle r, Color c) => GUI.DrawRectangle(spriteBatch, r, c);
|
||||
void DrawRectangle(string label, Rectangle r, Color c)
|
||||
{
|
||||
if (!label.IsNullOrEmpty())
|
||||
{
|
||||
GUI.DrawString(spriteBatch, r.Location.ToVector2() + Vector2.One * 3, label, c, font: GUIStyle.SmallFont);
|
||||
}
|
||||
GUI.DrawRectangle(spriteBatch, r, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -143,33 +143,32 @@ namespace Barotrauma
|
||||
{
|
||||
public readonly MedicalClinic.NetAffliction Target;
|
||||
public readonly ImmutableArray<GUIComponent> ElementsToDisable;
|
||||
public readonly GUIComponent TargetElement;
|
||||
|
||||
public PopupAffliction(ImmutableArray<GUIComponent> elementsToDisable, MedicalClinic.NetAffliction target)
|
||||
public PopupAffliction(ImmutableArray<GUIComponent> elementsToDisable, GUIComponent component, MedicalClinic.NetAffliction target)
|
||||
{
|
||||
Target = target;
|
||||
ElementsToDisable = elementsToDisable;
|
||||
TargetElement = component;
|
||||
}
|
||||
}
|
||||
|
||||
private readonly struct PopupAfflictionList
|
||||
{
|
||||
public readonly MedicalClinic.NetCrewMember Target;
|
||||
public readonly GUIListBox ListElement;
|
||||
public readonly GUIButton TreatAllButton;
|
||||
public readonly List<PopupAffliction> Afflictions;
|
||||
public readonly HashSet<PopupAffliction> Afflictions;
|
||||
|
||||
public PopupAfflictionList(MedicalClinic.NetCrewMember crewMember, GUIButton treatAllButton)
|
||||
public PopupAfflictionList(MedicalClinic.NetCrewMember crewMember, GUIListBox listElement, GUIButton treatAllButton)
|
||||
{
|
||||
ListElement = listElement;
|
||||
Target = crewMember;
|
||||
TreatAllButton = treatAllButton;
|
||||
Afflictions = new List<PopupAffliction>();
|
||||
Afflictions = new HashSet<PopupAffliction>();
|
||||
}
|
||||
}
|
||||
|
||||
// private enum SortMode
|
||||
// {
|
||||
// Severity
|
||||
// }
|
||||
|
||||
private readonly MedicalClinic medicalClinic;
|
||||
private readonly GUIComponent container;
|
||||
private Point prevResolution;
|
||||
@@ -221,23 +220,22 @@ namespace Barotrauma
|
||||
|
||||
private void UpdatePopupAfflictions()
|
||||
{
|
||||
if (selectedCrewAfflictionList is { } afflictionList)
|
||||
{
|
||||
foreach (PopupAffliction popupAffliction in afflictionList.Afflictions)
|
||||
{
|
||||
ToggleElements(ElementState.Enabled, popupAffliction.ElementsToDisable);
|
||||
if (medicalClinic.IsAfflictionPending(afflictionList.Target, popupAffliction.Target))
|
||||
{
|
||||
ToggleElements(ElementState.Disabled, popupAffliction.ElementsToDisable);
|
||||
}
|
||||
}
|
||||
if (selectedCrewAfflictionList is not { } afflictionList) { return; }
|
||||
|
||||
afflictionList.TreatAllButton.Enabled = true;
|
||||
if (afflictionList.Afflictions.All(a => medicalClinic.IsAfflictionPending(afflictionList.Target, a.Target)))
|
||||
foreach (PopupAffliction popupAffliction in afflictionList.Afflictions)
|
||||
{
|
||||
ToggleElements(ElementState.Enabled, popupAffliction.ElementsToDisable);
|
||||
if (medicalClinic.IsAfflictionPending(afflictionList.Target, popupAffliction.Target))
|
||||
{
|
||||
afflictionList.TreatAllButton.Enabled = false;
|
||||
ToggleElements(ElementState.Disabled, popupAffliction.ElementsToDisable);
|
||||
}
|
||||
}
|
||||
|
||||
afflictionList.TreatAllButton.Enabled = true;
|
||||
if (afflictionList.Afflictions.All(a => medicalClinic.IsAfflictionPending(afflictionList.Target, a.Target)))
|
||||
{
|
||||
afflictionList.TreatAllButton.Enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdatePending()
|
||||
@@ -309,7 +307,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateCrewPanel()
|
||||
public void UpdateCrewPanel()
|
||||
{
|
||||
if (crewHealList is not { } healList) { return; }
|
||||
|
||||
@@ -502,7 +500,7 @@ namespace Barotrauma
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
crewHealList = new CrewHealList(crewList, parent, treatAllButton);
|
||||
|
||||
void OnReceived(MedicalClinic.CallbackOnlyRequest obj)
|
||||
@@ -789,7 +787,7 @@ namespace Barotrauma
|
||||
|
||||
GUIListBox afflictionList = new GUIListBox(new RectTransform(new Vector2(1f, 0.8f), mainLayout.RectTransform)) { Visible = false };
|
||||
|
||||
PopupAfflictionList popupAfflictionList = new PopupAfflictionList(crewMember, treatAllButton);
|
||||
PopupAfflictionList popupAfflictionList = new PopupAfflictionList(crewMember, afflictionList, treatAllButton);
|
||||
selectedCrewElement = mainFrame;
|
||||
selectedCrewAfflictionList = popupAfflictionList;
|
||||
|
||||
@@ -810,9 +808,9 @@ namespace Barotrauma
|
||||
List<GUIComponent> allComponents = new List<GUIComponent>();
|
||||
foreach (MedicalClinic.NetAffliction affliction in request.Afflictions)
|
||||
{
|
||||
ImmutableArray<GUIComponent> createdComponents = CreatePopupAffliction(afflictionList.Content, crewMember, affliction);
|
||||
allComponents.AddRange(createdComponents);
|
||||
popupAfflictionList.Afflictions.Add(new PopupAffliction(createdComponents, affliction));
|
||||
CreatedPopupAfflictionElement createdComponents = CreatePopupAffliction(afflictionList.Content, crewMember, affliction);
|
||||
allComponents.AddRange(createdComponents.AllCreatedElements);
|
||||
popupAfflictionList.Afflictions.Add(new PopupAffliction(createdComponents.AllCreatedElements, createdComponents.MainElement, affliction));
|
||||
}
|
||||
|
||||
allComponents.Add(treatAllButton);
|
||||
@@ -832,9 +830,11 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
private ImmutableArray<GUIComponent> CreatePopupAffliction(GUIComponent parent, MedicalClinic.NetCrewMember crewMember, MedicalClinic.NetAffliction affliction)
|
||||
private readonly record struct CreatedPopupAfflictionElement(GUIComponent MainElement, ImmutableArray<GUIComponent> AllCreatedElements);
|
||||
|
||||
private CreatedPopupAfflictionElement CreatePopupAffliction(GUIComponent parent, MedicalClinic.NetCrewMember crewMember, MedicalClinic.NetAffliction affliction)
|
||||
{
|
||||
if (!(affliction.Prefab is { } prefab)) { return ImmutableArray<GUIComponent>.Empty; }
|
||||
ToolBox.ThrowIfNull(affliction.Prefab);
|
||||
|
||||
GUIFrame backgroundFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.33f), parent.RectTransform), style: "ListBoxElement");
|
||||
new GUIFrame(new RectTransform(new Vector2(1.0f, 0.01f), backgroundFrame.RectTransform, Anchor.BottomCenter), style: "HorizontalLine");
|
||||
@@ -846,9 +846,9 @@ namespace Barotrauma
|
||||
|
||||
GUILayoutGroup topLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.33f), mainLayout.RectTransform), isHorizontal: true) { Stretch = true };
|
||||
|
||||
Color iconColor = CharacterHealth.GetAfflictionIconColor(prefab, affliction.Strength);
|
||||
Color iconColor = CharacterHealth.GetAfflictionIconColor(affliction.Prefab, affliction.Strength);
|
||||
|
||||
GUIImage icon = new GUIImage(new RectTransform(Vector2.One, topLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), prefab.Icon, scaleToFit: true)
|
||||
GUIImage icon = new GUIImage(new RectTransform(Vector2.One, topLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), affliction.Prefab.Icon, scaleToFit: true)
|
||||
{
|
||||
Color = iconColor,
|
||||
DisabledColor = iconColor * 0.5f
|
||||
@@ -856,7 +856,7 @@ namespace Barotrauma
|
||||
|
||||
GUILayoutGroup topTextLayout = new GUILayoutGroup(new RectTransform(Vector2.One, topLayout.RectTransform), isHorizontal: true);
|
||||
|
||||
GUITextBlock prefabBlock = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1f), topTextLayout.RectTransform), prefab.Name, font: GUIStyle.SubHeadingFont);
|
||||
GUITextBlock prefabBlock = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1f), topTextLayout.RectTransform), affliction.Prefab.Name, font: GUIStyle.SubHeadingFont);
|
||||
|
||||
Color textColor = Color.Lerp(GUIStyle.Orange, GUIStyle.Red, affliction.Strength / affliction.Prefab.MaxStrength);
|
||||
|
||||
@@ -878,7 +878,7 @@ namespace Barotrauma
|
||||
AutoScaleHorizontal = true
|
||||
};
|
||||
|
||||
EnsureTextDoesntOverflow(prefab.Name.Value, prefabBlock, prefabBlock.Rect, ImmutableArray.Create(mainLayout, topLayout, topTextLayout));
|
||||
EnsureTextDoesntOverflow(affliction.Prefab.Name.Value, prefabBlock, prefabBlock.Rect, ImmutableArray.Create(mainLayout, topLayout, topTextLayout));
|
||||
|
||||
GUILayoutGroup bottomLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.66f), mainLayout.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft);
|
||||
|
||||
@@ -923,7 +923,7 @@ namespace Barotrauma
|
||||
return true;
|
||||
};
|
||||
|
||||
return elementsToDisable;
|
||||
return new CreatedPopupAfflictionElement(backgroundFrame, elementsToDisable);
|
||||
}
|
||||
|
||||
private void AddPending(ImmutableArray<GUIComponent> elementsToDisable, MedicalClinic.NetCrewMember crewMember, ImmutableArray<MedicalClinic.NetAffliction> afflictions)
|
||||
@@ -1033,11 +1033,53 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateAfflictions(MedicalClinic.NetCrewMember crewMember)
|
||||
{
|
||||
if (selectedCrewAfflictionList is not { } afflictionList || !afflictionList.Target.CharacterEquals(crewMember)) { return; }
|
||||
|
||||
List<GUIComponent> allComponents = new List<GUIComponent>();
|
||||
foreach (PopupAffliction existingAffliction in afflictionList.Afflictions.ToHashSet())
|
||||
{
|
||||
if (crewMember.Afflictions.None(received => received.AfflictionEquals(existingAffliction.Target)))
|
||||
{
|
||||
// remove from UI
|
||||
existingAffliction.TargetElement.RectTransform.Parent = null;
|
||||
afflictionList.Afflictions.Remove(existingAffliction);
|
||||
}
|
||||
else
|
||||
{
|
||||
allComponents.AddRange(existingAffliction.ElementsToDisable);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (MedicalClinic.NetAffliction received in crewMember.Afflictions)
|
||||
{
|
||||
// we're not that concerned about updating the strength of the afflictions
|
||||
if (afflictionList.Afflictions.Any(existing => existing.Target.AfflictionEquals(received))) { continue; }
|
||||
|
||||
CreatedPopupAfflictionElement createdComponents = CreatePopupAffliction(afflictionList.ListElement.Content, crewMember, received);
|
||||
allComponents.AddRange(createdComponents.AllCreatedElements);
|
||||
afflictionList.Afflictions.Add(new PopupAffliction(createdComponents.AllCreatedElements, createdComponents.MainElement, received));
|
||||
}
|
||||
|
||||
allComponents.Add(afflictionList.TreatAllButton);
|
||||
afflictionList.TreatAllButton.OnClicked = (_, _) =>
|
||||
{
|
||||
var afflictions = crewMember.Afflictions.Where(a => !medicalClinic.IsAfflictionPending(crewMember, a)).ToImmutableArray();
|
||||
if (!afflictions.Any()) { return true; }
|
||||
|
||||
AddPending(allComponents.ToImmutableArray(), crewMember, afflictions);
|
||||
return true;
|
||||
};
|
||||
|
||||
UpdatePopupAfflictions();
|
||||
}
|
||||
|
||||
public void ClosePopup()
|
||||
{
|
||||
if (selectedCrewElement is { } popup)
|
||||
{
|
||||
popup.Parent?.RemoveChild(selectedCrewElement);
|
||||
popup.RectTransform.Parent = null;
|
||||
}
|
||||
|
||||
selectedCrewElement = null;
|
||||
@@ -1096,5 +1138,14 @@ namespace Barotrauma
|
||||
refreshTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnDeselected()
|
||||
{
|
||||
if (GameMain.NetworkMember is not null)
|
||||
{
|
||||
MedicalClinic.SendUnsubscribeRequest();
|
||||
}
|
||||
ClosePopup();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -207,11 +207,12 @@ namespace Barotrauma
|
||||
cargoManager.OnItemsInSellFromSubCrateChanged.RegisterOverwriteExisting(refreshStoreId, _ => needsSellingFromSubRefresh = true);
|
||||
}
|
||||
|
||||
public void SelectStore(Identifier identifier)
|
||||
public void SelectStore(Character merchant)
|
||||
{
|
||||
Identifier storeIdentifier = merchant?.MerchantIdentifier ?? Identifier.Empty;
|
||||
if (CurrentLocation?.Stores != null)
|
||||
{
|
||||
if (!identifier.IsEmpty && CurrentLocation.GetStore(identifier) is { } store)
|
||||
if (!storeIdentifier.IsEmpty && CurrentLocation.GetStore(storeIdentifier) is { } store)
|
||||
{
|
||||
ActiveStore = store;
|
||||
if (storeNameBlock != null)
|
||||
@@ -223,12 +224,13 @@ namespace Barotrauma
|
||||
}
|
||||
storeNameBlock.SetRichText(storeName);
|
||||
}
|
||||
ActiveStore.SetMerchantFaction(merchant.Faction);
|
||||
}
|
||||
else
|
||||
{
|
||||
ActiveStore = null;
|
||||
string errorId, msg;
|
||||
if (identifier.IsEmpty)
|
||||
if (storeIdentifier.IsEmpty)
|
||||
{
|
||||
errorId = "Store.SelectStore:IdentifierEmpty";
|
||||
msg = $"Error selecting store at {CurrentLocation}: identifier is empty.";
|
||||
@@ -236,7 +238,7 @@ namespace Barotrauma
|
||||
else
|
||||
{
|
||||
errorId = "Store.SelectStore:StoreDoesntExist";
|
||||
msg = $"Error selecting store with identifier \"{identifier}\" at {CurrentLocation}: store with the identifier doesn't exist at the location.";
|
||||
msg = $"Error selecting store with identifier \"{storeIdentifier}\" at {CurrentLocation}: store with the identifier doesn't exist at the location.";
|
||||
}
|
||||
DebugConsole.LogError(msg);
|
||||
GameAnalyticsManager.AddErrorEventOnce(errorId, GameAnalyticsManager.ErrorSeverity.Error, msg);
|
||||
@@ -249,17 +251,17 @@ namespace Barotrauma
|
||||
if (campaignUI.Campaign.Map == null)
|
||||
{
|
||||
errorId = "Store.SelectStore:MapNull";
|
||||
msg = $"Error selecting store with identifier \"{identifier}\": Map is null.";
|
||||
msg = $"Error selecting store with identifier \"{storeIdentifier}\": Map is null.";
|
||||
}
|
||||
else if (CurrentLocation == null)
|
||||
{
|
||||
errorId = "Store.SelectStore:CurrentLocationNull";
|
||||
msg = $"Error selecting store with identifier \"{identifier}\": CurrentLocation is null.";
|
||||
msg = $"Error selecting store with identifier \"{storeIdentifier}\": CurrentLocation is null.";
|
||||
}
|
||||
else if (CurrentLocation.Stores == null)
|
||||
{
|
||||
errorId = "Store.SelectStore:StoresNull";
|
||||
msg = $"Error selecting store with identifier \"{identifier}\": CurrentLocation.Stores is null.";
|
||||
msg = $"Error selecting store with identifier \"{storeIdentifier}\": CurrentLocation.Stores is null.";
|
||||
}
|
||||
if (!msg.IsNullOrEmpty())
|
||||
{
|
||||
@@ -406,11 +408,11 @@ namespace Barotrauma
|
||||
TextScale = 1.1f,
|
||||
TextGetter = () =>
|
||||
{
|
||||
if (CurrentLocation != null)
|
||||
if (ActiveStore is not null)
|
||||
{
|
||||
Color textColor = GUIStyle.ColorReputationNeutral;
|
||||
string sign = "";
|
||||
int reputationModifier = (int)MathF.Round((CurrentLocation.GetStoreReputationModifier(activeTab == StoreTab.Buy) - 1) * 100);
|
||||
int reputationModifier = (int)MathF.Round((ActiveStore.GetReputationModifier(activeTab == StoreTab.Buy) - 1) * 100);
|
||||
if (reputationModifier > 0)
|
||||
{
|
||||
textColor = IsBuying ? GUIStyle.ColorReputationLow : GUIStyle.ColorReputationHigh;
|
||||
@@ -1903,7 +1905,7 @@ namespace Barotrauma
|
||||
LocalizedString toolTip = string.Empty;
|
||||
if (purchasedItem.ItemPrefab != null)
|
||||
{
|
||||
toolTip = purchasedItem.ItemPrefab.GetTooltip();
|
||||
toolTip = purchasedItem.ItemPrefab.GetTooltip(Character.Controlled);
|
||||
if (itemQuantity != null)
|
||||
{
|
||||
if (itemQuantity.AllNonEmpty)
|
||||
|
||||
@@ -15,8 +15,6 @@ namespace Barotrauma
|
||||
private int pageCount;
|
||||
private readonly bool transferService, purchaseService;
|
||||
private bool initialized;
|
||||
private int deliveryFee;
|
||||
private string deliveryLocationName;
|
||||
|
||||
public GUIFrame GuiFrame;
|
||||
private GUIFrame pageIndicatorHolder;
|
||||
@@ -34,14 +32,13 @@ namespace Barotrauma
|
||||
private readonly List<SubmarineInfo> subsToShow;
|
||||
private readonly SubmarineDisplayContent[] submarineDisplays = new SubmarineDisplayContent[submarinesPerPage];
|
||||
private SubmarineInfo selectedSubmarine = null;
|
||||
private LocalizedString purchaseAndSwitchText, purchaseOnlyText, deliveryText, selectedSubText, switchText, missingPreviewText, currencyName;
|
||||
private LocalizedString purchaseAndSwitchText, purchaseOnlyText, selectedSubText, switchText, missingPreviewText, currencyName;
|
||||
private readonly RectTransform parent;
|
||||
private readonly Action closeAction;
|
||||
private Sprite pageIndicator;
|
||||
|
||||
private readonly LocalizedString[] messageBoxOptions;
|
||||
|
||||
public const int DeliveryFeePerDistanceTravelled = 1000;
|
||||
public static bool ContentRefreshRequired = false;
|
||||
|
||||
private static readonly Color indicatorColor = new Color(112, 149, 129);
|
||||
@@ -108,14 +105,9 @@ namespace Barotrauma
|
||||
{
|
||||
initialized = true;
|
||||
selectedSubText = TextManager.Get("selectedsub");
|
||||
deliveryText = TextManager.Get("requestdeliverybutton");
|
||||
switchText = TextManager.Get("switchtosubmarinebutton");
|
||||
purchaseAndSwitchText = TextManager.Get("purchaseandswitch");
|
||||
purchaseOnlyText = TextManager.Get("purchase");
|
||||
if (transferService)
|
||||
{
|
||||
deliveryFee = CalculateDeliveryFee();
|
||||
}
|
||||
|
||||
currencyName = TextManager.Get("credit").Value.ToLowerInvariant();
|
||||
|
||||
@@ -124,13 +116,6 @@ namespace Barotrauma
|
||||
CreateGUI();
|
||||
}
|
||||
|
||||
private int CalculateDeliveryFee()
|
||||
{
|
||||
int distanceToOutpost = GameMain.GameSession.Map.DistanceToClosestLocationWithOutpost(GameMain.GameSession.Map.CurrentLocation, out Location endLocation);
|
||||
deliveryLocationName = endLocation.Name;
|
||||
return DeliveryFeePerDistanceTravelled * distanceToOutpost;
|
||||
}
|
||||
|
||||
private void CreateGUI()
|
||||
{
|
||||
createdForResolution = new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
||||
@@ -194,7 +179,7 @@ namespace Barotrauma
|
||||
confirmButtonAlt = new GUIButton(new RectTransform(new Vector2(0.2f, 1f), bottomContainer.RectTransform), purchaseOnlyText, style: "GUIButtonFreeScale");
|
||||
transferInfoFrameWidth -= confirmButtonAlt.RectTransform.RelativeSize.X;
|
||||
}
|
||||
confirmButton = new GUIButton(new RectTransform(new Vector2(0.2f, 1f), bottomContainer.RectTransform), purchaseService ? purchaseAndSwitchText : deliveryFee > 0 ? deliveryText : switchText, style: "GUIButtonFreeScale");
|
||||
confirmButton = new GUIButton(new RectTransform(new Vector2(0.2f, 1f), bottomContainer.RectTransform), purchaseService ? purchaseAndSwitchText : switchText, style: "GUIButtonFreeScale");
|
||||
SetConfirmButtonState(false);
|
||||
transferInfoFrameWidth -= confirmButton.RectTransform.RelativeSize.X;
|
||||
GUIFrame transferInfoFrame = new GUIFrame(new RectTransform(new Vector2(transferInfoFrameWidth, 1.0f), bottomContainer.RectTransform), style: null)
|
||||
@@ -413,15 +398,7 @@ namespace Barotrauma
|
||||
{
|
||||
if (subToDisplay.Name != CurrentOrPendingSubmarine().Name)
|
||||
{
|
||||
if (deliveryFee > 0)
|
||||
{
|
||||
LocalizedString amountString = TextManager.FormatCurrency(deliveryFee);
|
||||
submarineDisplays[i].submarineFee.Text = TextManager.GetWithVariable("deliveryfee", "[amount]", amountString);
|
||||
}
|
||||
else
|
||||
{
|
||||
submarineDisplays[i].submarineFee.Text = string.Empty;
|
||||
}
|
||||
submarineDisplays[i].submarineFee.Text = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -581,7 +558,7 @@ namespace Barotrauma
|
||||
|
||||
if (owned)
|
||||
{
|
||||
confirmButton.Text = deliveryFee > 0 ? deliveryText : switchText;
|
||||
confirmButton.Text = switchText;
|
||||
confirmButton.OnClicked = (button, userData) =>
|
||||
{
|
||||
ShowTransferPrompt();
|
||||
@@ -615,7 +592,7 @@ namespace Barotrauma
|
||||
listBackground.SetCrop(true);
|
||||
|
||||
GUIFont font = GUIStyle.Font;
|
||||
info.CreateSpecsWindow(specsFrame, font);
|
||||
info.CreateSpecsWindow(specsFrame, font, includeCrushDepth: true);
|
||||
descriptionTextBlock.Text = info.Description;
|
||||
descriptionTextBlock.CalculateHeightFromText();
|
||||
}
|
||||
@@ -702,37 +679,12 @@ namespace Barotrauma
|
||||
|
||||
private void ShowTransferPrompt()
|
||||
{
|
||||
if (!GameMain.GameSession.Campaign.CanAfford(deliveryFee) && deliveryFee > 0)
|
||||
{
|
||||
new GUIMessageBox(TextManager.Get("deliveryrequestheader"), TextManager.GetWithVariables("notenoughmoneyfordeliverytext",
|
||||
("[currencyname]", currencyName),
|
||||
("[submarinename]", selectedSubmarine.DisplayName),
|
||||
("[location1]", deliveryLocationName),
|
||||
("[location2]", GameMain.GameSession.Map.CurrentLocation.Name)));
|
||||
return;
|
||||
}
|
||||
var text = TextManager.GetWithVariables("switchsubmarinetext",
|
||||
("[submarinename1]", CurrentOrPendingSubmarine().DisplayName),
|
||||
("[submarinename2]", selectedSubmarine.DisplayName));
|
||||
text += GetItemTransferText();
|
||||
GUIMessageBox msgBox = new GUIMessageBox(TextManager.Get("switchsubmarineheader"), text, messageBoxOptions);
|
||||
|
||||
GUIMessageBox msgBox;
|
||||
|
||||
if (deliveryFee > 0)
|
||||
{
|
||||
msgBox = new GUIMessageBox(TextManager.Get("deliveryrequestheader"), TextManager.GetWithVariables("deliveryrequesttext",
|
||||
("[submarinename1]", selectedSubmarine.DisplayName),
|
||||
("[location1]", deliveryLocationName),
|
||||
("[location2]", GameMain.GameSession.Map.CurrentLocation.Name),
|
||||
("[submarinename2]", CurrentOrPendingSubmarine().DisplayName),
|
||||
("[amount]", deliveryFee.ToString()),
|
||||
("[currencyname]", currencyName)), messageBoxOptions);
|
||||
msgBox.Buttons[0].ClickSound = GUISoundType.ConfirmTransaction;
|
||||
}
|
||||
else
|
||||
{
|
||||
var text = TextManager.GetWithVariables("switchsubmarinetext",
|
||||
("[submarinename1]", CurrentOrPendingSubmarine().DisplayName),
|
||||
("[submarinename2]", selectedSubmarine.DisplayName));
|
||||
text += GetItemTransferText();
|
||||
msgBox = new GUIMessageBox(TextManager.Get("switchsubmarineheader"), text, messageBoxOptions);
|
||||
}
|
||||
|
||||
msgBox.Buttons[0].OnClicked = (applyButton, obj) =>
|
||||
{
|
||||
@@ -777,7 +729,7 @@ namespace Barotrauma
|
||||
{
|
||||
if (GameMain.Client == null)
|
||||
{
|
||||
GameMain.GameSession.SwitchSubmarine(selectedSubmarine, TransferItemsOnSwitch, deliveryFee);
|
||||
GameMain.GameSession.SwitchSubmarine(selectedSubmarine, TransferItemsOnSwitch);
|
||||
RefreshSubmarineDisplay(true);
|
||||
}
|
||||
else
|
||||
@@ -856,7 +808,7 @@ namespace Barotrauma
|
||||
if (GameMain.Client == null)
|
||||
{
|
||||
GameMain.GameSession.PurchaseSubmarine(selectedSubmarine);
|
||||
GameMain.GameSession.SwitchSubmarine(selectedSubmarine, TransferItemsOnSwitch, 0);
|
||||
GameMain.GameSession.SwitchSubmarine(selectedSubmarine, TransferItemsOnSwitch);
|
||||
RefreshSubmarineDisplay(true);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -836,7 +836,7 @@ namespace Barotrauma
|
||||
Identifier eventIdentifier = new Identifier($"{nameof(CreateWalletCrewFrame)}.{character.ID}");
|
||||
campaign.OnMoneyChanged.RegisterOverwriteExisting(eventIdentifier, e =>
|
||||
{
|
||||
if (!(e.Owner is Some<Character> { Value: var owner }) || owner != character) { return; }
|
||||
if (!e.Owner.TryUnwrap(out var owner) || owner != character) { return; }
|
||||
SetWalletText(walletBlock, e.Wallet, icon, largeIcon);
|
||||
});
|
||||
registeredEvents.Add(eventIdentifier);
|
||||
@@ -1786,7 +1786,10 @@ namespace Barotrauma
|
||||
{
|
||||
CurrentSelectMode = GUIListBox.SelectMode.None
|
||||
};
|
||||
sub.Info.CreateSpecsWindow(specsListBox, GUIStyle.Font, includeTitle: false, includeClass: false, includeDescription: true);
|
||||
sub.Info.CreateSpecsWindow(specsListBox, GUIStyle.Font,
|
||||
includeTitle: false,
|
||||
includeClass: false,
|
||||
includeDescription: true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -278,7 +278,7 @@ namespace Barotrauma
|
||||
new GUITextBlock(rectT(1, 0, tooltipLayout), string.Empty) { UserData = "moreindicator" };
|
||||
ItemInfoFrame.Children.ForEach(c => { c.CanBeFocused = false; c.Children.ForEach(c2 => c2.CanBeFocused = false); });
|
||||
|
||||
GUIFrame paddedLayout = new GUIFrame(rectT(0.95f, GUI.IsFourByThree() ? 0.98f : 0.95f, parent, Anchor.Center), style: null);
|
||||
GUIFrame paddedLayout = new GUIFrame(rectT(0.95f, 0.95f, parent, Anchor.Center), style: null);
|
||||
mainStoreLayout = new GUILayoutGroup(rectT(1, 0.9f, paddedLayout, Anchor.BottomLeft), isHorizontal: true) { RelativeSpacing = 0.01f };
|
||||
topHeaderLayout = new GUILayoutGroup(rectT(1, 0.1f, paddedLayout, Anchor.TopLeft), isHorizontal: true);
|
||||
|
||||
@@ -300,8 +300,8 @@ namespace Barotrauma
|
||||
new GUITextBlock(rectT(1.0f, 1, locationLayout), TextManager.Get("UpgradeUI.AllSubmarinesInfo"), font: GUIStyle.SmallFont, wrap: true);
|
||||
|
||||
categoryButtonLayout = new GUILayoutGroup(rectT(0.4f, 0.3f, leftLayout), isHorizontal: true) { Stretch = true };
|
||||
GUIButton upgradeButton = new GUIButton(rectT(1, 1f, categoryButtonLayout), TextManager.Get("UICategory.Upgrades"), style: "GUITabButton") { UserData = UpgradeTab.Upgrade, Selected = selectedUpgradeTab == UpgradeTab.Upgrade };
|
||||
GUIButton repairButton = new GUIButton(rectT(1, 1f, categoryButtonLayout), TextManager.Get("UICategory.Maintenance"), style: "GUITabButton") { UserData = UpgradeTab.Repairs, Selected = selectedUpgradeTab == UpgradeTab.Repairs };
|
||||
GUIButton upgradeButton = new GUIButton(rectT(0.5f, 1f, categoryButtonLayout), TextManager.Get("UICategory.Upgrades"), style: "GUITabButton") { UserData = UpgradeTab.Upgrade, Selected = selectedUpgradeTab == UpgradeTab.Upgrade };
|
||||
GUIButton repairButton = new GUIButton(rectT(0.5f, 1f, categoryButtonLayout), TextManager.Get("UICategory.Maintenance"), style: "GUITabButton") { UserData = UpgradeTab.Repairs, Selected = selectedUpgradeTab == UpgradeTab.Repairs };
|
||||
|
||||
/* RIGHT HEADER LAYOUT
|
||||
* |---------------------------------------------------------------------------------------------------|
|
||||
@@ -352,12 +352,15 @@ namespace Barotrauma
|
||||
|
||||
SelectTab(UpgradeTab.Upgrade);
|
||||
|
||||
var itemSwapPreview = new GUICustomComponent(new RectTransform(new Vector2(0.27f, 0.4f), mainStoreLayout.RectTransform, Anchor.TopLeft) { RelativeOffset = new Vector2(GUI.IsFourByThree() ? 0.5f : 0.47f, 0.0f) }, DrawItemSwapPreview)
|
||||
var itemSwapPreview = new GUICustomComponent(new RectTransform(new Vector2(0.25f, 0.4f), mainStoreLayout.RectTransform, Anchor.TopLeft)
|
||||
{ RelativeOffset = new Vector2(0.52f * GUI.AspectRatioAdjustment, 0.0f) }, DrawItemSwapPreview)
|
||||
{
|
||||
IgnoreLayoutGroups = true,
|
||||
CanBeFocused = true
|
||||
};
|
||||
|
||||
GUITextBlock.AutoScaleAndNormalize(upgradeButton.TextBlock, repairButton.TextBlock);
|
||||
|
||||
#if DEBUG
|
||||
// creates a button that re-creates the UI
|
||||
CreateRefreshButton();
|
||||
@@ -730,7 +733,7 @@ namespace Barotrauma
|
||||
if (storeLayout == null || mainStoreLayout == null) { return; }
|
||||
currentStoreLayout = CreateUpgradeCategoryList(rectT(1.0f, 1.5f, storeLayout));
|
||||
|
||||
selectedUpgradeCategoryLayout = new GUIFrame(rectT(GUI.IsFourByThree() ? 0.3f : 0.25f, 1, mainStoreLayout), style: null) { CanBeFocused = false };
|
||||
selectedUpgradeCategoryLayout = new GUIFrame(rectT(0.3f * GUI.AspectRatioAdjustment, 1, mainStoreLayout), style: null) { CanBeFocused = false };
|
||||
|
||||
RefreshUpgradeList();
|
||||
|
||||
@@ -961,7 +964,7 @@ namespace Barotrauma
|
||||
bool isUninstallPending = item.Prefab.SwappableItem != null && item.PendingItemSwap?.Identifier == item.Prefab.SwappableItem.ReplacementOnUninstall;
|
||||
if (isUninstallPending) { canUninstall = false; }
|
||||
|
||||
frames.Add(CreateUpgradeEntry(rectT(1f, 0.25f, parent.Content), currentOrPending.UpgradePreviewSprite,
|
||||
frames.Add(CreateUpgradeEntry(rectT(1f, 0.35f, parent.Content), currentOrPending.UpgradePreviewSprite,
|
||||
item.PendingItemSwap != null ? TextManager.GetWithVariable("upgrades.pendingitem", "[itemname]", name) : TextManager.GetWithVariable("upgrades.installeditem", "[itemname]", nameWithQuantity),
|
||||
currentOrPending.Description,
|
||||
0, null, addBuyButton: canUninstall, addProgressBar: false, buttonStyle: "WeaponUninstallButton").Frame);
|
||||
@@ -1001,7 +1004,7 @@ namespace Barotrauma
|
||||
|
||||
int price = isPurchased || replacement == item.Prefab ? 0 : replacement.SwappableItem.GetPrice(Campaign.Map?.CurrentLocation) * linkedItems.Count();
|
||||
|
||||
frames.Add(CreateUpgradeEntry(rectT(1f, 0.25f, parent.Content), replacement.UpgradePreviewSprite, replacement.Name, replacement.Description,
|
||||
frames.Add(CreateUpgradeEntry(rectT(1f, 0.35f, parent.Content), replacement.UpgradePreviewSprite, replacement.Name, replacement.Description,
|
||||
price, replacement,
|
||||
addBuyButton: true,
|
||||
addProgressBar: false,
|
||||
@@ -1134,7 +1137,8 @@ namespace Barotrauma
|
||||
GUILayoutGroup imageLayout = new GUILayoutGroup(rectT(new Point(prefabLayout.Rect.Height, prefabLayout.Rect.Height), prefabLayout), childAnchor: Anchor.Center);
|
||||
var icon = new GUIImage(rectT(0.9f, 0.9f, imageLayout, scaleBasis: ScaleBasis.BothHeight), sprite, scaleToFit: true) { CanBeFocused = false };
|
||||
GUILayoutGroup textLayout = new GUILayoutGroup(rectT(1f - imageLayout.RectTransform.RelativeSize.X, 1, prefabLayout));
|
||||
var name = new GUITextBlock(rectT(1, 0.25f, textLayout), RichString.Rich(title), font: GUIStyle.SubHeadingFont) { AutoScaleHorizontal = true, AutoScaleVertical = true, Padding = Vector4.Zero };
|
||||
var name = new GUITextBlock(rectT(1, 0.35f, textLayout), RichString.Rich(title), font: GUIStyle.SubHeadingFont) { AutoScaleHorizontal = true, AutoScaleVertical = true, Padding = Vector4.Zero };
|
||||
//name.RectTransform.MinSize = new Point(0, (int)name.TextSize.Y);
|
||||
GUILayoutGroup descriptionLayout = new GUILayoutGroup(rectT(1, 0.75f - progressBarHeight, textLayout));
|
||||
var description = new GUITextBlock(rectT(1, 1, descriptionLayout), body, font: GUIStyle.SmallFont, wrap: true, textAlignment: Alignment.TopLeft) { Padding = Vector4.Zero };
|
||||
GUILayoutGroup? progressLayout = null;
|
||||
@@ -1176,7 +1180,7 @@ namespace Barotrauma
|
||||
materialCostList.Visible = false;
|
||||
materialCostList.UserData = UpgradeStoreUserData.MaterialCostList;
|
||||
|
||||
var priceText = new GUITextBlock(rectT(0.2f, 1f, buyButtonLayout), formattedPrice)
|
||||
var priceText = new GUITextBlock(rectT(0.2f, 1f, buyButtonLayout), formattedPrice, textAlignment: Alignment.CenterRight)
|
||||
{
|
||||
UserData = UpgradeStoreUserData.PriceLabel,
|
||||
//prices on swappable items are always visible, upgrade prices are enabled in UpdateUpgradeEntry for purchasable upgrades
|
||||
|
||||
@@ -189,24 +189,10 @@ namespace Barotrauma
|
||||
("[currencyname]", TextManager.Get("credit").ToLower()));
|
||||
break;
|
||||
case VoteType.SwitchSub:
|
||||
int deliveryFee = SubmarineSelection.DeliveryFeePerDistanceTravelled * GameMain.GameSession.Map.DistanceToClosestLocationWithOutpost(GameMain.GameSession.Map.CurrentLocation, out Location endLocation);
|
||||
if (deliveryFee > 0)
|
||||
{
|
||||
tag = transferItems ? "submarineswitchwithitemsfeevote" : "submarineswitchfeevote";
|
||||
text = TextManager.GetWithVariables(tag,
|
||||
("[playername]", characterRichString),
|
||||
("[submarinename]", submarineRichString),
|
||||
("[locationname]", endLocation.Name),
|
||||
("[amount]", deliveryFee.ToString()),
|
||||
("[currencyname]", TextManager.Get("credit").ToLower()));
|
||||
}
|
||||
else
|
||||
{
|
||||
tag = transferItems ? "submarineswitchwithitemsnofeevote" : "submarineswitchnofeevote";
|
||||
text = TextManager.GetWithVariables(tag,
|
||||
("[playername]", characterRichString),
|
||||
("[submarinename]", submarineRichString));
|
||||
}
|
||||
tag = transferItems ? "submarineswitchwithitemsnofeevote" : "submarineswitchnofeevote";
|
||||
text = TextManager.GetWithVariables(tag,
|
||||
("[playername]", characterRichString),
|
||||
("[submarinename]", submarineRichString));
|
||||
break;
|
||||
}
|
||||
votingOnText = RichString.Rich(text);
|
||||
@@ -241,25 +227,10 @@ namespace Barotrauma
|
||||
("[novotecount]", noVoteCount.ToString()));
|
||||
break;
|
||||
case VoteType.SwitchSub:
|
||||
int deliveryFee = SubmarineSelection.DeliveryFeePerDistanceTravelled * GameMain.GameSession.Map.DistanceToClosestLocationWithOutpost(GameMain.GameSession.Map.CurrentLocation, out Location endLocation);
|
||||
|
||||
if (deliveryFee > 0)
|
||||
{
|
||||
result = TextManager.GetWithVariables(votePassed ? "submarineswitchfeevotepassed" : "submarineswitchfeevotefailed",
|
||||
("[submarinename]", info.DisplayName),
|
||||
("[locationname]", endLocation.Name),
|
||||
("[amount]", string.Format(CultureInfo.InvariantCulture, "{0:N0}", deliveryFee)),
|
||||
("[currencyname]", TextManager.Get("credit").ToLower()),
|
||||
("[yesvotecount]", yesVoteCount.ToString()),
|
||||
("[novotecount]", noVoteCount.ToString()));
|
||||
}
|
||||
else
|
||||
{
|
||||
result = TextManager.GetWithVariables(votePassed ? "submarineswitchnofeevotepassed" : "submarineswitchnofeevotefailed",
|
||||
("[submarinename]", info.DisplayName),
|
||||
("[yesvotecount]", yesVoteCount.ToString()),
|
||||
("[novotecount]", noVoteCount.ToString()));
|
||||
}
|
||||
result = TextManager.GetWithVariables(votePassed ? "submarineswitchnofeevotepassed" : "submarineswitchnofeevotefailed",
|
||||
("[submarinename]", info.DisplayName),
|
||||
("[yesvotecount]", yesVoteCount.ToString()),
|
||||
("[novotecount]", noVoteCount.ToString()));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user