charms/CharmExtraLife.cs

Charm component that grants the player one extra life. Resets usage at run start, prevents a death once by restoring HP, giving brief invincibility, showing a chat message and spawning a floater.

NetworkingFile Access
public class CharmExtraLife : Charm
{
	public const string ItemId = "charm_extra_life";

	public static string Description() => $"+1 extra life";

	private bool _used;

	public override void OnRunStart()
	{
		_used = false;
	}

	public override bool TryPreventDeath()
	{
		if ( _used )
			return false;

		_used = true;
		Player.Health = Player.Stats[PlayerStat.MaxHp];
		Player.BecomeInvincible( 1.5f );

		// todo: sfx

		Manager.Instance.Chat.AddLocalChatMessage( $"{ProgressManager.GetItemRichTextToken( ItemId )} Used extra life!", from: "" );

		Manager.Instance.SpawnFloaterTextRpc( Player.WorldPosition.WithZ( 65f ), "EXTRA LIFE!", new Color( 1f, 1f, 0.5f ), size: 1.2f, floaterType: FloaterType.PositiveMessage );

		return true;
	}
}