World/RelicPropAnimator.cs
using System;

namespace Prototype;

public enum RelicPropMode { Chest, Portal }

public sealed class RelicPropAnimator : Component
{
	public RelicPropMode Mode { get; set; }
	private Vector3 _origin;
	private Rotation _rotation;

	protected override void OnStart() { _origin = WorldPosition; _rotation = WorldRotation; }

	protected override void OnUpdate()
	{
		if ( Mode == RelicPropMode.Portal )
		{
			WorldRotation = _rotation * Rotation.FromYaw( Time.Now * 22f );
			WorldPosition = _origin + Vector3.Up * (MathF.Sin( Time.Now * 2.4f ) * 5f);
		}
		else
		{
			WorldPosition = _origin + Vector3.Up * (MathF.Sin( Time.Now * 1.8f ) * 2f);
		}
	}
}