Release 1.10.5.0 - Autumn Update 2025
This commit is contained in:
@@ -6,6 +6,7 @@ using Microsoft.Xna.Framework.Input;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
|
||||
namespace Barotrauma
|
||||
@@ -50,9 +51,15 @@ namespace Barotrauma
|
||||
}
|
||||
|
||||
private RichString selectedTip;
|
||||
|
||||
private string selectedTipString;
|
||||
private ImmutableArray<RichTextData>? selectedTipRichTextData;
|
||||
|
||||
private void SetSelectedTip(LocalizedString tip)
|
||||
{
|
||||
selectedTip = RichString.Rich(tip);
|
||||
selectedTipString = string.Empty;
|
||||
selectedTipRichTextData = null;
|
||||
}
|
||||
|
||||
public float LoadState;
|
||||
@@ -165,13 +172,20 @@ namespace Barotrauma
|
||||
textPos.Y += GUIStyle.LargeFont.MeasureString(loadText.ToUpper()).Y * 1.2f;
|
||||
}
|
||||
|
||||
if (GUIStyle.Font.HasValue && selectedTip != null)
|
||||
if (GUIStyle.Font.HasValue && selectedTip != null && !selectedTip.SanitizedValue.IsNullOrEmpty())
|
||||
{
|
||||
string wrappedTip = ToolBox.WrapText(selectedTip.SanitizedValue, GameMain.GraphicsWidth * 0.3f, GUIStyle.Font.Value);
|
||||
string[] lines = wrappedTip.Split('\n');
|
||||
float lineHeight = GUIStyle.Font.MeasureString(selectedTip).Y;
|
||||
//store the string value of the LocalizedString to prevent the text from changing if/when new text packs are loaded during the loading screen
|
||||
if (selectedTipString.IsNullOrEmpty())
|
||||
{
|
||||
selectedTipString = selectedTip.SanitizedValue;
|
||||
selectedTipRichTextData = selectedTip.RichTextData;
|
||||
}
|
||||
|
||||
if (selectedTip.RichTextData != null)
|
||||
string wrappedTip = ToolBox.WrapText(selectedTipString, GameMain.GraphicsWidth * 0.3f, GUIStyle.Font.Value);
|
||||
string[] lines = wrappedTip.Split('\n');
|
||||
float lineHeight = GUIStyle.Font.MeasureString(selectedTipString).Y;
|
||||
|
||||
if (selectedTipRichTextData != null)
|
||||
{
|
||||
int rtdOffset = 0;
|
||||
for (int i = 0; i < lines.Length; i++)
|
||||
@@ -179,7 +193,7 @@ namespace Barotrauma
|
||||
GUIStyle.Font.DrawStringWithColors(spriteBatch, lines[i],
|
||||
new Vector2(textPos.X, (int)(textPos.Y + i * lineHeight)),
|
||||
Color.White,
|
||||
0f, Vector2.Zero, 1f, SpriteEffects.None, 0f, selectedTip.RichTextData.Value, rtdOffset);
|
||||
0f, Vector2.Zero, 1f, SpriteEffects.None, 0f, selectedTipRichTextData.Value, rtdOffset);
|
||||
rtdOffset += lines[i].Length;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -860,26 +860,22 @@ namespace Barotrauma
|
||||
FilterStoreItems(category, searchBox.Text);
|
||||
}
|
||||
|
||||
private static KeyValuePair<Identifier, float>? GetReputationRequirement(PriceInfo priceInfo)
|
||||
private static float GetReputationRequirement(PriceInfo priceInfo, Identifier faction)
|
||||
{
|
||||
return GameMain.GameSession?.Campaign is not null
|
||||
? priceInfo.MinReputation.FirstOrNull()
|
||||
: null;
|
||||
return priceInfo.MinReputation.GetValueOrDefault(faction);
|
||||
}
|
||||
|
||||
private static KeyValuePair<Identifier, float>? GetTooLowReputation(PriceInfo priceInfo)
|
||||
private static bool ReputationRequirementsMet(PriceInfo priceInfo, Identifier faction)
|
||||
{
|
||||
if (priceInfo.MinReputation.None()) { return true; }
|
||||
if (GameMain.GameSession?.Campaign is CampaignMode campaign)
|
||||
{
|
||||
foreach (var minRep in priceInfo.MinReputation)
|
||||
if (priceInfo.MinReputation.TryGetValue(faction, out float requirement))
|
||||
{
|
||||
if (MathF.Round(campaign.GetReputation(minRep.Key)) < minRep.Value)
|
||||
{
|
||||
return minRep;
|
||||
}
|
||||
return MathF.Round(campaign.GetReputation(faction)) >= requirement;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return false;
|
||||
}
|
||||
|
||||
int prevDailySpecialCount, prevRequestedGoodsCount, prevSubRequestedGoodsCount;
|
||||
@@ -948,7 +944,7 @@ namespace Barotrauma
|
||||
SetPriceGetters(itemFrame, true);
|
||||
}
|
||||
|
||||
SetItemFrameStatus(itemFrame, hasPermissions && quantity > 0 && !GetTooLowReputation(priceInfo).HasValue);
|
||||
SetItemFrameStatus(itemFrame, hasPermissions && quantity > 0 && ReputationRequirementsMet(priceInfo, ActiveStore.GetMerchantOrLocationFactionIdentifier()));
|
||||
existingItemFrames.Add(itemFrame);
|
||||
}
|
||||
}
|
||||
@@ -1464,8 +1460,9 @@ namespace Barotrauma
|
||||
PriceInfo priceInfo2 = item2.ItemPrefab.GetPriceInfo(ActiveStore);
|
||||
if (priceInfo1 != null && priceInfo2 != null)
|
||||
{
|
||||
var requiredReputation1 = GetTooLowReputation(priceInfo1)?.Value ?? 0.0f;
|
||||
var requiredReputation2 = GetTooLowReputation(priceInfo2)?.Value ?? 0.0f;
|
||||
Identifier faction = ActiveStore.GetMerchantOrLocationFactionIdentifier();
|
||||
float requiredReputation1 = ReputationRequirementsMet(priceInfo1, faction) ? 0.0f : GetReputationRequirement(priceInfo1, faction);
|
||||
float requiredReputation2 = ReputationRequirementsMet(priceInfo2, faction) ? 0.0f : GetReputationRequirement(priceInfo2, faction);
|
||||
return requiredReputation1.CompareTo(requiredReputation2);
|
||||
}
|
||||
return 0;
|
||||
@@ -1942,14 +1939,15 @@ namespace Barotrauma
|
||||
var campaign = GameMain.GameSession?.Campaign;
|
||||
if (priceInfo != null && campaign != null)
|
||||
{
|
||||
var requiredReputation = GetReputationRequirement(priceInfo);
|
||||
if (requiredReputation != null)
|
||||
Identifier faction = ActiveStore.GetMerchantOrLocationFactionIdentifier();
|
||||
float requiredReputation = GetReputationRequirement(priceInfo, faction);
|
||||
if (requiredReputation > 0)
|
||||
{
|
||||
var repStr = TextManager.GetWithVariables(
|
||||
"campaignstore.reputationrequired",
|
||||
("[amount]", ((int)requiredReputation.Value.Value).ToString()),
|
||||
("[faction]", TextManager.Get("faction." + requiredReputation.Value.Key).Value));
|
||||
Color color = MathF.Round(campaign.GetReputation(requiredReputation.Value.Key)) < requiredReputation.Value.Value ?
|
||||
("[amount]", ((int)requiredReputation).ToString()),
|
||||
("[faction]", TextManager.Get("faction." + faction).Value));
|
||||
Color color = MathF.Round(campaign.GetReputation(faction)) < requiredReputation ?
|
||||
GUIStyle.Orange : GUIStyle.Green;
|
||||
toolTip += $"\n‖color:{color.ToStringHex()}‖{repStr}‖color:end‖";
|
||||
}
|
||||
|
||||
@@ -1743,12 +1743,12 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateMaterialCosts(GUIListBox list, UpgradePrefab prefab, int targetLevel)
|
||||
static void CreateMaterialCosts(GUIListBox list, UpgradePrefab upgradePrefab, int targetLevel)
|
||||
{
|
||||
list.Content.ClearChildren();
|
||||
var allItems = CargoManager.FindAllItemsOnPlayerAndSub(Character.Controlled);
|
||||
|
||||
var resources = prefab.GetApplicableResources(targetLevel);
|
||||
var resources = upgradePrefab.GetApplicableResources(targetLevel);
|
||||
|
||||
foreach (ApplicableResourceCollection collection in resources)
|
||||
{
|
||||
@@ -1769,7 +1769,7 @@ namespace Barotrauma
|
||||
|
||||
bool hasItems = collection.Cost.Amount <= allItems.Count(collection.Cost.MatchesItem);
|
||||
|
||||
Sprite icon = defaultItemPrefab.InventoryIcon ?? prefab.Sprite;
|
||||
Sprite icon = defaultItemPrefab.InventoryIcon ?? defaultItemPrefab.Sprite;
|
||||
Color iconColor = defaultItemPrefab.InventoryIcon is null ? defaultItemPrefab.SpriteColor : defaultItemPrefab.InventoryIconColor;
|
||||
|
||||
GUIImage itemIcon = new GUIImage(new RectTransform(Vector2.One, itemFrame.RectTransform, scaleBasis: ScaleBasis.Smallest, anchor: Anchor.Center), sprite: icon, scaleToFit: true)
|
||||
@@ -1798,7 +1798,7 @@ namespace Barotrauma
|
||||
if (index > length) { index = 0; }
|
||||
|
||||
ItemPrefab currentPrefab = collection.MatchingItems[(int)MathF.Floor(index)];
|
||||
Sprite icon = currentPrefab.InventoryIcon ?? prefab.Sprite;
|
||||
Sprite icon = currentPrefab.InventoryIcon ?? currentPrefab.Sprite;
|
||||
Color iconColor = currentPrefab.InventoryIcon is null ? currentPrefab.SpriteColor : currentPrefab.InventoryIconColor;
|
||||
itemIcon.Sprite = icon;
|
||||
itemIcon.Color = hasItems ? iconColor : iconColor * 0.9f;
|
||||
|
||||
Reference in New Issue
Block a user