using UnityEngine; using UnityEngine.Events; [RequireComponent(typeof(Hp))] public class AutoRevive : MonoBehaviour, DayNightCycle.IDaytimeSensitive { [HideInInspector] public UnityEvent onReviveTrigger = new UnityEvent(); private Hp hp; public float reviveAfterBeingKnockedOutFor = 20f; private float hasBeenKnockedOutFor; private bool ringOfResurection; private bool quickReviveAvailable = true; private bool godOfDeathActive; [SerializeField] private Equippable ringOfResurectionPerk; private float ReviveAfterBeingKnockedOutFor { get { if (ringOfResurection && quickReviveAvailable) { return 2f; } return reviveAfterBeingKnockedOutFor; } } public float TimeTillRevive { get { if (hasBeenKnockedOutFor <= 0f) { return -1f; } return ReviveAfterBeingKnockedOutFor - hasBeenKnockedOutFor; } } public void OnDusk() { } public void OnDawn_AfterSunrise() { quickReviveAvailable = true; } public void OnDawn_BeforeSunrise() { } private void Start() { godOfDeathActive = PerkManager.instance.GodOfDeathActive; if (godOfDeathActive) { reviveAfterBeingKnockedOutFor *= PerkManager.instance.godOfDeath_playerRespawnMultiplyer; } hp = GetComponent(); ringOfResurection = PerkManager.IsEquipped(ringOfResurectionPerk); DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this); } private void Update() { if (hp.KnockedOut) { hasBeenKnockedOutFor += Time.deltaTime; if (hasBeenKnockedOutFor >= ReviveAfterBeingKnockedOutFor) { hp.Revive(); onReviveTrigger.Invoke(); quickReviveAvailable = false; } } else { hasBeenKnockedOutFor = 0f; } } }