mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-01-02 11:28:19 -05:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
47 lines
997 B
C#
47 lines
997 B
C#
|
|
namespace Sandbox;
|
|
|
|
/// <summary>
|
|
/// Applies fire damage to any IDamageable in our Root object.
|
|
/// Damage is tagged "fire" and "burn"
|
|
/// </summary>
|
|
[Expose]
|
|
[Title( "Fire Damage" )]
|
|
[Category( "Game" )]
|
|
[Icon( "local_fire_department" )]
|
|
public sealed class FireDamage : Component
|
|
{
|
|
const float _damageInterval = 0.2f;
|
|
|
|
/// <summary>
|
|
/// How much damage to apply per second
|
|
/// </summary>
|
|
[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<IDamageable>( x => x.OnDamage( damageInfo ) );
|
|
}
|
|
}
|