v1.6.17.0 (Unto the Breach update)

This commit is contained in:
Regalis11
2024-10-22 17:29:04 +03:00
parent e74b3cdb17
commit 6e6c17e100
417 changed files with 17166 additions and 5870 deletions
@@ -14,6 +14,7 @@ namespace Barotrauma.Items.Components
partial class Turret : Powered, IDrawableComponent, IServerSerializable
{
private Sprite barrelSprite, railSprite;
private Sprite barrelSpriteBroken, railSpriteBroken;
private readonly List<(Sprite sprite, Vector2 position)> chargeSprites = new List<(Sprite sprite, Vector2 position)>();
private readonly List<Sprite> spinningBarrelSprites = new List<Sprite>();
@@ -89,6 +90,8 @@ namespace Barotrauma.Items.Components
private List<LightComponent> lightComponents;
private Projectile lastProjectile;
private readonly bool isSlowTurret;
public float Rotation { get; private set; }
@@ -320,9 +323,12 @@ namespace Barotrauma.Items.Components
[Serialize("", IsPropertySaveable.Yes, description: "[Auto Operate] Group or SpeciesName that the AI ignores when the turret is operated automatically."),
Editable(TransferToSwappedItem = true)]
public Identifier FriendlyTag { get; private set; }
[Serialize("None", IsPropertySaveable.Yes, description: "[Auto Operate] Team that the turret considers friendly. If set to None, the team the submarine/outpost belongs to is considered the friendly team."),
Editable(TransferToSwappedItem = true)]
public CharacterTeamType FriendlyTeam { get; private set; }
#endregion
private const string SetAutoOperateConnection = "set_auto_operate";
private const string ToggleAutoOperateConnection = "toggle_auto_operate";
@@ -341,6 +347,12 @@ namespace Barotrauma.Items.Components
case "railsprite":
railSprite = new Sprite(subElement);
break;
case "barrelspritebroken":
barrelSpriteBroken = new Sprite(subElement);
break;
case "railspritebroken":
railSpriteBroken = new Sprite(subElement);
break;
case "chargesprite":
chargeSprites.Add((new Sprite(subElement), subElement.GetAttributeVector2("chargetarget", Vector2.Zero)));
break;
@@ -779,6 +791,12 @@ namespace Barotrauma.Items.Components
if (launchedProjectile != null || LaunchWithoutProjectile)
{
if (launchedProjectile?.Item.GetComponent<Rope>() != null &&
lastProjectile?.Item.GetComponent<Rope>() is { SnapWhenWeaponFiredAgain: true } rope)
{
rope.Snap();
}
if (projectiles.Any())
{
foreach (Projectile projectile in projectiles)
@@ -806,6 +824,8 @@ namespace Barotrauma.Items.Components
}
}
lastProjectile = launchedProjectile;
#if SERVER
if (character != null && launchedProjectile != null)
{
@@ -900,6 +920,10 @@ namespace Barotrauma.Items.Components
projectileComponent.Attack.DamageMultiplier = (1f * DamageMultiplier) + (TinkeringDamageIncrease * tinkeringStrength);
}
projectileComponent.Use(null, LaunchImpulse);
if (item.GetComponent<TriggerComponent>() is { } trigger)
{
projectileComponent.IgnoredBodies.Add(trigger.PhysicsBody.FarseerBody);
}
projectile.GetComponent<Rope>()?.Attach(item, projectile);
projectileComponent.User = user;
@@ -1681,14 +1705,18 @@ namespace Barotrauma.Items.Components
{
if (target.SpeciesName.Equals(friendlyTag) || target.Group.Equals(friendlyTag)) { return false; }
}
if (FriendlyTeam != CharacterTeamType.None)
{
if (target.TeamID == FriendlyTeam) { return false; }
}
bool isHuman = target.IsHuman || target.Group == CharacterPrefab.HumanSpeciesName;
if (isHuman)
{
if (item.Submarine != null)
{
if (item.Submarine.Info.IsOutpost) { return false; }
// Check that the target is not in the friendly team, e.g. pirate or a hostile player sub (PvP).
return !target.IsOnFriendlyTeam(item.Submarine.TeamID) && TargetHumans;
var turretTeam = FriendlyTeam == CharacterTeamType.None ? item.Submarine.TeamID : FriendlyTeam;
return !target.IsOnFriendlyTeam(turretTeam) && TargetHumans;
}
return TargetHumans;
}
@@ -1792,6 +1820,8 @@ namespace Barotrauma.Items.Components
barrelSprite?.Remove(); barrelSprite = null;
railSprite?.Remove(); railSprite = null;
barrelSpriteBroken?.Remove(); barrelSpriteBroken = null;
railSpriteBroken?.Remove(); railSpriteBroken = null;
#if CLIENT
crosshairSprite?.Remove(); crosshairSprite = null;