From 41ddf3d7ebfc24f283e5aa3c92f10a26b4faaff1 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Fri, 6 Aug 2021 19:20:27 +0200 Subject: [PATCH] Further pickup animation improvements. --- Content.Client/Animations/ReusableAnimations.cs | 4 ++-- Content.Client/Hands/Systems/HandsSystem.cs | 2 +- Content.Client/Storage/ClientStorageComponent.cs | 4 ++-- Content.Server/Hands/Components/HandsComponent.cs | 12 ++++-------- .../Hands/Components/SharedHandsComponent.cs | 8 ++++---- .../Prototypes/Entities/Markers/clientsideclone.yml | 1 - 6 files changed, 13 insertions(+), 18 deletions(-) diff --git a/Content.Client/Animations/ReusableAnimations.cs b/Content.Client/Animations/ReusableAnimations.cs index eef860ce54..f6314348e9 100644 --- a/Content.Client/Animations/ReusableAnimations.cs +++ b/Content.Client/Animations/ReusableAnimations.cs @@ -11,7 +11,7 @@ namespace Content.Client.Animations { 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); animatableClone.Name = entity.Name; @@ -37,7 +37,7 @@ namespace Content.Client.Animations new AnimationTrackComponentProperty { ComponentType = typeof(ITransformComponent), - Property = nameof(ITransformComponent.WorldPosition), + Property = nameof(ITransformComponent.LocalPosition), InterpolationMode = AnimationInterpolationMode.Linear, KeyFrames = { diff --git a/Content.Client/Hands/Systems/HandsSystem.cs b/Content.Client/Hands/Systems/HandsSystem.cs index 5f2e40f2e5..255581effa 100644 --- a/Content.Client/Hands/Systems/HandsSystem.cs +++ b/Content.Client/Hands/Systems/HandsSystem.cs @@ -62,7 +62,7 @@ namespace Content.Client.Hands if (!_gameTiming.IsFirstTimePredicted) return; - ReusableAnimations.AnimateEntityPickup(entity, msg.InitialPosition, msg.PickupDirection); + ReusableAnimations.AnimateEntityPickup(entity, msg.InitialPosition, msg.FinalPosition); } public HandsGuiState GetGuiState() diff --git a/Content.Client/Storage/ClientStorageComponent.cs b/Content.Client/Storage/ClientStorageComponent.cs index 17039981ca..5f158365a6 100644 --- a/Content.Client/Storage/ClientStorageComponent.cs +++ b/Content.Client/Storage/ClientStorageComponent.cs @@ -116,11 +116,11 @@ namespace Content.Client.Storage for (var i = 0; msg.StoredEntities.Count > i; 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)) { - ReusableAnimations.AnimateEntityPickup(entity, initialPosition, Owner.Transform.WorldPosition); + ReusableAnimations.AnimateEntityPickup(entity, initialPosition, Owner.Transform.LocalPosition); } } } diff --git a/Content.Server/Hands/Components/HandsComponent.cs b/Content.Server/Hands/Components/HandsComponent.cs index 8f2579eaf6..7e6282c4c5 100644 --- a/Content.Server/Hands/Components/HandsComponent.cs +++ b/Content.Server/Hands/Components/HandsComponent.cs @@ -86,19 +86,15 @@ namespace Content.Server.Hands.Components 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; - while (outermostEntity.TryGetContainer(out var container)) //TODO: Use WorldPosition instead of this loop - outermostEntity = container.Owner; + var finalPosition = Owner.Transform.Coordinates.Position; - var initialPosition = outermostEntity.Transform.MapPosition; - - if (pickupDirection == initialPosition.Position) + if (finalPosition.EqualsApprox(initialPosition.Position)) return; Owner.EntityManager.EntityNetManager!.SendSystemNetworkMessage( - new PickupAnimationMessage(entity.Uid, pickupDirection, initialPosition)); + new PickupAnimationMessage(entity.Uid, finalPosition, initialPosition)); } #region Pull/Disarm diff --git a/Content.Shared/Hands/Components/SharedHandsComponent.cs b/Content.Shared/Hands/Components/SharedHandsComponent.cs index 3625502e0f..e98459a464 100644 --- a/Content.Shared/Hands/Components/SharedHandsComponent.cs +++ b/Content.Shared/Hands/Components/SharedHandsComponent.cs @@ -923,13 +923,13 @@ namespace Content.Shared.Hands.Components public class PickupAnimationMessage : EntityEventArgs { public EntityUid EntityUid { get; } - public MapCoordinates InitialPosition { get; } - public Vector2 PickupDirection { get; } + public EntityCoordinates InitialPosition { get; } + public Vector2 FinalPosition { get; } - public PickupAnimationMessage(EntityUid entityUid, Vector2 pickupDirection, MapCoordinates initialPosition) + public PickupAnimationMessage(EntityUid entityUid, Vector2 finalPosition, EntityCoordinates initialPosition) { EntityUid = entityUid; - PickupDirection = pickupDirection; + FinalPosition = finalPosition; InitialPosition = initialPosition; } } diff --git a/Resources/Prototypes/Entities/Markers/clientsideclone.yml b/Resources/Prototypes/Entities/Markers/clientsideclone.yml index a3c662c28a..e935d5685f 100644 --- a/Resources/Prototypes/Entities/Markers/clientsideclone.yml +++ b/Resources/Prototypes/Entities/Markers/clientsideclone.yml @@ -4,5 +4,4 @@ abstract: true components: - type: Sprite - - type: Physics - type: AnimationPlayer