Skip to content

Commit 6128c3f

Browse files
committed
[增加]1. 增加Actor 自定义数据的绑定
1 parent 63b49fc commit 6128c3f

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

GameFrameX.Core/Abstractions/IActor.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,39 @@ public interface IActor : IWorker
9393
/// <param name="serverDay">服务器运行天数,表示服务器运行的累计天数</param>
9494
/// <returns>一个表示异步操作的任务</returns>
9595
Task CrossDay(int serverDay);
96+
97+
/// <summary>
98+
/// 设置Actor的数据
99+
/// </summary>
100+
/// <typeparam name="T">要存储的数据类型</typeparam>
101+
/// <param name="key">数据的键名</param>
102+
/// <param name="value">要存储的数据值</param>
103+
/// <remarks>
104+
/// 用于在Actor中存储任意类型的数据,通过键值对的方式进行管理。
105+
/// 如果键已存在,则会覆盖原有的值。
106+
/// </remarks>
107+
void SetData<T>(string key, T value);
108+
109+
/// <summary>
110+
/// 获取Actor中存储的数据
111+
/// </summary>
112+
/// <typeparam name="T">要获取的数据类型</typeparam>
113+
/// <param name="key">数据的键名</param>
114+
/// <returns>返回指定类型的数据值</returns>
115+
/// <remarks>
116+
/// 如果指定的键不存在或类型不匹配,可能会抛出异常。
117+
/// 使用前建议先确认数据是否存在。
118+
/// </remarks>
119+
T GetData<T>(string key);
120+
121+
/// <summary>
122+
/// 移除Actor中存储的数据
123+
/// </summary>
124+
/// <param name="key">要移除的数据键名</param>
125+
/// <returns>如果成功移除数据返回true,如果键不存在返回false</returns>
126+
/// <remarks>
127+
/// 从Actor的数据存储中移除指定键的数据。
128+
/// 如果键不存在,则不会产生任何效果。
129+
/// </remarks>
130+
bool RemoveData(string key);
96131
}

GameFrameX.Core/Actors/Actor.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,58 @@ public async Task CrossDay(int openServerDay)
227227
}
228228
}
229229

230+
private readonly ConcurrentDictionary<string, object> _data = new ConcurrentDictionary<string, object>();
231+
232+
/// <summary>
233+
/// 设置Actor的数据
234+
/// </summary>
235+
/// <typeparam name="T">要存储的数据类型</typeparam>
236+
/// <param name="key">数据的键名</param>
237+
/// <param name="value">要存储的数据值</param>
238+
/// <remarks>
239+
/// 用于在Actor中存储任意类型的数据,通过键值对的方式进行管理。
240+
/// 如果键已存在,则会覆盖原有的值。
241+
/// </remarks>
242+
public void SetData<T>(string key, T value)
243+
{
244+
_data[key] = value;
245+
}
246+
247+
/// <summary>
248+
/// 获取Actor中存储的数据
249+
/// </summary>
250+
/// <typeparam name="T">要获取的数据类型</typeparam>
251+
/// <param name="key">数据的键名</param>
252+
/// <returns>返回指定类型的数据值</returns>
253+
/// <remarks>
254+
/// 如果指定的键不存在或类型不匹配,可能会抛出异常。
255+
/// 使用前建议先确认数据是否存在。
256+
/// </remarks>
257+
public T GetData<T>(string key)
258+
{
259+
if (_data.TryGetValue(key, out var value))
260+
{
261+
return (T)value;
262+
}
263+
264+
return default;
265+
}
266+
267+
268+
/// <summary>
269+
/// 移除Actor中存储的数据
270+
/// </summary>
271+
/// <param name="key">要移除的数据键名</param>
272+
/// <returns>如果成功移除数据返回true,如果键不存在返回false</returns>
273+
/// <remarks>
274+
/// 从Actor的数据存储中移除指定键的数据。
275+
/// 如果键不存在,则不会产生任何效果。
276+
/// </remarks>
277+
public bool RemoveData(string key)
278+
{
279+
return _data.TryRemove(key, out _);
280+
}
281+
230282
/// <summary>
231283
/// 反激活所有组件,使其进入非活动状态
232284
/// </summary>

0 commit comments

Comments
 (0)