2021-03-10 14:48:29 +01:00
using System ;
2021-02-03 22:07:13 +00:00
using Robust.Client.Animations ;
using Robust.Client.GameObjects ;
using Robust.Shared.Animations ;
2021-03-10 14:48:29 +01:00
using Robust.Shared.GameObjects ;
2021-12-03 11:11:52 +01:00
using Robust.Shared.IoC ;
2021-02-03 22:07:13 +00:00
using Robust.Shared.Log ;
using Robust.Shared.Map ;
using Robust.Shared.Maths ;
namespace Content.Client.Animations
{
public static class ReusableAnimations
{
2021-12-08 11:37:10 +01:00
public static void AnimateEntityPickup ( EntityUid entity , EntityCoordinates initialPosition , Vector2 finalPosition , IEntityManager ? entMan = null )
2021-02-03 22:07:13 +00:00
{
2021-12-08 11:37:10 +01:00
IoCManager . Resolve ( ref entMan ) ;
2021-12-11 15:29:16 +01:00
if ( entMan . Deleted ( entity ) | | ! initialPosition . IsValid ( entMan ) )
return ;
2021-12-08 11:37:10 +01:00
var animatableClone = entMan . SpawnEntity ( "clientsideclone" , initialPosition ) ;
string val = entMan . GetComponent < MetaDataComponent > ( entity ) . EntityName ;
entMan . GetComponent < MetaDataComponent > ( animatableClone ) . EntityName = val ;
2021-02-03 22:07:13 +00:00
2021-12-08 11:37:10 +01:00
if ( ! entMan . TryGetComponent ( entity , out SpriteComponent ? sprite0 ) )
2021-02-03 22:07:13 +00:00
{
2021-12-08 11:37:10 +01:00
Logger . Error ( "Entity ({0}) couldn't be animated for pickup since it doesn't have a {1}!" , entMan . GetComponent < MetaDataComponent > ( entity ) . EntityName , nameof ( SpriteComponent ) ) ;
2021-02-03 22:07:13 +00:00
return ;
}
2021-12-08 11:37:10 +01:00
var sprite = entMan . GetComponent < SpriteComponent > ( animatableClone ) ;
2021-02-03 22:07:13 +00:00
sprite . CopyFrom ( sprite0 ) ;
2022-01-05 17:53:08 +13:00
sprite . Visible = true ;
2021-02-03 22:07:13 +00:00
2021-12-08 11:37:10 +01:00
var animations = entMan . GetComponent < AnimationPlayerComponent > ( animatableClone ) ;
2021-03-10 14:48:29 +01:00
animations . AnimationCompleted + = ( _ ) = > {
2021-12-08 11:37:10 +01:00
entMan . DeleteEntity ( animatableClone ) ;
2021-02-03 22:07:13 +00:00
} ;
animations . Play ( new Animation
{
Length = TimeSpan . FromMilliseconds ( 125 ) ,
AnimationTracks =
{
new AnimationTrackComponentProperty
{
2021-11-08 12:37:32 +01:00
ComponentType = typeof ( TransformComponent ) ,
Property = nameof ( TransformComponent . LocalPosition ) ,
2021-02-03 22:07:13 +00:00
InterpolationMode = AnimationInterpolationMode . Linear ,
KeyFrames =
{
2021-03-10 14:48:29 +01:00
new AnimationTrackProperty . KeyFrame ( initialPosition . Position , 0 ) ,
new AnimationTrackProperty . KeyFrame ( finalPosition , 0.125f )
2021-02-03 22:07:13 +00:00
}
}
}
} , "fancy_pickup_anim" ) ;
}
}
}