using System.Collections;
using UnityEngine;
using UnityEngine.UI;
namespace Exoa.TutorialEngine
{
public class Popup : MonoBehaviour
{
public Color backgroundColor = new Color(10.0f / 255.0f, 10.0f / 255.0f, 10.0f / 255.0f, 0.6f);
public bool createBackground = true;
private GameObject m_background;
///
/// Recenter the popup
///
public void Center()
{
RectTransform rt = transform as RectTransform;
rt.anchoredPosition = Vector2.zero;
}
///
/// Open the popup
///
public void Open()
{
var animator = GetComponent();
if (animator.GetCurrentAnimatorStateInfo(0).IsName("Close"))
animator.Play("Open");
AddBackground();
}
///
/// Hide the popup
///
public void Hide()
{
var animator = GetComponent();
if (animator.GetCurrentAnimatorStateInfo(0).IsName("Open"))
animator.Play("Close");
RemoveBackground();
}
///
/// Close the popup
///
public void Close()
{
var animator = GetComponent();
if (animator.GetCurrentAnimatorStateInfo(0).IsName("Open"))
animator.Play("Close");
RemoveBackground();
StartCoroutine(RunPopupDestroy());
}
private IEnumerator RunPopupDestroy()
{
yield return new WaitForSeconds(0.5f);
Destroy(m_background);
Destroy(gameObject);
}
private void AddBackground()
{
if (!createBackground)
return;
var bgTex = new Texture2D(1, 1);
bgTex.SetPixel(0, 0, backgroundColor);
bgTex.Apply();
m_background = new GameObject("PopupBackground");
var image = m_background.AddComponent();
var rect = new Rect(0, 0, bgTex.width, bgTex.height);
var sprite = Sprite.Create(bgTex, rect, new Vector2(0.5f, 0.5f), 1);
image.material.mainTexture = bgTex;
image.sprite = sprite;
var newColor = image.color;
image.color = newColor;
image.canvasRenderer.SetAlpha(0.0f);
image.CrossFadeAlpha(1.0f, 0.4f, false);
var canvas = transform.parent;
m_background.transform.localScale = new Vector3(1, 1, 1);
m_background.transform.SetParent(canvas.transform, false);
m_background.transform.SetSiblingIndex(transform.GetSiblingIndex());
RectTransform bgRect = m_background.GetComponent();
bgRect.anchorMin = new Vector2(0, 0);
bgRect.anchorMax = new Vector2(1, 1);
}
private void RemoveBackground()
{
if (m_background != null)
{
var image = m_background.GetComponent();
if (image != null)
image.CrossFadeAlpha(0.0f, 0.2f, false);
}
}
}
}