From c5f145786f4c6d2fe4bea831dfc16e52228920a5 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Sun, 19 May 2024 16:05:01 +0800 Subject: * move --- Thronefall_1_0/GameCode/AutoRevive.cs | 91 +++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Thronefall_1_0/GameCode/AutoRevive.cs (limited to 'Thronefall_1_0/GameCode/AutoRevive.cs') diff --git a/Thronefall_1_0/GameCode/AutoRevive.cs b/Thronefall_1_0/GameCode/AutoRevive.cs new file mode 100644 index 0000000..63c2d75 --- /dev/null +++ b/Thronefall_1_0/GameCode/AutoRevive.cs @@ -0,0 +1,91 @@ +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; + } + } +} -- cgit v1.1-26-g67d0