Skip to content

Commit ae07e9a

Browse files
author
Ellan Jiang
authored
Merge pull request #18 from EllanJiang/dev/v3.1.1
Dev/v3.1.1
2 parents 2ef36d4 + 0872cd6 commit ae07e9a

22 files changed

+1683
-385
lines changed

GameFramework/Base/EventPool/EventPool.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,11 @@ private void HandleEvent(object sender, T e)
203203
if (handlers != null)
204204
{
205205
handlers(sender, e);
206-
ReferencePool.Release(e);
207-
return;
208206
}
209207
}
210208

211-
if ((m_EventPoolMode & EventPoolMode.AllowNoHandler) == 0)
209+
ReferencePool.Release(e.GetType(), e);
210+
if (handlers == null && (m_EventPoolMode & EventPoolMode.AllowNoHandler) == 0)
212211
{
213212
throw new GameFrameworkException(string.Format("Event '{0}' not allow no handler.", e.Id.ToString()));
214213
}

GameFramework/Base/GameFrameworkEntry.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace GameFramework
1515
/// </summary>
1616
public static class GameFrameworkEntry
1717
{
18-
private const string GameFrameworkVersion = "3.1.0";
18+
private const string GameFrameworkVersion = "3.1.1";
1919
private static readonly LinkedList<GameFrameworkModule> s_GameFrameworkModules = new LinkedList<GameFrameworkModule>();
2020

2121
/// <summary>
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace GameFramework
5+
{
6+
public static partial class ReferencePool
7+
{
8+
private sealed class ReferenceCollection
9+
{
10+
private readonly Queue<IReference> m_References;
11+
private int m_UsingReferenceCount;
12+
private int m_AcquireReferenceCount;
13+
private int m_ReleaseReferenceCount;
14+
private int m_AddReferenceCount;
15+
private int m_RemoveReferenceCount;
16+
17+
public ReferenceCollection()
18+
{
19+
m_References = new Queue<IReference>();
20+
m_UsingReferenceCount = 0;
21+
m_AcquireReferenceCount = 0;
22+
m_ReleaseReferenceCount = 0;
23+
m_AddReferenceCount = 0;
24+
m_RemoveReferenceCount = 0;
25+
}
26+
27+
public int UnusedReferenceCount
28+
{
29+
get
30+
{
31+
return m_References.Count;
32+
}
33+
}
34+
35+
public int UsingReferenceCount
36+
{
37+
get
38+
{
39+
return m_UsingReferenceCount;
40+
}
41+
}
42+
43+
public int AcquireReferenceCount
44+
{
45+
get
46+
{
47+
return m_AcquireReferenceCount;
48+
}
49+
}
50+
51+
public int ReleaseReferenceCount
52+
{
53+
get
54+
{
55+
return m_ReleaseReferenceCount;
56+
}
57+
}
58+
59+
public int AddReferenceCount
60+
{
61+
get
62+
{
63+
return m_AddReferenceCount;
64+
}
65+
}
66+
67+
public int RemoveReferenceCount
68+
{
69+
get
70+
{
71+
return m_RemoveReferenceCount;
72+
}
73+
}
74+
75+
public T Acquire<T>() where T : class, IReference, new()
76+
{
77+
m_UsingReferenceCount++;
78+
m_AcquireReferenceCount++;
79+
lock (m_References)
80+
{
81+
if (m_References.Count > 0)
82+
{
83+
return (T)m_References.Dequeue();
84+
}
85+
}
86+
87+
m_AddReferenceCount++;
88+
return new T();
89+
}
90+
91+
public IReference Acquire(Type referenceType)
92+
{
93+
m_UsingReferenceCount++;
94+
m_AcquireReferenceCount++;
95+
lock (m_References)
96+
{
97+
if (m_References.Count > 0)
98+
{
99+
return m_References.Dequeue();
100+
}
101+
}
102+
103+
m_AddReferenceCount++;
104+
return (IReference)Activator.CreateInstance(referenceType);
105+
}
106+
107+
public void Release<T>(T reference) where T : class, IReference
108+
{
109+
reference.Clear();
110+
lock (m_References)
111+
{
112+
m_References.Enqueue(reference);
113+
}
114+
115+
m_ReleaseReferenceCount++;
116+
m_UsingReferenceCount--;
117+
}
118+
119+
public void Release(Type referenceType, IReference reference)
120+
{
121+
reference.Clear();
122+
lock (m_References)
123+
{
124+
m_References.Enqueue(reference);
125+
}
126+
127+
m_ReleaseReferenceCount++;
128+
m_UsingReferenceCount--;
129+
}
130+
131+
public void Add<T>(int count) where T : class, IReference, new()
132+
{
133+
lock (m_References)
134+
{
135+
m_AddReferenceCount += count;
136+
while (count-- > 0)
137+
{
138+
m_References.Enqueue(new T());
139+
}
140+
}
141+
}
142+
143+
public void Add(Type referenceType, int count)
144+
{
145+
lock (m_References)
146+
{
147+
m_AddReferenceCount += count;
148+
while (count-- > 0)
149+
{
150+
m_References.Enqueue((IReference)Activator.CreateInstance(referenceType));
151+
}
152+
}
153+
}
154+
155+
public void Remove<T>(int count) where T : class, IReference
156+
{
157+
lock (m_References)
158+
{
159+
if (count > m_References.Count)
160+
{
161+
count = m_References.Count;
162+
}
163+
164+
m_RemoveReferenceCount += count;
165+
while (count-- > 0)
166+
{
167+
m_References.Dequeue();
168+
}
169+
}
170+
}
171+
172+
public void Remove(Type referenceType, int count)
173+
{
174+
lock (m_References)
175+
{
176+
if (count > m_References.Count)
177+
{
178+
count = m_References.Count;
179+
}
180+
181+
m_RemoveReferenceCount += count;
182+
while (count-- > 0)
183+
{
184+
m_References.Dequeue();
185+
}
186+
}
187+
}
188+
189+
public void RemoveAll()
190+
{
191+
lock (m_References)
192+
{
193+
m_RemoveReferenceCount += m_References.Count;
194+
m_References.Clear();
195+
}
196+
}
197+
}
198+
}
199+
}

0 commit comments

Comments
 (0)