Merge branch 'master' of https://github.com/Regalis11/Barotrauma into develop

This commit is contained in:
EvilFactory
2024-01-11 11:42:33 -03:00
20 changed files with 263 additions and 137 deletions
@@ -255,7 +255,11 @@ namespace Barotrauma
}
if (subObjectives.Any(so => so.CanBeCompleted)) { return; }
UpdateSimpleEscape(deltaTime);
if (cannotFindSafeHull && !character.IsInFriendlySub && objectiveManager.Objectives.None(o => o is AIObjectiveReturn))
bool inFriendlySub =
character.IsInFriendlySub ||
(character.IsEscorted && character.IsInPlayerSub);
if (cannotFindSafeHull && !inFriendlySub && objectiveManager.Objectives.None(o => o is AIObjectiveReturn))
{
if (OrderPrefab.Prefabs.TryGet("return".ToIdentifier(), out OrderPrefab orderPrefab))
{
@@ -436,7 +436,10 @@ namespace Barotrauma
break;
case "statvalue":
var newStatValue = new AppliedStatValue(subElement);
afflictionStatValues.Add(newStatValue.StatType, newStatValue);
if (newStatValue.StatType == StatTypes.None || !afflictionStatValues.TryAdd(newStatValue.StatType, newStatValue))
{
DebugConsole.ThrowError($"Invalid stat value in the affliction \"{parentDebugName}\".", contentPackage: element.ContentPackage);
}
break;
case "abilityflag":
AbilityFlags flagType = subElement.GetAttributeEnum("flagtype", AbilityFlags.None);
@@ -3141,6 +3141,7 @@ namespace Barotrauma
if (character.IsDead) { return; }
if (!UseInHealthInterface) { return; }
GameAnalyticsManager.AddDesignEvent("ApplyTreatment:" + Prefab.Identifier);
#if CLIENT
if (user == Character.Controlled)
{
@@ -834,7 +834,7 @@ namespace Barotrauma
[Serialize(true, IsPropertySaveable.No)]
public bool CanFlipY { get; private set; }
[Serialize(0.1f, IsPropertySaveable.No)]
[Serialize(0.01f, IsPropertySaveable.No)]
public float MinScale { get; private set; }
[Serialize(10.0f, IsPropertySaveable.No)]
@@ -11,6 +11,7 @@ using System.Xml.Linq;
using System.Collections.Immutable;
using Barotrauma.Abilities;
#if CLIENT
using System.Diagnostics;
using Microsoft.Xna.Framework.Graphics;
using Barotrauma.Lights;
#endif
@@ -281,14 +282,21 @@ namespace Barotrauma
}
}
public float ScaleWhenTextureOffsetSet { get; private set; } = 1.0f;
protected Vector2 textureOffset = Vector2.Zero;
[Editable(MinValueFloat = -1000f, MaxValueFloat = 1000f, ValueStep = 10f), Serialize("0.0, 0.0", IsPropertySaveable.Yes)]
[Editable(ForceShowPlusMinusButtons = true, ValueStep = 1f), Serialize("0.0, 0.0", IsPropertySaveable.Yes)]
public Vector2 TextureOffset
{
get { return textureOffset; }
set
{
textureOffset = value;
textureOffset.X =
MathUtils.PositiveModulo(textureOffset.X, Sprite.SourceRect.Width * TextureScale.X * Scale);
textureOffset.Y =
MathUtils.PositiveModulo(textureOffset.Y, Sprite.SourceRect.Height * TextureScale.Y * Scale);
ScaleWhenTextureOffsetSet = Scale;
#if CLIENT
SetLightTextureOffset();
#endif
@@ -1584,6 +1592,9 @@ namespace Barotrauma
Submarine = submarine,
};
bool flippedX = element.GetAttributeBool(nameof(FlippedX), false);
bool flippedY = element.GetAttributeBool(nameof(FlippedY), false);
if (submarine?.Info.GameVersion != null)
{
SerializableProperty.UpgradeGameVersion(s, s.Prefab.ConfigElement, submarine.Info.GameVersion);
@@ -1594,6 +1605,19 @@ namespace Barotrauma
{
s.CrushDepth = Math.Max(s.CrushDepth, GameMain.GameSession.LevelData.InitialDepth * Physics.DisplayToRealWorldRatio + 500);
}
#if CLIENT
s.TextureOffset = UpgradeTextureOffset(
targetSize: rect.Size.ToVector2(),
originalTextureOffset:
// Note: cannot use s.TextureOffset because wrapping is very weird in the old logic
element.GetAttributeVector2("TextureOffset", Vector2.Zero),
submarineInfo: submarine.Info,
sourceRect: s.Sprite.SourceRect,
scale: s.Scale * s.TextureScale,
flippedX: flippedX,
flippedY: flippedY);
#endif
}
bool hasDamage = false;
@@ -1637,8 +1661,8 @@ namespace Barotrauma
}
}
if (element.GetAttributeBool(nameof(FlippedX), false)) { s.FlipX(false); }
if (element.GetAttributeBool(nameof(FlippedY), false)) { s.FlipY(false); }
if (flippedX) { s.FlipX(false); }
if (flippedY) { s.FlipY(false); }
//structures with a body drop a shadow by default
if (element.GetAttribute(nameof(UseDropShadow)) == null)
@@ -45,7 +45,7 @@ sealed class ConditionallyEditable : Editable
=> (entity is Item { body: null } item && item.Prefab.AllowRotatingInEditor)
|| (entity is Structure structure && structure.Prefab.AllowRotatingInEditor),
ConditionType.Attachable
=> entity is Holdable { Attachable: true },
=> GetComponent<Holdable>(entity) is Holdable { Attachable: true },
ConditionType.HasBody
=> entity is Structure { HasBody: true } or Item { body: not null },
ConditionType.Pickable
@@ -53,14 +53,28 @@ sealed class ConditionallyEditable : Editable
ConditionType.OnlyByStatusEffectsAndNetwork
=> GameMain.NetworkMember is { IsServer: true },
ConditionType.HasIntegratedButtons
=> entity is Door { HasIntegratedButtons: true },
=> GetComponent<Door>(entity) is { HasIntegratedButtons: true },
ConditionType.IsToggleableController
=> entity is Controller { IsToggle: true } controller && controller.Item.GetComponent<ConnectionPanel>() != null,
=> GetComponent<Controller>(entity) is Controller { IsToggle: true } controller &&
controller.Item.GetComponent<ConnectionPanel>() != null,
ConditionType.HasConnectionPanel
=> (entity is Item item && item.GetComponent<ConnectionPanel>() != null)
|| (entity is ItemComponent ic && ic.Item.GetComponent<ConnectionPanel>() != null),
=> GetComponent<ConnectionPanel>(entity) != null,
_
=> false
};
static T GetComponent<T>(ISerializableEntity e) where T : ItemComponent
{
if (e is T t) { return t; }
if (e is Item item)
{
return item.GetComponent<T>();
}
if (e is ItemComponent ic)
{
return ic.Item.GetComponent<T>();
}
return null;
}
}
}