Player/Damage/DamageInfo.Static.cs
namespace Opium;

public partial class DamageInfo
{
	/// <summary>
	/// Creates a generic DamageInfo struct.
	/// </summary>
	public static DamageInfo Generic( float damage, GameObject attacker = null, GameObject inflictor = null, params string[] tags )
	{
		return new DamageInfo
		{
			Damage = damage,
			Attacker = attacker,
			Inflictor = inflictor,
			Position = attacker.IsValid() ? attacker.WorldPosition : default,
			Tags = tags
		};
	}

	/// <summary>
	/// Creates a DamageInfo struct assuming it's bullet damage.
	/// </summary>
	public static DamageInfo Bullet( float damage, GameObject attacker, GameObject inflictor = null, Hitbox hitbox = null )
	{
		if ( !inflictor.IsValid() ) inflictor = attacker;

		return new DamageInfo
		{
			Damage = damage,
			Attacker = attacker,
			Inflictor = inflictor,
			Position = attacker.IsValid() ? attacker.Transform.Position : Vector3.Zero,
			Hitbox = hitbox,
			Tags = new[] { "bullet" }
		};
	}
}