namespace Sandbox;
///
/// Applies fire damage to any IDamageable in our Root object.
/// Damage is tagged "fire" and "burn"
///
[Expose]
[Title( "Fire Damage" )]
[Category( "Game" )]
[Icon( "local_fire_department" )]
public sealed class FireDamage : Component
{
const float _damageInterval = 0.2f;
///
/// How much damage to apply per second
///
[Property] public float DamagePerSecond = 20;
TimeSince _timeSinceDamage = 0.1f;
protected override void OnFixedUpdate()
{
if ( IsProxy )
return;
if ( _timeSinceDamage > _damageInterval )
{
_timeSinceDamage = 0;
InflictDamage();
}
}
void InflictDamage()
{
var damageInfo = new DamageInfo();
damageInfo.Position = WorldPosition;
damageInfo.Origin = WorldPosition;
damageInfo.Tags.Add( "fire" );
damageInfo.Tags.Add( "burn" );
damageInfo.Damage = DamagePerSecond * _damageInterval;
GameObject.Root.RunEvent( x => x.OnDamage( damageInfo ) );
}
}