using UnityEngine;
namespace Crosstales.UI
{
/// Manager for a Window.
public class WindowManager : MonoBehaviour
{
#region Variables
/// Window movement speed (default: 3).
[Tooltip("Window movement speed (default: 3).")] public float Speed = 3f;
/// Dependent GameObjects (active == open).
[Tooltip("Dependent GameObjects (active == open).")] public GameObject[] Dependencies;
/// Close the window at Start (default: true).
[Tooltip("Close the window at Start (default: true).")] public bool ClosedAtStart = true;
private UIFocus focus;
private bool open;
private bool close;
private Vector3 startPos;
private Vector3 centerPos;
private Vector3 lerpPos;
private float openProgress;
private float closeProgress;
private GameObject panel;
private Transform tf;
#endregion
#region MonoBehaviour methods
private void Start()
{
tf = transform;
panel = tf.Find("Panel").gameObject;
startPos = tf.position;
if (ClosedAtStart)
{
ClosePanel();
panel.SetActive(false);
if (Dependencies != null)
{
foreach (GameObject go in Dependencies)
{
go.SetActive(false);
}
}
}
else
{
OpenPanel();
}
}
private void Update()
{
centerPos = new Vector3(Screen.width / 2f, Screen.height / 2f, 0);
if (open && openProgress < 1f)
{
openProgress += Speed * Time.deltaTime;
tf.position = Vector3.Lerp(lerpPos, centerPos, openProgress);
}
else if (close)
{
if (closeProgress < 1f)
{
closeProgress += Speed * Time.deltaTime;
tf.position = Vector3.Lerp(lerpPos, startPos, closeProgress);
}
else
{
panel.SetActive(false);
if (Dependencies != null)
{
foreach (GameObject go in Dependencies)
{
go.SetActive(false);
}
}
}
}
}
#endregion
#region Public methods
///Switch between open and close.
public void SwitchPanel()
{
if (open)
{
ClosePanel();
}
else
{
OpenPanel();
}
}
///Open the panel.
public void OpenPanel()
{
panel.SetActive(true);
if (Dependencies != null)
{
foreach (GameObject go in Dependencies)
{
go.SetActive(true);
}
}
focus = gameObject.GetComponent();
focus.OnPanelEnter();
lerpPos = tf.position;
open = true;
close = false;
openProgress = 0f;
}
///Close the panel.
public void ClosePanel()
{
lerpPos = tf.position;
open = false;
close = true;
closeProgress = 0f;
}
#endregion
}
}
// © 2017-2023 crosstales LLC (https://www.crosstales.com)