2025-10-17 16:58:04 +08:00
|
|
|
|
using System.Collections.Generic;
|
2025-11-19 01:26:30 +08:00
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
|
|
2025-10-17 16:58:04 +08:00
|
|
|
|
public class NotePoolManager : BasePool<BaseNote>
|
|
|
|
|
|
{
|
2025-11-19 01:26:30 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>ɳ<EFBFBD><C9B3><EFBFBD><EFBFBD><EFBFBD>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private Dictionary<RuntimeBaseNoteData, BaseNote> _dataToNoteCache = new Dictionary<RuntimeBaseNoteData, BaseNote>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3B1BBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><F2B6BCBB>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>ע<EFBFBD>᷵<EFBFBD><E1B7B5><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
/// </summary>
|
2025-10-17 16:58:04 +08:00
|
|
|
|
protected override void OnCreate(BaseNote obj)
|
|
|
|
|
|
{
|
|
|
|
|
|
obj.OnNoteUesd += ReturnBaseNoteToPool;
|
|
|
|
|
|
}
|
2025-11-19 01:26:30 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>µĶ<C2B5><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д洢<D0B4>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڿ<EFBFBD><DABF>ٲ<EFBFBD><D9B2><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
2025-10-17 16:58:04 +08:00
|
|
|
|
protected override void OnGet(BaseNote obj)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.OnGet(obj);
|
2025-11-19 01:26:30 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
|
if (obj.SelfRef != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
_dataToNoteCache.Add(obj.SelfRef, obj);
|
|
|
|
|
|
}
|
2025-10-17 16:58:04 +08:00
|
|
|
|
}
|
2025-11-19 01:26:30 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20>ڶ<EFBFBD><DAB6><EFBFBD><F3B1BBBB>յ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C>ӻ<EFBFBD>Ծ<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3>ö<EFBFBD><C3B6><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
2025-10-17 16:58:04 +08:00
|
|
|
|
protected override void OnRelease(BaseNote obj)
|
|
|
|
|
|
{
|
2025-11-19 01:26:30 +08:00
|
|
|
|
base.OnRelease(obj);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (obj.SelfRef != null && _dataToNoteCache.ContainsKey(obj.SelfRef))
|
|
|
|
|
|
{
|
|
|
|
|
|
_dataToNoteCache.Remove(obj.SelfRef);
|
|
|
|
|
|
}
|
2025-10-17 16:58:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
2025-11-19 01:26:30 +08:00
|
|
|
|
/// <20><><EFBFBD><EFBFBD>Note<74><65><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>
|
2025-10-17 16:58:04 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void ReturnBaseNoteToPool(BaseNote note)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>û<EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>,<2C><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
var type = note.GetType();
|
|
|
|
|
|
if (!Pools.ContainsKey(type)) Pools[type] = new Stack<BaseNote>();
|
|
|
|
|
|
Pools[type].Push(note);
|
|
|
|
|
|
note.gameObject.SetActive(false);
|
|
|
|
|
|
}
|
2025-11-19 01:26:30 +08:00
|
|
|
|
public override void ClearPool()
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var list in ActiveObjectList)
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var note in list.Value)
|
|
|
|
|
|
{
|
|
|
|
|
|
ReturnBaseNoteToPool(note);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public BaseNote GetNoteByRuntimeData(RuntimeBaseNoteData data)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (data == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
UnityEngine.Debug.LogError("NotePoolManager" + "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Null");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
BaseNote note = null;
|
|
|
|
|
|
switch (data)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
case RuntimeTapData:
|
|
|
|
|
|
{
|
|
|
|
|
|
ForEach((TapController n) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
if (n.SelfRef == data) note = n;
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case RuntimeDragData:
|
|
|
|
|
|
{
|
|
|
|
|
|
ForEach((DragController n) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
if (n.SelfRef == data) note = n;
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case RuntimeFlickData:
|
|
|
|
|
|
{
|
|
|
|
|
|
ForEach((FlickController n) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
if (n.SelfRef == data) note = n;
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case RuntimeSnakeData:
|
|
|
|
|
|
{
|
|
|
|
|
|
ForEach((DataFlowController n) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
if (n.SelfRef == data) note = n;
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
UnityEngine.Debug.LogError("NotePoolManager" + ":<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ݲ<EFBFBD><DDB2>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>صļ<D8B5><C4BC><EFBFBD>,û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>");
|
|
|
|
|
|
return note;
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><>Note<74>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ֵ伯<D6B5><E4BCAF><EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܽ<EFBFBD><DCBD>᷵<EFBFBD><E1B7B5>Null,<2C>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public BaseNote GetNoteByRuntimeDataInPool(RuntimeBaseNoteData data)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (data == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
UnityEngine.Debug.LogError("NotePoolManager" + ":<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Null");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (_dataToNoteCache.TryGetValue(data, out BaseNote result))
|
|
|
|
|
|
{
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
2025-10-17 16:58:04 +08:00
|
|
|
|
}
|