目录

EntitySet

Class/Struct Info

public sealed class EntitySet : IList<IEntity>

IList<IEntity>的实现,一组实体的列表形式表达,支持IList的基本列表操作,可以对一组实体进行批量操作。

Constructor Summary

Constructor Name And Description

EntitySet()

初始化EntitySet。

EntitySet(IECSWorld ecsWorld)

初始化EntitySet,设置World。

Property Summary

Name

Type

Description

Count

int

实体数量。

Capacity

int

列表容量。

World

IECSWorld

世界。

Ids

ReadOnlySpan<int>

实体标识的只读内存。

IsReadOnly

bool

只读标志。

Sample Code
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

Enum Summary

Enum info

public enum Order

EntitySet枚举值,用于指示EntitySet排序模式。

Enum Value Summary

[h2]Order

Enum Value

Description

None

不指定排序模式。

Ascending

升序模式。

Descending

降序模式。

Method Summary

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

this[int index]

索引访问方法。

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

GetEnumerator()

获取实体列表枚举器,用于遍历这组实体,foreach自动调用。

void

ProcessBatchOnAll(BatchProcessor processor)

将批量处理器中的指令应用到EntitySet中的所有实体上。

Constructors

[h2]EntitySet

Constructor Name And Description

EntitySet()

初始化EntitySet。

Sample Code

// 创建一个EntitySet
var entitySet = new EntitySet();

[h2]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);

Methods

[h2]SetWorld

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);

[h2]Clear

Method

void Clear()

清空实体列表。

Sample Code

var world = new IECSWorld();
var entitySet = new EntitySet(world);
entitySet.Add(world.CreateEntity());
// 清空集合
entitySet.Clear();
entitySet.Count; // 0

[h2]Add

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());

[h2]Add

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);

[h2]AddEntityTree

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

[h2]AddTags

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标签

[h2]RemoveTags

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标签

[h2]Sort<TComponent, TField>

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

[h2]this[int index]

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

[h2]Remove

Method

bool Remove(IEntity entity)

移除指定实体。

Parameters

Name

Type

Description

entity

IEntity

实体。

Return

Type

Description

bool

  • true:表示成功移除。
  • false:表示列表中不存在该实体。

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

[h2]IndexOf

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

[h2]Contains

Method

bool Contains(IEntity entity)

判断列表中是否包含指定实体。

Parameters

Name

Type

Description

entity

IEntity

实体。

Return

Type

Description

bool

  • true:表示包含该实体。
  • false:表示列表不包含该实体。

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

[h2]Insert

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

[h2]RemoveAt

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

[h2]CopyTo

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);

[h2]ToString

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"

[h2]GetEnumerator

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)
{
    /* 遍历实体 */
}

[h2]ProcessBatchOnAll

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);