Remove obsolete usages of AnimationPlayerComponent (#20806)
This commit is contained in:
87
Content.Client/Animations/EntityPickupAnimationSystem.cs
Normal file
87
Content.Client/Animations/EntityPickupAnimationSystem.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System.Numerics;
|
||||
using Robust.Client.Animations;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Shared.Animations;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Spawners;
|
||||
using static Robust.Client.Animations.AnimationTrackProperty;
|
||||
|
||||
namespace Content.Client.Animations;
|
||||
|
||||
/// <summary>
|
||||
/// System that handles animating an entity that a player has picked up.
|
||||
/// </summary>
|
||||
public sealed class EntityPickupAnimationSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly AnimationPlayerSystem _animations = default!;
|
||||
[Dependency] private readonly MetaDataSystem _metaData = default!;
|
||||
[Dependency] private readonly TransformSystem _transform = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<EntityPickupAnimationComponent, AnimationCompletedEvent>(OnEntityPickupAnimationCompleted);
|
||||
}
|
||||
|
||||
private void OnEntityPickupAnimationCompleted(EntityUid uid, EntityPickupAnimationComponent component, AnimationCompletedEvent args)
|
||||
{
|
||||
Del(uid);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Animates a clone of an entity moving from one point to another before
|
||||
/// being deleted.
|
||||
/// Used when the player picks up an entity.
|
||||
/// </summary>
|
||||
public void AnimateEntityPickup(EntityUid uid, EntityCoordinates initial, Vector2 final, Angle initialAngle)
|
||||
{
|
||||
if (Deleted(uid) || !initial.IsValid(EntityManager))
|
||||
return;
|
||||
|
||||
var metadata = MetaData(uid);
|
||||
|
||||
if (IsPaused(uid, metadata))
|
||||
return;
|
||||
|
||||
var animatableClone = Spawn("clientsideclone", initial);
|
||||
EnsureComp<EntityPickupAnimationComponent>(animatableClone);
|
||||
var val = metadata.EntityName;
|
||||
_metaData.SetEntityName(animatableClone, val);
|
||||
|
||||
if (!TryComp(uid, out SpriteComponent? sprite0))
|
||||
{
|
||||
Log.Error("Entity ({0}) couldn't be animated for pickup since it doesn't have a {1}!", metadata.EntityName, nameof(SpriteComponent));
|
||||
return;
|
||||
}
|
||||
|
||||
var sprite = Comp<SpriteComponent>(animatableClone);
|
||||
sprite.CopyFrom(sprite0);
|
||||
sprite.Visible = true;
|
||||
|
||||
var animations = Comp<AnimationPlayerComponent>(animatableClone);
|
||||
|
||||
var despawn = EnsureComp<TimedDespawnComponent>(animatableClone);
|
||||
despawn.Lifetime = 0.25f;
|
||||
_transform.SetLocalRotationNoLerp(animatableClone, initialAngle);
|
||||
|
||||
_animations.Play(animatableClone, animations, new Animation
|
||||
{
|
||||
Length = TimeSpan.FromMilliseconds(125),
|
||||
AnimationTracks =
|
||||
{
|
||||
new AnimationTrackComponentProperty
|
||||
{
|
||||
ComponentType = typeof(TransformComponent),
|
||||
Property = nameof(TransformComponent.LocalPosition),
|
||||
InterpolationMode = AnimationInterpolationMode.Linear,
|
||||
KeyFrames =
|
||||
{
|
||||
new KeyFrame(initial.Position, 0),
|
||||
new KeyFrame(final, 0.125f)
|
||||
}
|
||||
},
|
||||
}
|
||||
}, "fancy_pickup_anim");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user