Fix thrown entities getting parented to player parent (#4528)
This commit is contained in:
@@ -437,7 +437,7 @@ namespace Content.Shared.Hands.Components
|
|||||||
|
|
||||||
DoDroppedInteraction(heldEntity, intentionalDrop);
|
DoDroppedInteraction(heldEntity, intentionalDrop);
|
||||||
|
|
||||||
heldEntity.Transform.Coordinates = GetFinalDropCoordinates(targetDropLocation);
|
heldEntity.Transform.WorldPosition = GetFinalDropCoordinates(targetDropLocation);
|
||||||
|
|
||||||
OnItemChanged?.Invoke();
|
OnItemChanged?.Invoke();
|
||||||
}
|
}
|
||||||
@@ -445,29 +445,25 @@ namespace Content.Shared.Hands.Components
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Calculates the final location a dropped item will end up at, accounting for max drop range and collision along the targeted drop path.
|
/// Calculates the final location a dropped item will end up at, accounting for max drop range and collision along the targeted drop path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private EntityCoordinates GetFinalDropCoordinates(EntityCoordinates targetCoords)
|
private Vector2 GetFinalDropCoordinates(EntityCoordinates targetCoords)
|
||||||
{
|
{
|
||||||
var origin = Owner.Transform.MapPosition;
|
var origin = Owner.Transform.MapPosition;
|
||||||
var other = targetCoords.ToMap(Owner.EntityManager);
|
var target = targetCoords.ToMap(Owner.EntityManager);
|
||||||
|
|
||||||
var dropVector = other.Position - origin.Position;
|
var dropVector = target.Position - origin.Position;
|
||||||
var requestedDropDistance = (dropVector.Length);
|
var requestedDropDistance = dropVector.Length;
|
||||||
|
|
||||||
if (dropVector.Length > SharedInteractionSystem.InteractionRange)
|
if (dropVector.Length > SharedInteractionSystem.InteractionRange)
|
||||||
{
|
{
|
||||||
dropVector = dropVector.Normalized * SharedInteractionSystem.InteractionRange;
|
dropVector = dropVector.Normalized * SharedInteractionSystem.InteractionRange;
|
||||||
other = new MapCoordinates(origin.Position + dropVector, other.MapId);
|
target = new MapCoordinates(origin.Position + dropVector, target.MapId);
|
||||||
}
|
}
|
||||||
|
|
||||||
var dropLength = EntitySystem.Get<SharedInteractionSystem>().UnobstructedDistance(origin, other, ignoredEnt: Owner);
|
var dropLength = EntitySystem.Get<SharedInteractionSystem>().UnobstructedDistance(origin, target, ignoredEnt: Owner);
|
||||||
|
|
||||||
var diff = requestedDropDistance - dropLength;
|
if (dropLength < requestedDropDistance)
|
||||||
|
return origin.Position + dropVector.Normalized * dropLength;
|
||||||
// If we come up short then offset the drop location.
|
return target.Position;
|
||||||
if (diff > 0)
|
|
||||||
return targetCoords.Offset(-dropVector.Normalized * diff);
|
|
||||||
|
|
||||||
return targetCoords;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user