enemyStatus/FearEnemyStatus.cs
using Sandbox;
// unused
public class FearEnemyStatus : EnemyStatus
{
public float Lifetime { get; set; }
public float TimeScale { get; set; }
public Player Player { get; set; }
public TimeSince TimeSincePain { get; set; }
public float PainPercent { get; set; }
public override void Init( Enemy enemy )
{
base.Init( enemy );
enemy.CreateFearVfx();
enemy.IsFeared = true;
TimeScale = float.MaxValue;
TimeSincePain = 0f;
}
public void SetLifetime( float lifetime )
{
if ( lifetime > Lifetime )
{
Lifetime = lifetime;
}
}
public override void Update( float dt )
{
if ( Enemy == null || !Enemy.IsValid() )
return;
if ( ElapsedTime > Lifetime )
Enemy.RemoveEnemyStatus( this );
if ( TimeSincePain > 1f )
{
TimeSincePain = 0f;
if ( PainPercent > 0f )
{
float damage = PainPercent * Math.Max(Enemy.Health, 0f);
if ( damage > 0f )
Enemy.Damage( damage, Player, addVel: Vector2.Zero, addTempWeight: 0f, isCrit: false, DamageType.FearPain );
}
}
}
public override void StartDying()
{
Enemy.IsFeared = false;
if ( Player != null && Game.Random.Float( 0f, 1f ) < Player.Stats[PlayerStat.FearDropGrenadeChance] )
{
Player.SpawnGrenade(
pos: Enemy.Position2D + new Vector2( Enemy.Radius * Game.Random.Float( -1f, 1f ), Enemy.Radius * Game.Random.Float( -1f, 1f ) ),
vel: new Vector2( 0.5f * Game.Random.Float( -1f, 1f ), 0.5f * Game.Random.Float( -1f, 1f ) )
);
}
}
public override void Remove()
{
Enemy.IsFeared = false;
Enemy.RemoveFearVfx();
}
public override void Refresh()
{
ElapsedTime = 0f;
}
}