v1.6.17.0 (Unto the Breach update)
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user