Skip to content

Commit

Permalink
- Change namespace from Threeyes.Steamworks to Threeyes.GameFramework.
Browse files Browse the repository at this point in the history
  • Loading branch information
wojiuxuihuan committed Aug 28, 2024
1 parent 7f21d17 commit 03db950
Show file tree
Hide file tree
Showing 463 changed files with 1,003 additions and 626 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Changelog

## [4.4.0]
- Change namespace from Threeyes.Steamworks to Threeyes.GameFramework.

## [4.3.9]
- Fix TweenOption_Vector3Ex's field not Serialized.

Expand Down
2 changes: 1 addition & 1 deletion ProjectConfig~/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"dependencies": {
"com.threeyes.alivecursor.sdk": "4.3.9",
"com.threeyes.alivecursor.sdk": "4.4.0",
"com.beans.deform": "1.2.1",
"com.coffee.ui-effect": "4.0.0-preview.10",
"com.dbrizov.naughtyattributes": "2.1.4",
Expand Down
2 changes: 1 addition & 1 deletion Threeyes/HubSimulator/Datas.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Threeyes/HubSimulator/Datas/Cursor.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Threeyes/HubSimulator/Datas/Cursor/Controller.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -949,6 +949,24 @@ public static void Recursive<T>(this T em, UnityAction<T> action, Func<T, IEnume
#endregion

#region GameObject


/// <summary>
/// Checks if a GameObject has been destroyed.
///
/// Ref: https://discussions.unity.com/t/how-to-detect-if-a-gameobject-has-been-destroyed/2385/4
/// </summary>
/// <param name="gameObject">GameObject reference to check for destructedness</param>
/// <returns>If the game object has been marked as destroyed by UnityEngine</returns>
public static bool IsDestroyed(this GameObject gameObject)
{
// UnityEngine overloads the == opeator for the GameObject type
// and returns null when the object has been destroyed, but
// actually the object is still there but has not been cleaned up yet
// if we test both we can determine if the object has been destroyed.
return gameObject == null && !ReferenceEquals(gameObject, null);
}

public static T InstantiateUIPrefab<T>(this GameObject obj, Transform tfParent = null, Vector3 position = default, Quaternion rotation = default)
{
return obj.InstantiatePrefab(tfParent, position, rotation, Vector3.one).GetComponent<T>();//默认使用缩放1
Expand Down Expand Up @@ -1035,11 +1053,19 @@ public static void DestroyAtOnce(this GameObject go)

#region Transform

public static string GetHierarchyName(this Transform tf)
/// <summary>
/// 获取层级的名称,通常用于Transform.Find
/// </summary>
/// <param name="tf"></param>
/// <param name="rootParent">可选的父物体,常用于相同层级迁移</param>
/// <returns></returns>
public static string GetHierarchyName(this Transform tf, Transform rootParent = null)
{
string result = tf.name;
while (tf.parent)
{
if (rootParent && tf.parent == rootParent) break;//当遇到父物体时体哦啊出

result = tf.parent.name + "/" + result;
tf = tf.parent;
}
Expand Down
2 changes: 1 addition & 1 deletion Threeyes/Plugins/ThreeyesPlugin/Core/Module.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public static CoroutineManager Instance
{
get
{
//if (hasDestroied) return null;

if (!_Instance)
{
_Instance = FindObjectOfType<CoroutineManager>();
Expand All @@ -35,6 +37,12 @@ public static CoroutineManager Instance
}
}

//static bool hasDestroied = false;//可能有bug,暂不使用
//private void OnDestroy()
//{
// hasDestroied = true;
//}

/// <summary>
/// 开启协程
/// 注意:在重新载入场景时,原有的组件可能会为空,因此要判断if(this)才能继续执行
Expand All @@ -43,21 +51,17 @@ public static CoroutineManager Instance
/// <returns></returns>
public static Coroutine StartCoroutineEx(IEnumerator routine)
{
if (routine == null)
return null;

if (!Application.isPlaying)
{
return null;
}
//if (hasDestroied) return null;
if (routine == null) return null;
if (!Application.isPlaying) return null;

return Instance.StartCoroutine(routine);
}

public static void StopCoroutineEx(Coroutine routine)
{
if (routine == null)
return;
//if (hasDestroied) return;
if (routine == null) return;

if (Application.isPlaying)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public interface IShowHideEx : IShowHide

//#region Override IShowHideInterface
//public bool IsShowing { get { return isShowing; } set { isShowing = value; } }
//public bool isShowing = false;
//[SerializeField] protected bool isShowing = false;

//public void Show()
//{
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,27 @@ public GameObject GOPoolManager
{
if (goPoolManager == null)
{
goPoolManager = new GameObject("PoolManager");
goPoolManager = new GameObject("PoolManager" + (string.IsNullOrEmpty(tag) ? "" : $" [{tag}]"));
if (hiddenByDefault)
goPoolManager.SetActive(false);
}
return goPoolManager;
}
}
GameObject goPoolManager;

public GameObjectPool(Func<GameObject> createFunc = null, UnityAction<GameObject> actionOnGet = null, UnityAction<GameObject> actionOnRelease = null, UnityAction<GameObject> actionOnDestroy = null, bool collectionCheck = false, int defaultCapacity = 10, int maxSize = 10000) : base(createFunc, actionOnGet, actionOnRelease, actionOnDestroy, collectionCheck, defaultCapacity, maxSize)
public string Tag { get { return tag; } }

string tag = "";//自定义标签
bool hiddenByDefault = false;//根物体默认隐藏
public GameObjectPool(Func<GameObject> createFunc = null, UnityAction<GameObject> actionOnGet = null, UnityAction<GameObject> actionOnRelease = null, UnityAction<GameObject> actionOnDestroy = null, bool collectionCheck = false, int defaultCapacity = 10, int maxSize = 10000, string tag = "", bool hiddenByDefault = false) : base(createFunc, actionOnGet, actionOnRelease, actionOnDestroy, collectionCheck, defaultCapacity, maxSize)
{
this.tag = tag;
this.hiddenByDefault = hiddenByDefault;
}
protected override bool IsElementNull(GameObject ele)
{
return ele == null && !ReferenceEquals(ele, null);
}

#region Default Method
Expand All @@ -36,11 +48,15 @@ protected override GameObject DefaultCreateFunc()
}
protected override void DefaultOnGetFunc(GameObject target)
{
if (!target) return;
target.SetActive(true);
}
protected override void DefaultOnReleaseFunc(GameObject target)
{
target.SetActive(false);
if (!target) return;

if (!hiddenByDefault)//Warning:需要判断,否则后续SetParent会报错:GameObject is already being activated or deactivated.
target.SetActive(false);
target.transform.SetParent(GOPoolManager ? GOPoolManager.transform : null);//存放到一个Manager中
}
protected override void DefaultOnDestroyFunc(GameObject target)
Expand All @@ -49,31 +65,48 @@ protected override void DefaultOnDestroyFunc(GameObject target)
}
#endregion


///PS:
///1.如果使用了Pool技术,那就会调用IPoolHandler接口对应的方法(参考LeanGameObjectPool.InvokeOnDespawn)
///2.不应该实现任何非通用代码(如设置父物体),以避免不通用。如果需要,请自行传入默认的方法

static UnityAction<IPoolableHandler> actOnSpawn = (ele) => ele.OnSpawn();
static UnityAction<IPoolableHandler> actOnDespawn = (ele) => ele.OnDespawn();


protected override void InvokeOnGetFunc(GameObject element)
{
SendMessage(element, actOnSpawn);
SendMessage(element, actOnSpawn, e => e.Pool = this);//调用IPoolableHandler.OnDespawn
base.InvokeOnGetFunc(element);
}
protected override void InvokeOnReleaseFunc(GameObject element)
{
SendMessage(element, actOnDespawn);
SendMessage(element, actOnDespawn);//调用IPoolableHandler.OnSpawn
base.InvokeOnReleaseFunc(element);
}

#region Utility
static List<IPoolableHandler> tempPoolables = new List<IPoolableHandler>();
static void SendMessage(GameObject target, UnityAction<IPoolableHandler> act)
static List<IPoolableHandler> tempPoolableHandlers = new List<IPoolableHandler>();
static List<IObjectPoolHolder> tempPoolableHolders = new List<IObjectPoolHolder>();
static void SendMessage(GameObject target, UnityAction<IPoolableHandler> actHandler, UnityAction<IObjectPoolHolder> actHolder = null)
{
target.GetComponents(tempPoolables);
for (var i = tempPoolables.Count - 1; i >= 0; i--)
act?.Invoke(tempPoolables[i]);
if (!target) return;
if (actHandler != null)
{
target.GetComponents(tempPoolableHandlers);
for (var i = tempPoolableHandlers.Count - 1; i >= 0; i--)
actHandler?.Invoke(tempPoolableHandlers[i]);
}

//标记Pool
if (actHolder != null)
{
target.GetComponents(tempPoolableHolders);
for (var i = tempPoolableHolders.Count - 1; i >= 0; i--)
actHolder.Invoke(tempPoolableHolders[i]);
}
}

#endregion
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,17 @@

namespace Threeyes.Core
{
public interface IObjectPoolHolder
{
IObjectPool Pool { get; set; }//The related pool
}

public interface IObjectPool { }
/// <summary>
/// Ref: UnityEngine.Pool.IObjectPool,为了兼容旧版本所以进行原接口复制
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IObjectPool<T> where T : class
public interface IObjectPool<T> : IObjectPool where T : class
{
int CountInactive
{
Expand Down
39 changes: 33 additions & 6 deletions Threeyes/Plugins/ThreeyesPlugin/Core/Module/Pool/ObjectPool.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using System.Collections.Generic;
using UnityEngine.Events;

using UnityEngine;
namespace Threeyes.Core
{
/// <summary>
/// Ref: UnityEngine.Pool.ObjectPool
///
/// A stack based Pool.IObjectPool_1.
/// </summary>
public class ObjectPool<T> : System.IDisposable, IObjectPool<T> where T : class
Expand All @@ -20,9 +21,19 @@ public class ObjectPool<T> : System.IDisposable, IObjectPool<T> where T : class
private readonly UnityAction<T> m_ActionOnRelease;
private readonly UnityAction<T> m_ActionOnDestroy;

private readonly int m_MaxSize;
private readonly int m_MaxSize;//Pool最大容量,如果CountActive超过该值就会调用m_ActionOnDestroy删除旧元素
internal bool m_CollectionCheck;

/// <summary>
///
/// </summary>
/// <param name="createFunc"></param>
/// <param name="actionOnGet"></param>
/// <param name="actionOnRelease"></param>
/// <param name="actionOnDestroy"></param>
/// <param name="collectionCheck"></param>
/// <param name="defaultCapacity"></param>
/// <param name="maxSize">Max Cache size</param>
public ObjectPool(System.Func<T> createFunc, UnityAction<T> actionOnGet = null, UnityAction<T> actionOnRelease = null, UnityAction<T> actionOnDestroy = null, bool collectionCheck = false, int defaultCapacity = 10, int maxSize = 10000)
{

Expand All @@ -42,10 +53,12 @@ public ObjectPool(System.Func<T> createFunc, UnityAction<T> actionOnGet = null,

if (m_MaxSize <= 0)
{
throw new System.ArgumentException("Max Size must be greater than 0", "maxSize");
Debug.LogError("Max Size must be greater than 0");
//throw new System.ArgumentException("Max Size must be greater than 0", "maxSize");
}
}
public T Get()

public virtual T Get()
{
T val;
if (m_Stack.Count == 0)
Expand All @@ -55,13 +68,25 @@ public T Get()
}
else
{
val = m_Stack.Pop();
do
{
val = m_Stack.Pop();
//if (IsElementNull(val))
//{
// Debug.LogError("Empty!");
//}
}
while (m_Stack.Count > 0 && val == null);//如果返回值无效,则一直获取(可能原因:超过上限,导致m_ActionOnDestroy被调用。因为Stack无法移除该item,因此会变为null,不算报错)
}

InvokeOnGetFunc(val);
return val;
}

protected virtual bool IsElementNull(T ele)
{
return ele == null;
}

/// <summary>
///
Expand All @@ -84,7 +109,8 @@ public void Release(T element)
{
if (m_CollectionCheck && m_Stack.Count > 0 && m_Stack.Contains(element))
{
throw new System.InvalidOperationException("Trying to release an object that has already been released to the pool.");
Debug.LogError("Trying to release an object that has already been released to the pool.");
//throw new System.InvalidOperationException("Trying to release an object that has already been released to the pool.");
}

InvokeOnReleaseFunc(element);
Expand All @@ -95,6 +121,7 @@ public void Release(T element)
}
else
{
//ToUpdate:应该也要同步移除Stack相关元素
m_ActionOnDestroy?.Invoke(element);
}
}
Expand Down
Loading

0 comments on commit 03db950

Please sign in to comment.