Weapons/Base/CameraEffect.cs
namespace Opium;

public partial class CameraEffect : Component
{
	[Property] public Opium.PlayerController Player { get; set; }

	/// <summary>
	/// Create a regular camera effect
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <param name="player"></param>
	/// <returns></returns>
	public static T Create<T>( Opium.PlayerController player ) where T : CameraEffect
	{
		var newEffect = player.Components.Create( TypeLibrary.GetType<T>(), true ) as CameraEffect;
		newEffect.Player = player;

		return (T)newEffect;
	}

	/// <summary>
	/// Create a melee weapon effect
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <param name="player"></param>
	/// <param name="weapon"></param>
	/// <returns></returns>
	public static T Create<T>( Opium.PlayerController player, MeleeWeapon weapon ) where T : WeaponEffect
	{
		var newEffect = Create<T>( player ) as WeaponEffect;
		newEffect.Weapon = weapon;

		return (T)newEffect;
	}

	/// <summary>
	/// We'll tick these effects, if returning true we'll kill the effect.
	/// </summary>
	/// <returns></returns>
	public virtual bool TickEffect()
	{
		return false;
	}

	protected override void OnUpdate()
	{
		if ( Player is null ) Player = Components.Get<Opium.PlayerController>( FindMode.EverythingInSelfAndAncestors );

		if ( TickEffect() )
		{
			Enabled = false;
		}
	}
}