Class/Struct Info |
|---|
public sealed class EntitySet : IList<IEntity> IList<IEntity>的实现,一组实体的列表形式表达,支持IList的基本列表操作,可以对一组实体进行批量操作。 |
Name | Type | Description |
|---|---|---|
Count | int | 实体数量。 |
Capacity | int | 列表容量。 |
World | IECSWorld | 世界。 |
Ids | ReadOnlySpan<int> | 实体标识的只读内存。 |
IsReadOnly | bool | 只读标志。 |
var world = new IECSWorld(); var entity = world.CreateEntity(1); // 创建一个EntitySet并添加一个实体 var entitySet = new EntitySet(world); entitySet.Add(entity); // 获取集合中实体数量 entitySet.Count;// 1 // 获取、设置集合容量 entitySet.Capacity; // 1 entity.Capacity = 5; entitySet.Capacity; // 5 // 获取集合所属world entitySet.World; // 等于world // 获取集合所有实体Id entitySet.Ids[0]; // 1 // 集合的只读属性,默认为false entitySet.IsReadOnly; // false
Qualifier and Type | Method Name and Description |
|---|---|
void | SetWorld(IECSWorld ecsWorld) 设置实体列表所属World。 |
void | Clear() 清空实体列表。 |
void | Add(IEntity entity) 给实体列表中添加实体。 |
void | Add(int id) 给实体列表中添加实体。 |
void | AddEntityTree(IEntity entity) 将输入实体及其所有子实体添加进实体列表。 |
void | AddTags(in ITags tags) 给实体列表中所有实体批量添加一组标签。 |
void | RemoveTags(in ITags iTags) 给实体列表中所有实体批量移除一组标签。 |
SorterItem<TField>[] | Sort<TComponent, TField>(string memberName, Order order, SorterItem<TField>[] fields = null) 将实体列表中的实体,按照指定组件的指定字段,以指定顺序,进行排序。 |
IEntity | 索引访问方法。 |
bool | Remove(IEntity entity) 移除指定实体。 |
int | IndexOf(IEntity entity) 查询指定实体在列表中的索引。 |
bool | Contains(IEntity entity) 判断列表中是否包含指定实体。 |
void | Insert(int index, IEntity entity) 在列表中指定位置插入实体。 |
void | RemoveAt(int index) 移除列表中指定位置的实体。 |
void | CopyTo(IEntity[] entityArray, int index) 将列表中的实体,复制到指定实体数组中的指定位置。 |
string | ToString() 将列表中的实体数量以字符串形式返回。 |
EntitySetEnumerator | 获取实体列表枚举器,用于遍历这组实体,foreach自动调用。 |
void | ProcessBatchOnAll(BatchProcessor processor) 将批量处理器中的指令应用到EntitySet中的所有实体上。 |
Constructor Name And Description |
|---|
EntitySet() 初始化EntitySet。 |
Sample Code
// 创建一个EntitySet var entitySet = new EntitySet();
Constructor Name And Description |
|---|
EntitySet(IECSWorld ecsWorld) 初始化EntitySet,设置World。 |
Parameters
Name | Type | Description |
|---|---|---|
ecsWorld | IECSWorld | 世界。 |
Sample Code
var world = new IECSWorld(); // 创建一个EntitySet并设置所属世界 var entitySet = new EntitySet(world);
Method |
|---|
void SetWorld(IECSWorld ecsWorld) 设置实体列表所属World。 |
Parameters
Name | Type | Description |
|---|---|---|
world | IECSWorld | 世界。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(); // 设置所属世界 entitySet.SetWorld(world);
Method |
|---|
void Clear() 清空实体列表。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); entitySet.Add(world.CreateEntity()); // 清空集合 entitySet.Clear(); entitySet.Count; // 0
Method |
|---|
void Add(IEntity entity) 给实体列表中添加实体。 |
Parameters
Name | Type | Description |
|---|---|---|
entity | IEntity | 实体。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); // 添加实体 entitySet.Add(world.CreateEntity());
Method |
|---|
void Add(int id) 给实体列表中添加实体。 |
Parameters
Name | Type | Description |
|---|---|---|
id | int | 实体标识。 |
Sample Code
var world = new IECSWorld(); var entity = world.CreateEntity(1); var entitySet = new EntitySet(world); // 通过Id添加实体 entitySet.Add(1);
Method |
|---|
void AddEntityTree(IEntity entity) 将输入实体及其所有子实体添加进实体列表。 |
Parameters
Name | Type | Description |
|---|---|---|
entity | IEntity | 实体。 |
Sample Code
var world = new IECSWorld(); var entity = world.CreateEntity(1); entity.AddChild(world.CreateEntity(2)); var entitySet = new EntitySet(world); // 将实体及其所有子实体添加到集合中 entitySet.AddEntityTree(entity); // 此时集合包含实体1和2
Method |
|---|
void AddTags(in ITags tags) 给实体列表中所有实体批量添加一组标签。 |
Parameters
Name | Type | Description |
|---|---|---|
tags | ITags | 标签类型集合。 |
Sample Code
var world = new IECSWorld(); var entity = world.CreateEntity(1); entity.AddChild(world.CreateEntity(2)); var entitySet = new EntitySet(world); entitySet.AddEntityTree(entity); // 给集合中所有实体添加标签 entitySet.AddTags(ITags.Get<Inactive>()); // 此时实体1和2均拥有Inactive标签
Method |
|---|
void RemoveTags(in ITags iTags) 给实体列表中所有实体批量移除一组标签。 |
Parameters
Name | Type | Description |
|---|---|---|
tags | ITags | 标签类型集合。 |
Sample Code
var world = new IECSWorld(); var entity = world.CreateEntity(ITags.Get<Inactive>()); entity.AddChild(world.CreateEntity(ITags.Get<Inactive>())); var entitySet = new EntitySet(world); entitySet.AddEntityTree(entity); // 给集合中所有实体移除标签 entitySet.RemoveTags(ITags.Get<Inactive>()); // 此时实体1和2均没有Inactive标签
Method |
|---|
SorterItem<TField>[] Sort<TComponent, TField>(string memberName, Order order, SorterItem<TField>[] fields = null) 将实体列表中的实体,按照指定组件的指定字段,以指定顺序,进行排序。 TComponent为IComponent,是排序指定组件,TField为排序指定组件字段数据类型,memberName为排序指定组件字段名,order为排序指定模式,fields为排序结果信息输出,未指定fields则会自动创建一个对应数组返回结果。 |
Parameters
Name | Type | Description |
|---|---|---|
memberName | string | 组件字段/属性的名字。 |
order | Order | 排序模式枚举值。 |
fields | SorterItem<TField>[] | 排序后的字段值数组。 |
Return
Type | Description |
|---|---|
SorterItem<TField>[] | 返回排序后的字段值数组。 |
Sample Code
var world = new IECSWorld();
var entitySet = new EntitySet(world);
entitySet.Add(world.CreateEntity());
for (int n = 0; n < 2; n++)
{
entitySet.Add(world.CreateEntity(new TestComponent1 { value = n }));
}
// 此时集合中实体顺序为:entity1, entity2, entity3
// SorterItem结构用于记录排序后实体Id、对应字段值、是否拥有指定组件字段信息
var fields = new SorterItem<int>[2];
// 若用于记录信息的SorterItem数组长度小于实体集合长度,会将其扩展至相同长度,此处排序前fields长度为2,排序后为3
// 没有指定组件字段的实体固定放在最后
fields = entitySet.Sort<TestComponent1, int>(nameof(TestComponent1.value), Order.Descending, fields);
/* 排序后集合情况 */
// 集合中实体顺序为:entity3, entity2, entity1
/* 排序后fields情况 */
// EntityId: 3, value: 1 EntityId: 2, value: 0 EntityId: 1, value: null Method |
|---|
IEntity this[int index] 索引访问方法。 |
Parameters
Name | Type | Description |
|---|---|---|
index | int | 索引。 |
Return
Type | Description |
|---|---|
IEntity | 返回索引位置对应的实体。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity() entitySet.Add(entity); // 索引方法 entitySet[0]; // 等于entity
Method |
|---|
bool Remove(IEntity entity) 移除指定实体。 |
Parameters
Name | Type | Description |
|---|---|---|
entity | IEntity | 实体。 |
Return
Type | Description |
|---|---|
bool |
|
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity() entitySet.Add(entity); // 移除实体 entitySet.Remove(entity); // true // 移除集合中没有的实体,返回false entitySet.Remove(entity); // false
Method |
|---|
int IndexOf(IEntity entity) 查询指定实体在列表中的索引。 |
Parameters
Name | Type | Description |
|---|---|---|
entity | IEntity | 实体。 |
Return
Type | Description |
|---|---|
int | 返回实体索引位置。 不存在则返回-1。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity(1) var entity2 = world.CreateEntity(2); entitySet.Add(entity); // 获取实体在集合中的索引 entitySet.IndexOf(entity); // 1 // 集合中没有的实体,返回-1 entitySet.IndexOf(entity2); // -1
Method |
|---|
bool Contains(IEntity entity) 判断列表中是否包含指定实体。 |
Parameters
Name | Type | Description |
|---|---|---|
entity | IEntity | 实体。 |
Return
Type | Description |
|---|---|
bool |
|
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity(1) var entity2 = world.CreateEntity(2); entitySet.Add(entity); // 判断集合是否包含指定实体 entitySet.Contains(entity); // true entitySet.Contains(entity2); // false
Method |
|---|
void Insert(int index, IEntity entity) 在列表中指定位置插入实体。 |
Parameters
Name | Type | Description |
|---|---|---|
index | int | 索引位置。 |
entity | IEntity | 实体。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity(1) var entity2 = world.CreateEntity(2); entitySet.Add(entity); // 在集合指定位置插入实体 entitySet.Insert(0, entity2); // 此时集合中实体顺序为:entity2, entity
Method |
|---|
void RemoveAt(int index) 移除列表中指定位置的实体。 |
Parameters
Name | Type | Description |
|---|---|---|
index | int | 索引位置。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity(1) var entity2 = world.CreateEntity(2); entitySet.Add(entity); entitySet.Add(entity2); // 移除集合指定位置实体 entitySet.RemoveAt(0); // 此时集合中实体顺序为:entity2
Method |
|---|
void CopyTo(IEntity[] entityArray, int index) 将列表中的实体,复制到指定实体数组中的指定位置。 |
Parameters
Name | Type | Description |
|---|---|---|
entityArray | IEntity[] | 实体数组。 |
index | int | 索引位置。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity(1) var entity2 = world.CreateEntity(2); entitySet.Add(entity); entitySet.Add(entity2); // 将集合复制到目标实体数组的指定位置,目标实体数组长度必须足够 var target = new IEntity[2]; entitySet.CopyTo(target, 0);
Method |
|---|
string ToString() 将列表中的实体数量以字符串形式返回。 |
Return
Type | Description |
|---|---|
string | 实体数量。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity(1) var entity2 = world.CreateEntity(2); entitySet.Add(entity); entitySet.Add(entity2); // 打印集合实体数量 entitySet.ToString(); // "Count: 2"
Method |
|---|
EntitySetEnumerator GetEnumerator() 获取实体列表枚举器,用于遍历这组实体,foreach自动调用。 |
Return
Type | Description |
|---|---|
EntitySetEnumerator | 实体列表枚举器。 |
Sample Code
var world = new IECSWorld();
var entitySet = new EntitySet(world);
var entity = world.CreateEntity(1)
var entity2 = world.CreateEntity(2);
entitySet.Add(entity);
entitySet.Add(entity2);
// foreach自动调用GetEnumerator(),遍历集合所有实体
foreach(var e in entitySet)
{
/* 遍历实体 */
} Method |
|---|
void ProcessBatchOnAll(BatchProcessor processor) 将批量处理器中的指令应用到EntitySet中的所有实体上。 |
Parameters
Name | Type | Description |
|---|---|---|
processor | BatchProcessor | 批量处理器。 |
Sample Code
var world = new IECSWorld(); var entitySet = new EntitySet(world); var entity = world.CreateEntity(1) var entity2 = world.CreateEntity(2); entitySet.Add(entity); entitySet.Add(entity2); var batch = new BatchProcessor(); batch.Inactive(); batch.AddComponent(new PgdPosition()); // 将批处理器中的指令批量应用到集合中所有实体上 entitySet.ProcessBatchOnAll(batch);