Further pickup animation improvements.

This commit is contained in:
Vera Aguilera Puerto
2021-08-06 19:20:27 +02:00
parent 5c719a3376
commit 41ddf3d7eb
6 changed files with 13 additions and 18 deletions

View File

@@ -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 =
{ {

View File

@@ -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()

View File

@@ -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);
} }
} }
} }

View File

@@ -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

View File

@@ -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;
} }
} }

View File

@@ -4,5 +4,4 @@
abstract: true abstract: true
components: components:
- type: Sprite - type: Sprite
- type: Physics
- type: AnimationPlayer - type: AnimationPlayer