///by邓陶然
using UnityEngine;
public class LaterCreator : MonoBehaviour
{
public delegate GameObject CreatorCallBack();
public CreatorCallBack _creatorCallBack;
public System.Object CallBackObj;
/// <summary>
/// 获取已创建成功的对象。
/// </summary>
public GameObject CreatedGameObject { get; private set; }
private bool allreadyCreator;
private UIWidget uiw;
public UIPanel panel;
public bool alwaysShow;
private void Start ()
{
if(panel == null)
{
panel = GetComponentInParent<UIPanel>();
}
}
/// <summary>
/// 设置单元大小
/// </summary>
/// <param name="size"></param>
public void SetSize(Vector3 size)
{
uiw = gameObject.AddComponent<UIWidget>();
uiw.SetRect(0,0,size.x,size.y);
// Update();
}
private void OnEnable()
{
if(panel == null)
{
panel = GetComponentInParent<UIPanel>();
}
}
private void Update ()
{
if(IsInView())
{
if(allreadyCreator && CreatedGameObject != null)
{
CreatedGameObject.SetActive(true);
}
else
{
if(_creatorCallBack != null && !allreadyCreator)
{
CreatedGameObject = _creatorCallBack();
allreadyCreator = true;
}
}
}
else
{
if(allreadyCreator && CreatedGameObject != null)
{
if (alwaysShow)
{
CreatedGameObject.SetActive(true);
}
else
{
CreatedGameObject.SetActive(false);
}
}
}
}
public void Reflush()
{
Update();
}
/// <summary>
/// 强制创建或使对象可见
/// </summary>
public void ForceOpen()
{
if(allreadyCreator && CreatedGameObject != null)
{
CreatedGameObject.SetActive(true);
}
else
{
if(_creatorCallBack != null && !allreadyCreator)
{
CreatedGameObject = _creatorCallBack();
allreadyCreator = true;
}
}
}
/// <summary>
/// 是否在视图中可见
/// </summary>
/// <returns></returns>
private bool IsInView()
{
if (panel == null)
{
return false;
}
return panel.IsVisible(uiw);
}
}