66 lines
1.6 KiB
C#
66 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
namespace OTG.Lab06.Characters
|
|
{
|
|
public sealed class ManaCrystal : MonoBehaviour
|
|
{
|
|
[SerializeField] private float restoreAmount = 35f;
|
|
[SerializeField] private float respawnTime = 7f;
|
|
[SerializeField] private GameObject visualRoot;
|
|
|
|
private Collider triggerCollider;
|
|
private float cooldown;
|
|
|
|
private void Awake()
|
|
{
|
|
triggerCollider = GetComponent<Collider>();
|
|
if (visualRoot == null && transform.childCount > 0)
|
|
{
|
|
visualRoot = transform.GetChild(0).gameObject;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
transform.Rotate(Vector3.up, 45f * Time.deltaTime, Space.World);
|
|
|
|
if (cooldown <= 0f)
|
|
{
|
|
return;
|
|
}
|
|
|
|
cooldown -= Time.deltaTime;
|
|
if (cooldown <= 0f)
|
|
{
|
|
SetAvailable(true);
|
|
}
|
|
}
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
PlayerStats stats = other.GetComponentInParent<PlayerStats>();
|
|
if (stats == null || cooldown > 0f)
|
|
{
|
|
return;
|
|
}
|
|
|
|
stats.RestoreMana(restoreAmount);
|
|
cooldown = respawnTime;
|
|
SetAvailable(false);
|
|
}
|
|
|
|
private void SetAvailable(bool available)
|
|
{
|
|
if (triggerCollider != null)
|
|
{
|
|
triggerCollider.enabled = available;
|
|
}
|
|
|
|
if (visualRoot != null)
|
|
{
|
|
visualRoot.SetActive(available);
|
|
}
|
|
}
|
|
}
|
|
}
|