PlayerTest.cs
using SpriteTools;

public class PlayerTest : Component
{
	[Property] public SpriteRendererLayer SpriteRendererLayer { get; set; }
	[Property] public GameObject Body { get; set; }

	private bool _isFlipped;

	protected override void OnStart()
	{
		base.OnStart();

		//SpriteRendererLayer.OnBroadcastEvent += OnEvent;
	}

	protected override void OnUpdate()
	{
		base.OnUpdate();

		if ( Input.Pressed( "Slot1" ) )
		{
			SpriteRendererLayer.PlayAnimation( "idle" );
			//SpriteRendererLayer.Tint = Color.White.WithAlpha( 1f );
			Body.LocalRotation = new Angles( 0f, 0f, 0f );
			//Transform.LocalScale = new Vector3( 1f, 1f, 1f );
			//SpriteRendererLayer.FlashAmount = 0f;
			_isFlipped = false;
		}
		else if ( Input.Pressed( "Slot2" ) )
		{
			SpriteRendererLayer.PlayAnimation( "walk" );
			Body.LocalRotation = new Angles( 180f, 0f, 0f );
			//SpriteRendererLayer.Transform.Rotation = new Angles( 180f, 0f, 0f );
			//SpriteRendererLayer.Tint = Color.White.WithAlpha(0.5f);
			//Transform.LocalScale = new Vector3( 1f, -1f, 1f );

			//SpriteRendererLayer.FlashAmount = 1f;
			_isFlipped = true;
		}

		SpriteRendererLayer.Tint = Color.White;

		SpriteRendererLayer.LocalRotation = new Angles( 0f, -90f + (Utils.FastSin( Time.Now * 10f ) * 4f) * (_isFlipped ? -1f : 1f), 0f );
	}

	void OnEvent( string tag )
	{
		Log.Info( $"event: {tag}" );
	}

	protected override void OnDestroy()
	{
		base.OnDestroy();

		//SpriteRendererLayer.OnBroadcastEvent -= OnEvent;
	}
}