160 lines
4.4 KiB
C#
160 lines
4.4 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Linq.Expressions;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.Events;
|
||
using UnityEngine.EventSystems;
|
||
using UnityEngine.UI;
|
||
|
||
namespace Beyond
|
||
{
|
||
public class SkipButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
|
||
{
|
||
[SerializeField] private Image m_skipImage;
|
||
[SerializeField] private TextMeshProUGUI m_description;
|
||
[SerializeField] private TextMeshProUGUI m_Paused;
|
||
[SerializeField] private AnimationCurve m_showCurve;
|
||
[SerializeField] private bool m_onlySkip = true;
|
||
private SkipCanvas m_skipCanvas;
|
||
private bool m_isPaused = false;
|
||
|
||
public float m_skipTime = 2f;
|
||
public float m_quickTapTime = 0.1f;
|
||
public float m_showTime = 3f;
|
||
private float m_showTimer;
|
||
|
||
private bool m_isTouching = false;
|
||
|
||
private float m_timer = 0f;
|
||
private int m_tapCounter = 0;
|
||
|
||
// Nowe eventy
|
||
public UnityEvent OnStartSkip;
|
||
public UnityEvent OnEndSkip;
|
||
|
||
void Awake()
|
||
{
|
||
m_skipCanvas = gameObject.FindComponentUpHierarchy<SkipCanvas>();
|
||
}
|
||
|
||
private void OnEnable()
|
||
{
|
||
m_timer = 0f;
|
||
m_tapCounter = 0;
|
||
m_isTouching = false;
|
||
m_isPaused = false;
|
||
m_Paused.gameObject.SetActive(false);
|
||
m_skipImage.gameObject.SetActive(false);
|
||
m_description.gameObject.SetActive(false);
|
||
}
|
||
|
||
private void Pause()
|
||
{
|
||
m_isPaused = !m_isPaused;
|
||
m_Paused.gameObject.SetActive(m_isPaused);
|
||
if (m_skipCanvas) m_skipCanvas.OnPause();
|
||
}
|
||
|
||
void Update()
|
||
{
|
||
if (m_isTouching)
|
||
{
|
||
if (!m_isPaused)
|
||
{
|
||
if (m_timer > m_skipTime)
|
||
{
|
||
if (m_skipCanvas) m_skipCanvas.OnSkip();
|
||
OnEndSkip?.Invoke(); // Wywo<77>anie eventu ko<6B>ca skipowania
|
||
m_isTouching = false;
|
||
m_timer = 0f;
|
||
}
|
||
if (m_timer > m_quickTapTime && !m_skipImage.gameObject.activeSelf)
|
||
{
|
||
ShowSkip();
|
||
}
|
||
m_skipImage.fillAmount = m_timer / m_skipTime;
|
||
}
|
||
|
||
m_timer += Time.deltaTime;
|
||
}
|
||
else if (!m_onlySkip)
|
||
{
|
||
if (m_timer > m_quickTapTime)
|
||
{
|
||
if (m_tapCounter == 1)
|
||
{
|
||
Pause();
|
||
}
|
||
else if (m_tapCounter == 2)
|
||
{
|
||
if (m_skipCanvas) m_skipCanvas.OnRestart();
|
||
}
|
||
|
||
m_tapCounter = 0;
|
||
}
|
||
m_timer += Time.deltaTime;
|
||
}
|
||
UpdateShow();
|
||
}
|
||
|
||
private void UpdateShow()
|
||
{
|
||
if (m_description.gameObject.activeSelf)
|
||
{
|
||
if (m_showTimer < m_showTime)
|
||
{
|
||
m_description.alpha = m_showCurve.Evaluate(m_showTimer / m_showTime);
|
||
}
|
||
else
|
||
{
|
||
m_description.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
|
||
m_showTimer += Time.unscaledDeltaTime;
|
||
}
|
||
|
||
private void ShowDescription()
|
||
{
|
||
m_showTimer = 0f;
|
||
m_description.gameObject.SetActive(true);
|
||
}
|
||
|
||
private void ShowSkip()
|
||
{
|
||
m_skipImage.gameObject.SetActive(true);
|
||
m_skipImage.fillAmount = 0f;
|
||
OnStartSkip?.Invoke(); // Wywo<77>anie eventu startu skipowania
|
||
}
|
||
|
||
public void OnPointerDown(PointerEventData eventData)
|
||
{
|
||
ShowDescription();
|
||
m_isTouching = true;
|
||
m_timer = 0f;
|
||
}
|
||
|
||
public void OnPointerUp(PointerEventData eventData)
|
||
{
|
||
if (m_timer < m_quickTapTime)
|
||
{
|
||
m_tapCounter++;
|
||
m_timer = 0f;
|
||
}
|
||
|
||
if (m_skipImage)
|
||
{
|
||
m_skipImage.gameObject.SetActive(false);
|
||
m_skipImage.fillAmount = 0f;
|
||
}
|
||
m_isTouching = false;
|
||
}
|
||
|
||
public void OnDrag(PointerEventData eventData)
|
||
{
|
||
}
|
||
}
|
||
}
|