diff --git a/Runtime/ABase/Base/DataStruct/GameFrameworkLinkedList.cs b/Runtime/ABase/Base/DataStruct/GameFrameworkLinkedList.cs
index 35361ef..97bdf9a 100644
--- a/Runtime/ABase/Base/DataStruct/GameFrameworkLinkedList.cs
+++ b/Runtime/ABase/Base/DataStruct/GameFrameworkLinkedList.cs
@@ -221,6 +221,16 @@ namespace AlicizaX
return m_LinkedList.Contains(value);
}
+ ///
+ /// 确定指定结点是否在链表中。
+ ///
+ /// 要检查的结点。
+ /// 指定结点是否在链表中。
+ public bool Contains(LinkedListNode node)
+ {
+ return node != null && node.List == m_LinkedList;
+ }
+
///
/// 从目标数组的指定索引处开始将整个链表复制到兼容的一维数组。
///
diff --git a/Runtime/ABase/Base/DataStruct/GameFrameworkMultiDictionary.cs b/Runtime/ABase/Base/DataStruct/GameFrameworkMultiDictionary.cs
index 0b68d74..081fa01 100644
--- a/Runtime/ABase/Base/DataStruct/GameFrameworkMultiDictionary.cs
+++ b/Runtime/ABase/Base/DataStruct/GameFrameworkMultiDictionary.cs
@@ -101,18 +101,19 @@ namespace AlicizaX
///
/// 指定的主键。
/// 指定的值。
- public void Add(TKey key, TValue value)
+ public LinkedListNode Add(TKey key, TValue value)
{
GameFrameworkLinkedListRange range = default(GameFrameworkLinkedListRange);
if (m_Dictionary.TryGetValue(key, out range))
{
- m_LinkedList.AddBefore(range.Terminal, value);
+ return m_LinkedList.AddBefore(range.Terminal, value);
}
else
{
LinkedListNode first = m_LinkedList.AddLast(value);
LinkedListNode terminal = m_LinkedList.AddLast(default(TValue));
m_Dictionary.Add(key, new GameFrameworkLinkedListRange(first, terminal));
+ return first;
}
}
@@ -131,22 +132,7 @@ namespace AlicizaX
{
if (current.Value.Equals(value))
{
- if (current == range.First)
- {
- LinkedListNode next = current.Next;
- if (next == range.Terminal)
- {
- m_LinkedList.Remove(next);
- m_Dictionary.Remove(key);
- }
- else
- {
- m_Dictionary[key] = new GameFrameworkLinkedListRange(next, range.Terminal);
- }
- }
-
- m_LinkedList.Remove(current);
- return true;
+ return Remove(key, current);
}
}
}
@@ -154,6 +140,48 @@ namespace AlicizaX
return false;
}
+ ///
+ /// 从指定的主键中移除指定结点。
+ ///
+ /// 指定的主键。
+ /// 要移除的结点。
+ /// 是否移除成功。
+ public bool Remove(TKey key, LinkedListNode node)
+ {
+ if (node == null)
+ {
+ return false;
+ }
+
+ GameFrameworkLinkedListRange range = default(GameFrameworkLinkedListRange);
+ if (!m_Dictionary.TryGetValue(key, out range))
+ {
+ return false;
+ }
+
+ if (!m_LinkedList.Contains(node) || node == range.Terminal)
+ {
+ return false;
+ }
+
+ if (node == range.First)
+ {
+ LinkedListNode next = node.Next;
+ if (next == range.Terminal)
+ {
+ m_LinkedList.Remove(next);
+ m_Dictionary.Remove(key);
+ }
+ else
+ {
+ m_Dictionary[key] = new GameFrameworkLinkedListRange(next, range.Terminal);
+ }
+ }
+
+ m_LinkedList.Remove(node);
+ return true;
+ }
+
///
/// 从指定的主键中移除所有的值。
///
diff --git a/Runtime/ABase/ObjectPool/ObjectPoolManager.Object.cs b/Runtime/ABase/ObjectPool/ObjectPoolManager.Object.cs
index c534df1..c9a8933 100644
--- a/Runtime/ABase/ObjectPool/ObjectPoolManager.Object.cs
+++ b/Runtime/ABase/ObjectPool/ObjectPoolManager.Object.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using AlicizaX;
namespace AlicizaX.ObjectPool
@@ -11,16 +12,20 @@ namespace AlicizaX.ObjectPool
/// 对象类型。
private sealed class Object : IMemory where T : ObjectBase
{
+ private string m_Name;
private T m_Object;
private int m_SpawnCount;
+ private LinkedListNode