Merge remote-tracking branch 'upstream/master' into develop

This commit is contained in:
EvilFactory
2024-06-18 12:19:13 -03:00
263 changed files with 7788 additions and 2849 deletions
@@ -1,10 +1,12 @@
using Barotrauma.Networking;
using Barotrauma.Abilities;
using Barotrauma.Networking;
using FarseerPhysics;
using FarseerPhysics.Dynamics;
using FarseerPhysics.Dynamics.Contacts;
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Xml.Linq;
@@ -41,6 +43,9 @@ namespace Barotrauma.Items.Components
private bool attachable, attached, attachedByDefault;
private Voronoi2.VoronoiCell attachTargetCell;
private PhysicsBody body;
public readonly ImmutableDictionary<StatTypes, float> HoldableStatValues;
public PhysicsBody Pusher
{
get;
@@ -287,6 +292,22 @@ namespace Barotrauma.Items.Components
}
}
characterUsable = element.GetAttributeBool("characterusable", true);
Dictionary<StatTypes, float> statValues = new Dictionary<StatTypes, float>();
foreach (var subElement in element.GetChildElements("statvalue"))
{
StatTypes statType = CharacterAbilityGroup.ParseStatType(subElement.GetAttributeString("stattype", ""), Name);
float statValue = subElement.GetAttributeFloat("value", 0f);
if (statValues.ContainsKey(statType))
{
statValues[statType] += statValue;
}
else
{
statValues.TryAdd(statType, statValue);
}
}
HoldableStatValues = statValues.ToImmutableDictionary();
}
private bool OnPusherCollision(Fixture sender, Fixture other, Contact contact)
@@ -304,9 +325,9 @@ namespace Barotrauma.Items.Components
}
private bool loadedFromInstance;
public override void Load(ContentXElement componentElement, bool usePrefabValues, IdRemap idRemap)
public override void Load(ContentXElement componentElement, bool usePrefabValues, IdRemap idRemap, bool isItemSwap)
{
base.Load(componentElement, usePrefabValues, idRemap);
base.Load(componentElement, usePrefabValues, idRemap, isItemSwap);
loadedFromInstance = true;
@@ -296,7 +296,7 @@ namespace Barotrauma.Items.Components
impactQueue.Clear();
item.body.FarseerBody.OnCollision -= OnCollision;
item.body.CollisionCategories = Physics.CollisionItem;
item.body.CollidesWith = Physics.CollisionWall;
item.body.CollidesWith = Physics.DefaultItemCollidesWith;
item.body.FarseerBody.IsBullet = false;
item.body.PhysEnabled = false;
}
@@ -251,6 +251,7 @@ namespace Barotrauma.Items.Components
foreach (ConnectionPanel connectionPanel in item.GetComponents<ConnectionPanel>())
{
connectionPanel.DisconnectedWires.Clear();
foreach (Connection c in connectionPanel.Connections)
{
foreach (Wire w in c.Wires.ToArray())
@@ -260,7 +261,7 @@ namespace Barotrauma.Items.Components
w.Item.SetTransform(pos, 0.0f);
}
}
}
}
}
public override void Drop(Character dropper, bool setTransform = true)
@@ -62,7 +62,7 @@ namespace Barotrauma.Items.Components
if (!MathUtils.IsValid(dir)) { return true; }
float length = 200;
dir = dir.ClampLength(length) / length;
Vector2 propulsion = dir * Force * character.PropulsionSpeedMultiplier;
Vector2 propulsion = dir * Force * character.PropulsionSpeedMultiplier * (1.0f + character.GetStatValue(StatTypes.PropulsionSpeed));
if (character.AnimController.InWater && Force > 0.0f) { character.AnimController.TargetMovement = dir; }
foreach (Limb limb in character.AnimController.Limbs)
@@ -272,22 +272,6 @@ namespace Barotrauma.Items.Components
item.AiTarget.SightRange = item.AiTarget.MaxSightRange;
}
ignoredBodies.Clear();
foreach (Limb l in character.AnimController.Limbs)
{
if (l.IsSevered) { continue; }
ignoredBodies.Add(l.body.FarseerBody);
}
foreach (Item heldItem in character.HeldItems)
{
var holdable = heldItem.GetComponent<Holdable>();
if (holdable?.Pusher != null)
{
ignoredBodies.Add(holdable.Pusher.FarseerBody);
}
}
float degreeOfFailure = 1.0f - DegreeOfSuccess(character);
degreeOfFailure *= degreeOfFailure;
if (degreeOfFailure > Rand.Range(0.0f, 1.0f))
@@ -311,6 +295,25 @@ namespace Barotrauma.Items.Components
}
float damageMultiplier = (1f + item.GetQualityModifier(Quality.StatType.FirepowerMultiplier)) * WeaponDamageModifier;
projectile.Launcher = item;
ignoredBodies.Clear();
if (!projectile.DamageUser)
{
foreach (Limb l in character.AnimController.Limbs)
{
if (l.IsSevered) { continue; }
ignoredBodies.Add(l.body.FarseerBody);
}
foreach (Item heldItem in character.HeldItems)
{
var holdable = heldItem.GetComponent<Holdable>();
if (holdable?.Pusher != null)
{
ignoredBodies.Add(holdable.Pusher.FarseerBody);
}
}
}
projectile.Shoot(character, character.AnimController.AimSourceSimPos, barrelPos, rotation + spread, ignoredBodies: ignoredBodies.ToList(), createNetworkEvent: false, damageMultiplier, LaunchImpulse);
projectile.Item.GetComponent<Rope>()?.Attach(Item, projectile.Item);
if (projectile.Item.body != null)
@@ -158,7 +158,7 @@ namespace Barotrauma.Items.Components
else
{
throwAngle = ThrowAngleStart;
ac.HoldItem(deltaTime, item, handlePos, itemPos: aimPos, aim: false, holdAngle);
ac.HoldItem(deltaTime, item, handlePos, itemPos: holdPos, aim: false, holdAngle);
}
}
else