Files
2024-11-20 15:21:28 +01:00

123 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#pragma warning disable CS0649
#if EPO_DOTWEEN
using DG.Tweening;
#endif
namespace EPOOutline.Demo
{
public class BubbleSpot : MonoBehaviour
{
[SerializeField]
private Transform trackPosition;
[SerializeField]
private Vector3 trackShift;
[SerializeField]
private Camera targetCamera;
[SerializeField]
private Transform bubble;
[SerializeField]
private bool visibleFromBegining = false;
[SerializeField]
private float showDelay = 0.0f;
[SerializeField]
private float showDuration = 5.0f;
[SerializeField]
private bool once;
private bool wasShown = false;
private int playersInside = 0;
private IEnumerator Start()
{
Hide(0.0f);
if (!visibleFromBegining)
yield break;
yield return new WaitForSeconds(showDelay);
Show();
yield return new WaitForSeconds(showDuration);
Hide();
}
private void Reset()
{
targetCamera = FindObjectOfType<Camera>();
}
private void OnTriggerEnter(Collider other)
{
if (!other.GetComponent<Character>())
return;
if (playersInside++ == 0)
Show();
}
private void OnTriggerExit(Collider other)
{
if (!other.GetComponent<Character>())
return;
if (--playersInside == 0)
Hide();
}
private void Show()
{
if (wasShown && once)
return;
wasShown = true;
Show(0.5f);
}
private void Hide()
{
Hide(0.15f);
}
private void Hide(float duration)
{
#if EPO_DOTWEEN
bubble.transform.DOKill(true);
bubble.transform.DOScale(Vector3.zero, duration);
#else
bubble.gameObject.SetActive(false);
#endif
}
private void Show(float duration)
{
#if EPO_DOTWEEN
bubble.transform.DOKill(true);
bubble.transform.DOScale(Vector3.one, duration).SetEase(Ease.OutElastic, 0.00001f);
#else
bubble.gameObject.SetActive(true);
#endif
}
private void Update()
{
if (trackPosition)
transform.position = trackPosition.position + trackShift;
bubble.transform.position = targetCamera.WorldToScreenPoint(transform.position);
}
}
}