Further pickup animation improvements.
This commit is contained in:
@@ -11,7 +11,7 @@ namespace Content.Client.Animations
|
|||||||
{
|
{
|
||||||
public static class ReusableAnimations
|
public static class ReusableAnimations
|
||||||
{
|
{
|
||||||
public static void AnimateEntityPickup(IEntity entity, MapCoordinates initialPosition, Vector2 finalPosition)
|
public static void AnimateEntityPickup(IEntity entity, EntityCoordinates initialPosition, Vector2 finalPosition)
|
||||||
{
|
{
|
||||||
var animatableClone = entity.EntityManager.SpawnEntity("clientsideclone", initialPosition);
|
var animatableClone = entity.EntityManager.SpawnEntity("clientsideclone", initialPosition);
|
||||||
animatableClone.Name = entity.Name;
|
animatableClone.Name = entity.Name;
|
||||||
@@ -37,7 +37,7 @@ namespace Content.Client.Animations
|
|||||||
new AnimationTrackComponentProperty
|
new AnimationTrackComponentProperty
|
||||||
{
|
{
|
||||||
ComponentType = typeof(ITransformComponent),
|
ComponentType = typeof(ITransformComponent),
|
||||||
Property = nameof(ITransformComponent.WorldPosition),
|
Property = nameof(ITransformComponent.LocalPosition),
|
||||||
InterpolationMode = AnimationInterpolationMode.Linear,
|
InterpolationMode = AnimationInterpolationMode.Linear,
|
||||||
KeyFrames =
|
KeyFrames =
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ namespace Content.Client.Hands
|
|||||||
if (!_gameTiming.IsFirstTimePredicted)
|
if (!_gameTiming.IsFirstTimePredicted)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ReusableAnimations.AnimateEntityPickup(entity, msg.InitialPosition, msg.PickupDirection);
|
ReusableAnimations.AnimateEntityPickup(entity, msg.InitialPosition, msg.FinalPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HandsGuiState GetGuiState()
|
public HandsGuiState GetGuiState()
|
||||||
|
|||||||
@@ -116,11 +116,11 @@ namespace Content.Client.Storage
|
|||||||
for (var i = 0; msg.StoredEntities.Count > i; i++)
|
for (var i = 0; msg.StoredEntities.Count > i; i++)
|
||||||
{
|
{
|
||||||
var entityId = msg.StoredEntities[i];
|
var entityId = msg.StoredEntities[i];
|
||||||
var initialPosition = msg.EntityPositions[i].ToMap(Owner.EntityManager);
|
var initialPosition = msg.EntityPositions[i];
|
||||||
|
|
||||||
if (Owner.EntityManager.TryGetEntity(entityId, out var entity))
|
if (Owner.EntityManager.TryGetEntity(entityId, out var entity))
|
||||||
{
|
{
|
||||||
ReusableAnimations.AnimateEntityPickup(entity, initialPosition, Owner.Transform.WorldPosition);
|
ReusableAnimations.AnimateEntityPickup(entity, initialPosition, Owner.Transform.LocalPosition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,19 +86,15 @@ namespace Content.Server.Hands.Components
|
|||||||
|
|
||||||
protected override void HandlePickupAnimation(IEntity entity)
|
protected override void HandlePickupAnimation(IEntity entity)
|
||||||
{
|
{
|
||||||
var pickupDirection = Owner.Transform.MapPosition.Position;
|
var initialPosition = EntityCoordinates.FromMap(Owner.Transform.Coordinates.GetParent(Owner.EntityManager), entity.Transform.MapPosition);
|
||||||
|
|
||||||
var outermostEntity = entity;
|
var finalPosition = Owner.Transform.Coordinates.Position;
|
||||||
while (outermostEntity.TryGetContainer(out var container)) //TODO: Use WorldPosition instead of this loop
|
|
||||||
outermostEntity = container.Owner;
|
|
||||||
|
|
||||||
var initialPosition = outermostEntity.Transform.MapPosition;
|
if (finalPosition.EqualsApprox(initialPosition.Position))
|
||||||
|
|
||||||
if (pickupDirection == initialPosition.Position)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Owner.EntityManager.EntityNetManager!.SendSystemNetworkMessage(
|
Owner.EntityManager.EntityNetManager!.SendSystemNetworkMessage(
|
||||||
new PickupAnimationMessage(entity.Uid, pickupDirection, initialPosition));
|
new PickupAnimationMessage(entity.Uid, finalPosition, initialPosition));
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Pull/Disarm
|
#region Pull/Disarm
|
||||||
|
|||||||
@@ -923,13 +923,13 @@ namespace Content.Shared.Hands.Components
|
|||||||
public class PickupAnimationMessage : EntityEventArgs
|
public class PickupAnimationMessage : EntityEventArgs
|
||||||
{
|
{
|
||||||
public EntityUid EntityUid { get; }
|
public EntityUid EntityUid { get; }
|
||||||
public MapCoordinates InitialPosition { get; }
|
public EntityCoordinates InitialPosition { get; }
|
||||||
public Vector2 PickupDirection { get; }
|
public Vector2 FinalPosition { get; }
|
||||||
|
|
||||||
public PickupAnimationMessage(EntityUid entityUid, Vector2 pickupDirection, MapCoordinates initialPosition)
|
public PickupAnimationMessage(EntityUid entityUid, Vector2 finalPosition, EntityCoordinates initialPosition)
|
||||||
{
|
{
|
||||||
EntityUid = entityUid;
|
EntityUid = entityUid;
|
||||||
PickupDirection = pickupDirection;
|
FinalPosition = finalPosition;
|
||||||
InitialPosition = initialPosition;
|
InitialPosition = initialPosition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,5 +4,4 @@
|
|||||||
abstract: true
|
abstract: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
- type: Physics
|
|
||||||
- type: AnimationPlayer
|
- type: AnimationPlayer
|
||||||
|
|||||||
Reference in New Issue
Block a user