using UnityEngine;
namespace VketCloudGUITools.Runtime
{
///
/// GUIアイテム
/// Selectableではない、最小のUI用
///
public abstract class VCGUIItemBehaviour : MonoBehaviour, IVCGUIItem, IHasVCTransform
{
[SerializeField] protected VCLayerList _parentLayer = null;
[SerializeField] protected VCTransform _vcTransform;
[SerializeField] protected bool _visible = false;
public VCLayerList ParentLayer => _parentLayer;
public VCTransform VcTransform
{
get
{
if (_vcTransform == null)
{
GetOrAddVCGUITransform();
}
return _vcTransform;
}
}
public virtual void ResolveRequireComponents()
{
_vcTransform = GetComponent();
}
#if UNITY_EDITOR
protected void Reset()
{
ResolveRequireComponents();
}
#endif
public virtual bool IsValid()
{
return false;
}
public bool Visible
{
get => _visible;
protected set
{
if (_visible != value)
{
_visible = value;
OnVisibleChanged();
}
}
}
public bool Show
{
get => gameObject.activeSelf;
set
{
gameObject.SetActive(value);
UpdateVisible();
}
}
public Vector2Int Pos
{
get
{
return VcTransform.Pos;
}
set
{
VcTransform.Pos = value;
VcTransform.ApplyTransform();
}
}
public Vector2Int Size
{
get
{
return VcTransform.Size;
}
set
{
VcTransform.Size = value;
VcTransform.ApplyTransform();
}
}
public int Z
{
get
{
return VcTransform.Z;
}
set
{
VcTransform.Z = value;
VcTransform.ApplyTransform();
}
}
public Vector3Int Pos3D
{
get => VcTransform.Pos3D;
set
{
VcTransform.Pos3D = value;
VcTransform.ApplyTransform();
}
}
public virtual void OnEnable()
{
UpdateVisible();
}
public virtual void OnDisable()
{
UpdateVisible();
}
public abstract void OnParentLayerShowChanged();
public abstract void UpdateVisible();
public abstract void OnVisibleChanged();
public abstract void OnResolveReferences(VCLayerList parentLayer);
private void GetOrAddVCGUITransform()
{
if (_vcTransform == null)
{
_vcTransform = GetComponent();
if (_vcTransform == null)
{
_vcTransform = gameObject.AddComponent();
_vcTransform.GatherTransform();
#if UNITY_EDITOR
UnityEditor.EditorUtility.SetDirty(this);
UnityEditor.EditorUtility.SetDirty(_vcTransform);
#endif
}
}
}
}
}