unitStatus/UnitStatusInvincible.cs

A UnitStatus subclass that grants a unit invincibility while active. It sets the unit invincible on Init, times out based on Lifetime and ElapsedTime in Update, and clears invincibility in OnRemove.

using System;
using Sandbox;

public class UnitStatusInvincible : UnitStatus
{
	public UnitStatusInvincible()
	{

	}

	public override void Init( Unit unit )
	{
		base.Init( unit );

		Unit.SetStateInvincible( true );
	}

	public override void Update( float dt )
	{
		base.Update( dt );

		if ( !Unit.IsValid() )
			return;

		if ( Lifetime > 0f && ElapsedTime > Lifetime )
			Unit.RemoveUnitStatus( this );
	}

	public override void OnRemove( bool playEffects = true )
	{
		//Log.Info( $"removing invincibility from {Unit} playEffects: {playEffects}" );

		Unit.SetStateInvincible( false, playEffects );
	}

	public override void Refresh()
	{
		base.Refresh();

	}
}