Player/Damage/DamageInfo.cs
using System.Numerics;
namespace Opium;
/// <summary>
/// A damage info struct. When inflicting damage on GameObjects, this is what we'll pass around.
/// </summary>
public partial class DamageInfo : Sandbox.DamageInfo
{
/// <summary>
/// The inflictor. This is normally the same as the attacker,
/// though it lets us pass another responsible GameObject, such as a weapon, or a projectile.
/// </summary>
[Property] public GameObject Inflictor { get; set; }
/// <summary>
/// A list of tags that we can parse when taking damage.
/// </summary>
[Property] public new string[] Tags { get; set; }
/// <summary>
/// Include some tags.
/// </summary>
/// <param name="tags"></param>
public void WithTags( params string[] tags )
{
Tags = tags;
}
/// <summary>
/// Do we have a tag?
/// </summary>
/// <param name="tag"></param>
/// <returns></returns>
public bool HasTag( string tag )
{
return Tags?.Contains( tag ) ?? false;
}
/// <summary>
/// Do we have any tag?
/// </summary>
/// <param name="tags"></param>
/// <returns></returns>
public bool HasAnyTag( params string[] tags )
{
foreach ( var tag in tags )
{
if ( HasTag( tag ) )
return true;
}
return false;
}
/// <summary>
/// Do we have all tags?
/// </summary>
/// <param name="tags"></param>
/// <returns></returns>
public bool HasAllTags( params string[] tags )
{
foreach ( var tag in tags )
{
if ( !HasTag( tag ) )
return false;
}
return true;
}
/// <summary>
/// Include an attacker.
/// </summary>
/// <param name="attacker"></param>
public void WithAttacker( GameObject attacker )
{
Attacker = attacker;
}
/// <summary>
/// Include an inflictor.
/// </summary>
/// <param name="inflictor"></param>
public void WithInflictor( GameObject inflictor )
{
Inflictor = inflictor;
}
}