using Fort23.Core;
using Fort23.UTool;
#if !COMBAT_SERVER
using UnityEngine;
#endif
namespace Fort23.UTool
{
///
/// 基础的池子
///
public class GObjectPoolBasic : IGObjectPoolInterface
{
protected Vector3 _pos;
protected Vector3 _scale;
protected Vector3 _rotation;
#if !COMBAT_SERVER
public Transform transform
{
get
{
if (own == null)
{
return null;
}
return own.transform;
}
}
public GameObject gameObject
{
get { return own; }
}
public GameObject own
{
get { return _own; }
}
private GameObject _own;
public AssetHandle AssetHandle { get; set; }
private DelayHide delayHide;
public TimerEntity DestroyTimer { get; set; }
#endif
public string poolObjName { get; set; }
public bool isUse { get; set; }
public bool isDestroy { get; }
public virtual void ResetData()
{
ProResetData();
}
public virtual void ActiveObj()
{
#if !COMBAT_SERVER
own.SetActive(true);
#endif
ProActiveObj();
}
public virtual async CTask DelayHide()
{
#if !COMBAT_SERVER
if (own != null && delayHide != null)
{
await TimerComponent.Instance.WaitAsync((int)(delayHide.delayTime * 1000));
}
#endif
}
public virtual void DormancyObj()
{
ProDormancyObj();
#if !COMBAT_SERVER
own.SetActive(false);
#endif
}
public void SetPosition(Vector3 pos)
{
_pos = pos;
#if !COMBAT_SERVER
if (_own != null)
{
_own.transform.position = pos;
}
#endif
}
public void SetScale(Vector3 scale)
{
_scale = scale;
#if !COMBAT_SERVER
if (_own != null)
{
_own.transform.localScale = scale;
}
#endif
}
#if !COMBAT_SERVER
public void SetParent(Transform root)
{
if (_own != null)
{
_own.transform.SetParent(root);
}
}
#endif
public void SetRotation(Vector3 rotation)
{
_rotation = rotation;
#if !COMBAT_SERVER
if (_own != null)
{
_own.transform.eulerAngles = rotation;
}
#endif
}
public Vector3 GetPosition()
{
return _pos;
}
public Vector3 GetScale()
{
return _scale;
}
public Vector3 GettRotation()
{
return _rotation;
}
public void SetActive(bool isActive)
{
#if !COMBAT_SERVER
_own.SetActive(isActive);
#endif
}
public virtual void DestroyObj()
{
#if !COMBAT_SERVER
AssetHandle?.Release();
#endif
ProOnDestroy();
#if !COMBAT_SERVER
_own = null;
#endif
}
#if !COMBAT_SERVER
public void SetGameObject(GameObject gameObject)
{
_own = gameObject;
delayHide = own.GetComponent();
}
#endif
public T GetComponent()
{
#if !COMBAT_SERVER
if (_own != null)
{
return _own.GetComponent();
}
return default;
#endif
return default;
}
public virtual void Dispose()
{
}
protected virtual void ProResetData()
{
//gameObject.SetActive(true);
}
protected virtual void ProOnDestroy()
{
}
protected virtual void ProDormancyObj()
{
//gameObject.SetActive(true);
}
protected virtual void ProActiveObj()
{
}
public virtual void Preset()
{
}
}
}