Documentation
¶
Overview ¶
Package ec 定义实体—组件模型及其生命周期状态。
Package ec 提供框架核心的数据模型:Entity、Component、实体树节点状态、组件启停 事件、作用域与原型描述接口。
常见用法是:
- 为实体嵌入 EntityBehavior;
- 为组件嵌入 ComponentBehavior;
- 通过生命周期接口在 core.Runtime 驱动下接收 Awake/Start/Update/Shut/Dispose;
- 通过 Entity 的组件管理与树节点接口组合复杂对象结构。
ec 包负责实体与组件本身的状态机与事件表,不负责原型库的声明与注册。原型系统 位于 ec/pt 包,运行时调度与生命周期推进则由根包 core 和 runtime 包完成。
除 ConcurrentEntity 与 ConcurrentComponent 明确暴露的能力外,实体、组件及实体树 操作都应在所属 Runtime 的运行 goroutine 中执行。两个并发视图均提供 Lifetime AsyncScope;Entity 销毁或 Component 移除时会关闭对应 Scope,取消其中的协作式 后台任务并禁止新任务。
Index ¶
- Variables
- func BindEventComponentDestroy(auto iAutoEventComponentDestroy, subscriber EventComponentDestroy, ...) event.Handle
- func BindEventComponentEnableChanged(auto iAutoEventComponentEnableChanged, subscriber EventComponentEnableChanged, ...) event.Handle
- func BindEventComponentManagerAddComponents(auto iAutoEventComponentManagerAddComponents, ...) event.Handle
- func BindEventComponentManagerComponentEnableChanged(auto iAutoEventComponentManagerComponentEnableChanged, ...) event.Handle
- func BindEventComponentManagerFirstTouchComponent(auto iAutoEventComponentManagerFirstTouchComponent, ...) event.Handle
- func BindEventComponentManagerRemoveComponent(auto iAutoEventComponentManagerRemoveComponent, ...) event.Handle
- func BindEventEntityDestroy(auto iAutoEventEntityDestroy, subscriber EventEntityDestroy, priority ...int32) event.Handle
- func BindEventTreeNodeAddChild(auto iAutoEventTreeNodeAddChild, subscriber EventTreeNodeAddChild, ...) event.Handle
- func BindEventTreeNodeAttachParent(auto iAutoEventTreeNodeAttachParent, subscriber EventTreeNodeAttachParent, ...) event.Handle
- func BindEventTreeNodeDetachParent(auto iAutoEventTreeNodeDetachParent, subscriber EventTreeNodeDetachParent, ...) event.Handle
- func BindEventTreeNodeMoveTo(auto iAutoEventTreeNodeMoveTo, subscriber EventTreeNodeMoveTo, ...) event.Handle
- func BindEventTreeNodeRemoveChild(auto iAutoEventTreeNodeRemoveChild, subscriber EventTreeNodeRemoveChild, ...) event.Handle
- func UnsafeComponent(comp Component) _UnsafeComponentdeprecated
- func UnsafeConcurrentComponent(component ConcurrentComponent) _UnsafeConcurrentComponentdeprecated
- func UnsafeConcurrentEntity(entity ConcurrentEntity) _UnsafeConcurrentEntitydeprecated
- func UnsafeEntity(entity Entity) _UnsafeEntitydeprecated
- type BuiltinComponent
- type Component
- type ComponentBehavior
- func (comp *ComponentBehavior) AsyncScope() *async.Scope
- func (comp *ComponentBehavior) Builtin() BuiltinComponent
- func (comp *ComponentBehavior) ConcurrentContextCache() iface.Cache
- func (comp *ComponentBehavior) CurrentContextCache() iface.Cache
- func (comp *ComponentBehavior) Destroy()
- func (comp *ComponentBehavior) Enabled() bool
- func (comp *ComponentBehavior) Entity() Entity
- func (comp *ComponentBehavior) EventComponentDestroy() event.IEvent
- func (comp *ComponentBehavior) EventComponentEnableChanged() event.IEvent
- func (comp *ComponentBehavior) Id() uid.Id
- func (comp *ComponentBehavior) Managed() *event.ManagedHandles
- func (comp *ComponentBehavior) Name() string
- func (comp *ComponentBehavior) Reflected() reflect.Value
- func (comp *ComponentBehavior) Removable() bool
- func (comp *ComponentBehavior) SetEnabled(b bool)
- func (comp *ComponentBehavior) State() ComponentState
- func (comp *ComponentBehavior) String() string
- type ComponentPT
- type ComponentState
- type ConcurrentComponent
- type ConcurrentEntity
- type Entity
- type EntityBehavior
- func (entity *EntityBehavior) AddComponent(name string, components ...Component) error
- func (entity *EntityBehavior) AfterFutureWait(futureID uint64)
- func (entity *EntityBehavior) AsyncScope() *async.Scope
- func (entity *EntityBehavior) BeforeFutureWait(futureID uint64, completionExecutorID async.ExecutorID) error
- func (entity *EntityBehavior) ConcurrentContextCache() iface.Cache
- func (entity *EntityBehavior) CountComponents() int
- func (entity *EntityBehavior) CurrentContextCache() iface.Cache
- func (entity *EntityBehavior) Destroy()
- func (entity *EntityBehavior) EachComponents(fun generic.Action1[Component])
- func (entity *EntityBehavior) EventComponentManagerAddComponents() event.IEvent
- func (entity *EntityBehavior) EventComponentManagerComponentEnableChanged() event.IEvent
- func (entity *EntityBehavior) EventComponentManagerFirstTouchComponent() event.IEvent
- func (entity *EntityBehavior) EventComponentManagerRemoveComponent() event.IEvent
- func (entity *EntityBehavior) EventEntityDestroy() event.IEvent
- func (entity *EntityBehavior) EventTreeNodeAddChild() event.IEvent
- func (entity *EntityBehavior) EventTreeNodeAttachParent() event.IEvent
- func (entity *EntityBehavior) EventTreeNodeDetachParent() event.IEvent
- func (entity *EntityBehavior) EventTreeNodeMoveTo() event.IEvent
- func (entity *EntityBehavior) EventTreeNodeRemoveChild() event.IEvent
- func (entity *EntityBehavior) FilterComponents(fun generic.Func1[Component, bool]) []Component
- func (entity *EntityBehavior) GetComponent(name string) Component
- func (entity *EntityBehavior) GetComponentById(id uid.Id) Component
- func (entity *EntityBehavior) GetComponentByPT(prototype string) Component
- func (entity *EntityBehavior) GetComponents(name string) []Component
- func (entity *EntityBehavior) GetComponentsByPT(prototype string) []Component
- func (entity *EntityBehavior) Id() uid.Id
- func (entity *EntityBehavior) InstanceFaceCache() iface.Cache
- func (entity *EntityBehavior) ListComponents() []Component
- func (entity *EntityBehavior) Managed() *event.ManagedHandles
- func (entity *EntityBehavior) Meta() meta.Meta
- func (entity *EntityBehavior) PT() EntityPT
- func (entity *EntityBehavior) RangeComponents(fun generic.Func1[Component, bool])
- func (entity *EntityBehavior) Reflected() reflect.Value
- func (entity *EntityBehavior) RemoveComponent(name string)
- func (entity *EntityBehavior) RemoveComponentById(id uid.Id)
- func (entity *EntityBehavior) RemoveComponentByPT(prototype string)
- func (entity *EntityBehavior) ReversedEachComponents(fun generic.Action1[Component])
- func (entity *EntityBehavior) ReversedRangeComponents(fun generic.Func1[Component, bool])
- func (entity *EntityBehavior) Scope() Scope
- func (entity *EntityBehavior) State() EntityState
- func (entity *EntityBehavior) String() string
- func (entity *EntityBehavior) Terminated() async.Signal
- func (entity *EntityBehavior) TreeNodeState() TreeNodeState
- type EntityOptions
- type EntityPT
- type EntityState
- type EventComponentDestroy
- type EventComponentDestroyHandler
- type EventComponentEnableChanged
- type EventComponentEnableChangedHandler
- type EventComponentManagerAddComponents
- type EventComponentManagerAddComponentsHandler
- type EventComponentManagerComponentEnableChanged
- type EventComponentManagerComponentEnableChangedHandler
- type EventComponentManagerFirstTouchComponent
- type EventComponentManagerFirstTouchComponentHandler
- type EventComponentManagerRemoveComponent
- type EventComponentManagerRemoveComponentHandler
- type EventEntityDestroy
- type EventEntityDestroyHandler
- type EventTreeNodeAddChild
- type EventTreeNodeAddChildHandler
- type EventTreeNodeAttachParent
- type EventTreeNodeAttachParentHandler
- type EventTreeNodeDetachParent
- type EventTreeNodeDetachParentHandler
- type EventTreeNodeMoveTo
- type EventTreeNodeMoveToHandler
- type EventTreeNodeRemoveChild
- type EventTreeNodeRemoveChildHandler
- type IComponentEventTab
- type IEntityComponentManagerEventTab
- type IEntityEventTab
- type IEntityTreeNodeEventTab
- type Scope
- type TreeNodeState
Constants ¶
This section is empty.
Variables ¶
var ( EventComponentEnableChangedId = event.DeclareEventIdT[componentEventTab](0) EventComponentDestroyId = event.DeclareEventIdT[componentEventTab](1) )
var ( EventComponentManagerAddComponentsId = event.DeclareEventIdT[entityComponentManagerEventTab](0) EventComponentManagerRemoveComponentId = event.DeclareEventIdT[entityComponentManagerEventTab](1) EventComponentManagerComponentEnableChangedId = event.DeclareEventIdT[entityComponentManagerEventTab](2) EventComponentManagerFirstTouchComponentId = event.DeclareEventIdT[entityComponentManagerEventTab](3) )
var ( EventTreeNodeAddChildId = event.DeclareEventIdT[entityTreeNodeEventTab](0) EventTreeNodeRemoveChildId = event.DeclareEventIdT[entityTreeNodeEventTab](1) EventTreeNodeAttachParentId = event.DeclareEventIdT[entityTreeNodeEventTab](2) EventTreeNodeDetachParentId = event.DeclareEventIdT[entityTreeNodeEventTab](3) EventTreeNodeMoveToId = event.DeclareEventIdT[entityTreeNodeEventTab](4) )
var (
ErrEC = fmt.Errorf("%w: ec", exception.ErrCore) // ErrEC 是实体—组件模块错误的共同根错误。
)
var (
EventEntityDestroyId = event.DeclareEventIdT[entityEventTab](0)
)
var With _EntityOption
With 提供实体选项构造器。
Functions ¶
func BindEventComponentDestroy ¶ added in v0.4.25
func BindEventComponentDestroy(auto iAutoEventComponentDestroy, subscriber EventComponentDestroy, priority ...int32) event.Handle
func BindEventComponentEnableChanged ¶ added in v0.3.80
func BindEventComponentEnableChanged(auto iAutoEventComponentEnableChanged, subscriber EventComponentEnableChanged, priority ...int32) event.Handle
func BindEventComponentManagerAddComponents ¶ added in v0.3.66
func BindEventComponentManagerAddComponents(auto iAutoEventComponentManagerAddComponents, subscriber EventComponentManagerAddComponents, priority ...int32) event.Handle
func BindEventComponentManagerComponentEnableChanged ¶ added in v0.4.25
func BindEventComponentManagerComponentEnableChanged(auto iAutoEventComponentManagerComponentEnableChanged, subscriber EventComponentManagerComponentEnableChanged, priority ...int32) event.Handle
func BindEventComponentManagerFirstTouchComponent ¶ added in v0.3.66
func BindEventComponentManagerFirstTouchComponent(auto iAutoEventComponentManagerFirstTouchComponent, subscriber EventComponentManagerFirstTouchComponent, priority ...int32) event.Handle
func BindEventComponentManagerRemoveComponent ¶ added in v0.3.66
func BindEventComponentManagerRemoveComponent(auto iAutoEventComponentManagerRemoveComponent, subscriber EventComponentManagerRemoveComponent, priority ...int32) event.Handle
func BindEventEntityDestroy ¶ added in v0.4.25
func BindEventEntityDestroy(auto iAutoEventEntityDestroy, subscriber EventEntityDestroy, priority ...int32) event.Handle
func BindEventTreeNodeAddChild ¶ added in v0.2.58
func BindEventTreeNodeAddChild(auto iAutoEventTreeNodeAddChild, subscriber EventTreeNodeAddChild, priority ...int32) event.Handle
func BindEventTreeNodeAttachParent ¶ added in v0.4.25
func BindEventTreeNodeAttachParent(auto iAutoEventTreeNodeAttachParent, subscriber EventTreeNodeAttachParent, priority ...int32) event.Handle
func BindEventTreeNodeDetachParent ¶ added in v0.4.25
func BindEventTreeNodeDetachParent(auto iAutoEventTreeNodeDetachParent, subscriber EventTreeNodeDetachParent, priority ...int32) event.Handle
func BindEventTreeNodeMoveTo ¶ added in v0.4.25
func BindEventTreeNodeMoveTo(auto iAutoEventTreeNodeMoveTo, subscriber EventTreeNodeMoveTo, priority ...int32) event.Handle
func BindEventTreeNodeRemoveChild ¶ added in v0.2.58
func BindEventTreeNodeRemoveChild(auto iAutoEventTreeNodeRemoveChild, subscriber EventTreeNodeRemoveChild, priority ...int32) event.Handle
func UnsafeComponent
deprecated
func UnsafeComponent(comp Component) _UnsafeComponent
UnsafeComponent 暴露组件状态机与运行时句柄等框架内部能力。
Deprecated: 仅供框架内部使用。
func UnsafeConcurrentComponent
deprecated
added in
v0.4.27
func UnsafeConcurrentComponent(component ConcurrentComponent) _UnsafeConcurrentComponent
UnsafeConcurrentComponent 暴露 ConcurrentComponent 的框架内部能力。
Deprecated: 仅供框架内部使用。
func UnsafeConcurrentEntity
deprecated
added in
v0.3.21
func UnsafeConcurrentEntity(entity ConcurrentEntity) _UnsafeConcurrentEntity
UnsafeConcurrentEntity 暴露 ConcurrentEntity 的框架内部能力。
Deprecated: 仅供框架内部使用。
func UnsafeEntity
deprecated
func UnsafeEntity(entity Entity) _UnsafeEntity
UnsafeEntity 暴露实体状态机、组件表与运行时句柄等框架内部能力。
Deprecated: 仅供框架内部使用。
Types ¶
type BuiltinComponent ¶ added in v0.3.60
type BuiltinComponent struct {
PT ComponentPT // PT 是组件原型。
Offset int // Offset 是组件在实体原型中的位置。
Name string // Name 是组件加入实体时使用的名称。
Removable bool // Removable 指示组件是否允许动态删除。
Meta meta.Meta // Meta 是该内建组件的原型元数据。
}
BuiltinComponent 描述实体原型中的一个内建组件。
func (BuiltinComponent) MarshalJSON ¶ added in v0.4.25
func (bc BuiltinComponent) MarshalJSON() ([]byte, error)
MarshalJSON 将内建组件描述编码为 JSON。
func (BuiltinComponent) String ¶ added in v0.4.25
func (bc BuiltinComponent) String() string
String 返回内建组件描述的 JSON 文本;编码失败时 panic。
type Component ¶
type Component interface {
ConcurrentComponent
corectx.CurrentContextProvider
// Id 返回组件 ID;未启用组件唯一 ID 时通常与 Entity ID 相同。
Id() uid.Id
// Builtin 返回组件在实体原型中的内建描述;动态组件返回空描述。
Builtin() BuiltinComponent
// Name 返回组件在 Entity 中的名称。
Name() string
// Entity 返回组件所依附的实体。
Entity() Entity
// State 返回当前生命周期状态。
State() ComponentState
// Reflected 返回实际组件实例的反射值。
Reflected() reflect.Value
// Removable 报告组件是否允许动态删除。
Removable() bool
// Enabled 报告组件是否已被标记为启用。
Enabled() bool
// SetEnabled 请求切换启用状态;重复设置或组件已离开活动阶段时无效。
SetEnabled(b bool)
// Managed 返回随组件销毁自动解绑的事件句柄集合。
Managed() *event.ManagedHandles
// Destroy 请求从实体删除组件;不可删除的组件会忽略该请求。
Destroy()
IComponentEventTab
// contains filtered or unexported methods
}
Component 表示依附于实体、由实体所属 Runtime 驱动生命周期的组件。
除 ConcurrentComponent 暴露的能力外,Component 的方法应在所属 Runtime 的 运行 goroutine 中调用。
type ComponentBehavior ¶
type ComponentBehavior struct {
// contains filtered or unexported fields
}
ComponentBehavior 提供 Component 的默认实现,扩展组件时应将其匿名嵌入自定义结构体。
func (*ComponentBehavior) AsyncScope ¶ added in v0.4.27
func (comp *ComponentBehavior) AsyncScope() *async.Scope
AsyncScope 返回绑定组件 Lifetime 的后台任务作用域。 Scope 在组件从 Entity 移除或随 Entity 销毁时关闭;SetEnabled(false) 不会关闭它。 组件尚未完成 Runtime 初始化时返回 nil。
func (*ComponentBehavior) Builtin ¶ added in v0.4.25
func (comp *ComponentBehavior) Builtin() BuiltinComponent
Builtin 返回组件在实体原型中的内建描述;动态组件返回空描述。
func (*ComponentBehavior) ConcurrentContextCache ¶ added in v0.4.27
func (comp *ComponentBehavior) ConcurrentContextCache() iface.Cache
ConcurrentContextCache 返回所属 Entity 的并发 Runtime 上下文接口缓存。
func (*ComponentBehavior) CurrentContextCache ¶ added in v0.4.27
func (comp *ComponentBehavior) CurrentContextCache() iface.Cache
CurrentContextCache 返回所属实体的当前上下文接口缓存。
func (*ComponentBehavior) Destroy ¶ added in v0.4.25
func (comp *ComponentBehavior) Destroy()
Destroy 请求从实体删除组件;不可删除或已离开活动阶段时无效。
func (*ComponentBehavior) Enabled ¶ added in v0.4.25
func (comp *ComponentBehavior) Enabled() bool
Enabled 报告组件是否已被标记为启用。
func (*ComponentBehavior) Entity ¶ added in v0.4.25
func (comp *ComponentBehavior) Entity() Entity
Entity 返回组件所依附的实体。
func (*ComponentBehavior) EventComponentDestroy ¶ added in v0.4.25
func (comp *ComponentBehavior) EventComponentDestroy() event.IEvent
EventComponentDestroy 返回组件销毁事件。
func (*ComponentBehavior) EventComponentEnableChanged ¶ added in v0.3.80
func (comp *ComponentBehavior) EventComponentEnableChanged() event.IEvent
EventComponentEnableChanged 返回组件启用状态变更事件。
func (*ComponentBehavior) Id ¶ added in v0.4.25
func (comp *ComponentBehavior) Id() uid.Id
Id 返回组件 ID。
func (*ComponentBehavior) Managed ¶ added in v0.4.25
func (comp *ComponentBehavior) Managed() *event.ManagedHandles
Managed 返回随组件销毁自动解绑的事件句柄集合。
func (*ComponentBehavior) Name ¶ added in v0.4.25
func (comp *ComponentBehavior) Name() string
Name 返回组件在实体中的名称。
func (*ComponentBehavior) Reflected ¶ added in v0.4.25
func (comp *ComponentBehavior) Reflected() reflect.Value
Reflected 返回实际组件实例的反射值,并缓存首次解析结果。
func (*ComponentBehavior) Removable ¶ added in v0.4.25
func (comp *ComponentBehavior) Removable() bool
Removable 报告组件是否允许动态删除。
func (*ComponentBehavior) SetEnabled ¶ added in v0.4.25
func (comp *ComponentBehavior) SetEnabled(b bool)
SetEnabled 请求切换启用状态,并同步派发组件及实体组件管理器事件。
func (*ComponentBehavior) State ¶ added in v0.4.25
func (comp *ComponentBehavior) State() ComponentState
State 返回当前生命周期状态。
func (*ComponentBehavior) String ¶
func (comp *ComponentBehavior) String() string
String 返回包含组件、实体及原型标识的 JSON 文本;组件尚未完成 Runtime 初始化时返回空字符串。
type ComponentPT ¶ added in v0.3.55
type ComponentPT interface {
fmt.Stringer
// Prototype 返回组件原型名。
Prototype() string
// InstanceRT 返回实际组件实例的指针类型。
InstanceRT() reflect.Type
// Construct 根据原型创建处于 Born 状态的组件。
Construct() Component
}
ComponentPT 描述可构造组件的原型。
type ComponentState ¶
type ComponentState int8
ComponentState 表示组件生命周期所处的阶段;状态通常由所属实体的 Runtime 推进。
const ( ComponentState_Born ComponentState = iota // ComponentState_Born 表示组件已构造、尚未依附实体。 ComponentState_Attached // ComponentState_Attached 表示组件已加入实体。 ComponentState_Awakened // ComponentState_Awakened 表示组件已完成唤醒。 ComponentState_Enabling // ComponentState_Enabling 表示组件正在执行启用阶段。 ComponentState_Idle // ComponentState_Idle 表示组件已唤醒但当前未启用。 ComponentState_Starting // ComponentState_Starting 表示组件正在执行启动阶段。 ComponentState_Alive // ComponentState_Alive 表示组件已启动并处于活动状态。 ComponentState_Detaching // ComponentState_Detaching 表示组件正在脱离实体。 ComponentState_Shutting // ComponentState_Shutting 表示组件正在执行关闭阶段。 ComponentState_Disabling // ComponentState_Disabling 表示组件正在执行禁用阶段。 ComponentState_Dead // ComponentState_Dead 表示组件已死亡,事件表已停用。 ComponentState_Destroyed // ComponentState_Destroyed 表示组件已完成销毁并释放托管句柄。 )
func (ComponentState) String ¶
func (i ComponentState) String() string
type ConcurrentComponent ¶ added in v0.4.27
type ConcurrentComponent interface {
corectx.ConcurrentContextProvider
corectx.AsyncScopeProvider
fmt.Stringer
// Id 返回组件 ID;未启用组件唯一 ID 时通常与 Entity ID 相同。
Id() uid.Id
// Name 返回组件在 Entity 中的名称。
Name() string
// contains filtered or unexported methods
}
ConcurrentComponent 暴露可跨 goroutine 使用的组件身份、字符串表示、并发上下文和生命周期 Scope。
组件随 Entity 进入 Runtime,或动态加入运行中 Entity 并完成 Runtime 初始化后,才能 跨 goroutine 使用此接口;提前调用除 AsyncScope 和 String 外的方法属于未定义行为。
该视图不暴露 State、Enabled、Entity、Destroy 等 Runtime 局部能力。需要读取或修改 这些状态时,应通过 Submit、Post 或 ContinueOn 回到组件所属 Runtime。
type ConcurrentEntity ¶
type ConcurrentEntity interface {
corectx.ConcurrentContextProvider
corectx.AsyncScopeProvider
fmt.Stringer
// Id 返回实体 ID。
Id() uid.Id
// PT 返回实体原型。
PT() EntityPT
// contains filtered or unexported methods
}
ConcurrentEntity 暴露可跨协程安全读取的实体信息与上下文。
实体进入 Runtime(EntityState_Entered)后,才能跨 goroutine 使用此接口;提前调用 除 AsyncScope 和 String 外的方法属于未定义行为。
组件管理、实体树和 Destroy 等操作仍须通过所属 Runtime 的运行协程执行。
type Entity ¶
type Entity interface {
ConcurrentEntity
corectx.CurrentContextProvider
reinterpret.InstanceProvider
// Id 返回实体 ID。
Id() uid.Id
// PT 返回实体原型;尚未绑定原型时返回空原型对象。
PT() EntityPT
// Scope 返回实体的可查询范围。
Scope() Scope
// State 返回当前生命周期状态。
State() EntityState
// Reflected 返回实际实体实例的反射值。
Reflected() reflect.Value
// Meta 返回实体元数据。
Meta() meta.Meta
// Managed 返回随实体销毁自动解绑的事件句柄集合。
Managed() *event.ManagedHandles
// Destroy 请求所属 Runtime 销毁实体;重复请求会被忽略。
Destroy()
IEntityEventTab
// contains filtered or unexported methods
}
Entity 表示由 Runtime 驱动生命周期的实体。
除 ConcurrentEntity 暴露的只读能力外,其方法应在所属 Runtime 的运行协程中调用。
func NewEntity ¶
func NewEntity(settings ...option.Setting[EntityOptions]) Entity
NewEntity 创建处于 Born 状态的实体。
func UnsafeNewEntity
deprecated
func UnsafeNewEntity(options EntityOptions) Entity
UnsafeNewEntity 使用已解析的选项创建实体,供框架内部使用。
Deprecated: 请使用 NewEntity。
type EntityBehavior ¶
EntityBehavior 提供 Entity 的默认实现,扩展实体时应将其匿名嵌入自定义结构体。
func (*EntityBehavior) AddComponent ¶
func (entity *EntityBehavior) AddComponent(name string, components ...Component) error
AddComponent 将 Born 状态的组件加入实体;允许同名组件。
components 为空、包含 nil 或组件不处于 Born 状态时返回错误。实体已启动时, Runtime 会通过添加事件同步推进新组件的生命周期。
func (*EntityBehavior) AfterFutureWait ¶ added in v0.4.27
func (entity *EntityBehavior) AfterFutureWait(futureID uint64)
AfterFutureWait 清理所属 Runtime 的等待诊断状态。
func (*EntityBehavior) AsyncScope ¶ added in v0.4.27
func (entity *EntityBehavior) AsyncScope() *async.Scope
AsyncScope 返回绑定实体生命周期的后台任务作用域;实体尚未进入 Runtime 时返回 nil。
func (*EntityBehavior) BeforeFutureWait ¶ added in v0.4.27
func (entity *EntityBehavior) BeforeFutureWait(futureID uint64, completionExecutorID async.ExecutorID) error
BeforeFutureWait 把 Entity 作为等待 Context 时的检查转交给所属 Runtime。
func (*EntityBehavior) ConcurrentContextCache ¶ added in v0.4.27
func (entity *EntityBehavior) ConcurrentContextCache() iface.Cache
ConcurrentContextCache 返回实体所属 Runtime 的并发上下文接口缓存。
func (*EntityBehavior) CountComponents ¶
func (entity *EntityBehavior) CountComponents() int
CountComponents 返回当前依附于实体的组件数。
func (*EntityBehavior) CurrentContextCache ¶ added in v0.4.27
func (entity *EntityBehavior) CurrentContextCache() iface.Cache
CurrentContextCache 返回实体所属 Runtime 的当前上下文接口缓存。
func (*EntityBehavior) Destroy ¶ added in v0.4.25
func (entity *EntityBehavior) Destroy()
Destroy 请求所属 Runtime 销毁实体;实体离开活动阶段后调用无效。
func (*EntityBehavior) EachComponents ¶ added in v0.4.25
func (entity *EntityBehavior) EachComponents(fun generic.Action1[Component])
EachComponents 按加入顺序遍历全部组件。
func (*EntityBehavior) EventComponentManagerAddComponents ¶ added in v0.3.66
func (entity *EntityBehavior) EventComponentManagerAddComponents() event.IEvent
EventComponentManagerAddComponents 返回组件批量添加事件。
func (*EntityBehavior) EventComponentManagerComponentEnableChanged ¶ added in v0.4.25
func (entity *EntityBehavior) EventComponentManagerComponentEnableChanged() event.IEvent
EventComponentManagerComponentEnableChanged 返回组件启用状态变更事件。
func (*EntityBehavior) EventComponentManagerFirstTouchComponent ¶ added in v0.3.66
func (entity *EntityBehavior) EventComponentManagerFirstTouchComponent() event.IEvent
EventComponentManagerFirstTouchComponent 返回组件首次访问事件。
func (*EntityBehavior) EventComponentManagerRemoveComponent ¶ added in v0.3.66
func (entity *EntityBehavior) EventComponentManagerRemoveComponent() event.IEvent
EventComponentManagerRemoveComponent 返回组件移除事件。
func (*EntityBehavior) EventEntityDestroy ¶ added in v0.4.25
func (entity *EntityBehavior) EventEntityDestroy() event.IEvent
EventEntityDestroy 返回实体销毁请求事件。
func (*EntityBehavior) EventTreeNodeAddChild ¶ added in v0.2.58
func (entity *EntityBehavior) EventTreeNodeAddChild() event.IEvent
EventTreeNodeAddChild 返回直接子实体添加事件。
func (*EntityBehavior) EventTreeNodeAttachParent ¶ added in v0.4.25
func (entity *EntityBehavior) EventTreeNodeAttachParent() event.IEvent
EventTreeNodeAttachParent 返回接入父节点事件。
func (*EntityBehavior) EventTreeNodeDetachParent ¶ added in v0.4.25
func (entity *EntityBehavior) EventTreeNodeDetachParent() event.IEvent
EventTreeNodeDetachParent 返回脱离父节点事件。
func (*EntityBehavior) EventTreeNodeMoveTo ¶ added in v0.4.25
func (entity *EntityBehavior) EventTreeNodeMoveTo() event.IEvent
EventTreeNodeMoveTo 返回父节点变更事件。
func (*EntityBehavior) EventTreeNodeRemoveChild ¶ added in v0.2.58
func (entity *EntityBehavior) EventTreeNodeRemoveChild() event.IEvent
EventTreeNodeRemoveChild 返回直接子实体移除事件。
func (*EntityBehavior) FilterComponents ¶ added in v0.2.58
FilterComponents 返回满足条件的组件快照,并对返回项执行首次访问处理。
func (*EntityBehavior) GetComponent ¶
func (entity *EntityBehavior) GetComponent(name string) Component
GetComponent 返回首个同名组件;不存在时返回 nil。
func (*EntityBehavior) GetComponentById ¶
func (entity *EntityBehavior) GetComponentById(id uid.Id) Component
GetComponentById 按 ID 查询组件;未启用组件唯一 ID 或不存在时返回 nil。
func (*EntityBehavior) GetComponentByPT ¶ added in v0.3.65
func (entity *EntityBehavior) GetComponentByPT(prototype string) Component
GetComponentByPT 返回首个使用指定原型的组件;不存在时返回 nil。
func (*EntityBehavior) GetComponents ¶
func (entity *EntityBehavior) GetComponents(name string) []Component
GetComponents 返回全部同名组件的快照。
func (*EntityBehavior) GetComponentsByPT ¶ added in v0.4.25
func (entity *EntityBehavior) GetComponentsByPT(prototype string) []Component
GetComponentsByPT 返回全部使用指定原型的组件快照。
func (*EntityBehavior) InstanceFaceCache ¶ added in v0.4.25
func (entity *EntityBehavior) InstanceFaceCache() iface.Cache
InstanceFaceCache 返回实际实体实例的接口缓存,供类型重解释使用。
func (*EntityBehavior) ListComponents ¶ added in v0.4.25
func (entity *EntityBehavior) ListComponents() []Component
ListComponents 返回全部组件的快照,并对返回项执行首次访问处理。
func (*EntityBehavior) Managed ¶ added in v0.4.25
func (entity *EntityBehavior) Managed() *event.ManagedHandles
Managed 返回随实体销毁自动解绑的事件句柄集合。
func (*EntityBehavior) Meta ¶ added in v0.4.25
func (entity *EntityBehavior) Meta() meta.Meta
Meta 返回实体元数据。
func (*EntityBehavior) PT ¶ added in v0.4.25
func (entity *EntityBehavior) PT() EntityPT
PT 返回实体原型;尚未绑定原型时返回空原型对象。
func (*EntityBehavior) RangeComponents ¶
func (entity *EntityBehavior) RangeComponents(fun generic.Func1[Component, bool])
RangeComponents 按加入顺序遍历组件;回调返回 false 时停止。
func (*EntityBehavior) Reflected ¶ added in v0.4.25
func (entity *EntityBehavior) Reflected() reflect.Value
Reflected 返回实际实体实例的反射值,并缓存首次解析结果。
func (*EntityBehavior) RemoveComponent ¶
func (entity *EntityBehavior) RemoveComponent(name string)
RemoveComponent 按名称请求删除全部可删除的同名组件。
func (*EntityBehavior) RemoveComponentById ¶
func (entity *EntityBehavior) RemoveComponentById(id uid.Id)
RemoveComponentById 按 ID 请求删除组件;未启用组件唯一 ID 时无效。
func (*EntityBehavior) RemoveComponentByPT ¶ added in v0.4.25
func (entity *EntityBehavior) RemoveComponentByPT(prototype string)
RemoveComponentByPT 按原型名请求删除全部可删除的匹配组件。
func (*EntityBehavior) ReversedEachComponents ¶ added in v0.4.25
func (entity *EntityBehavior) ReversedEachComponents(fun generic.Action1[Component])
ReversedEachComponents 按加入顺序的逆序遍历全部组件。
func (*EntityBehavior) ReversedRangeComponents ¶ added in v0.2.58
func (entity *EntityBehavior) ReversedRangeComponents(fun generic.Func1[Component, bool])
ReversedRangeComponents 按加入顺序的逆序遍历组件;回调返回 false 时停止。
func (*EntityBehavior) Scope ¶ added in v0.4.25
func (entity *EntityBehavior) Scope() Scope
Scope 返回实体的可查询范围。
func (*EntityBehavior) State ¶ added in v0.4.25
func (entity *EntityBehavior) State() EntityState
State 返回当前生命周期状态。
func (*EntityBehavior) String ¶
func (entity *EntityBehavior) String() string
String 返回包含实体 ID 与原型名的 JSON 文本;实体尚未进入 Runtime 时返回空字符串。
func (*EntityBehavior) Terminated ¶ added in v0.3.33
func (entity *EntityBehavior) Terminated() async.Signal
Terminated 返回实体进入 Destroyed 状态时兑现的 Signal。
func (*EntityBehavior) TreeNodeState ¶ added in v0.4.25
func (entity *EntityBehavior) TreeNodeState() TreeNodeState
TreeNodeState 返回实体在 Runtime 实体树中的状态。
type EntityOptions ¶
type EntityOptions struct {
InstanceFace iface.Face[Entity] // InstanceFace 是用于扩展实体行为的实际实例。
Scope Scope // Scope 是实体的可查询范围。
PersistId uid.Id // PersistId 是实体的持久化 ID;Nil 表示由框架分配。
ComponentAwakeOnFirstTouch bool // ComponentAwakeOnFirstTouch 指示组件首次被访问时是否推进至 Awakened。
ComponentUniqueID bool // ComponentUniqueID 指示是否为每个组件分配唯一 ID。
Meta meta.Meta // Meta 是随实体携带的元数据。
}
EntityOptions 定义实体的构造选项。
type EntityPT ¶ added in v0.3.55
type EntityPT interface {
fmt.Stringer
// Prototype 返回实体原型名。
Prototype() string
// InstanceRT 返回实际实体实例的指针类型;使用默认实体实现时返回 nil。
InstanceRT() reflect.Type
// Scope 返回原型的默认实体作用域。
Scope() Scope
// ComponentAwakeOnFirstTouch 报告组件是否在首次访问时推进至 Awakened。
ComponentAwakeOnFirstTouch() bool
// ComponentUniqueID 报告是否为组件分配唯一 ID。
ComponentUniqueID() bool
// Meta 返回原型元数据。
Meta() meta.Meta
// CountComponents 返回内建组件数。
CountComponents() int
// GetComponent 返回指定位置的内建组件描述;索引越界时 panic。
GetComponent(idx int) BuiltinComponent
// ListComponents 返回全部内建组件描述的副本。
ListComponents() []BuiltinComponent
// Construct 根据原型创建处于 Born 状态的实体,并应用额外选项。
Construct(settings ...option.Setting[EntityOptions]) Entity
}
EntityPT 描述可构造实体及其内建组件的原型。
type EntityState ¶
type EntityState int8
EntityState 表示实体生命周期所处的阶段;状态通常由 Runtime 单向推进。
const ( EntityState_Born EntityState = iota // EntityState_Born 表示实体已构造、尚未进入 Runtime。 EntityState_Entered // EntityState_Entered 表示实体已加入 Runtime 的实体管理器。 EntityState_Awakened // EntityState_Awakened 表示实体已完成唤醒。 EntityState_Starting // EntityState_Starting 表示实体正在执行启动阶段。 EntityState_Alive // EntityState_Alive 表示实体已启动并参与运行时更新。 EntityState_Leaving // EntityState_Leaving 表示实体正在离开 Runtime。 EntityState_Shutting // EntityState_Shutting 表示实体正在执行关闭阶段。 EntityState_Dead // EntityState_Dead 表示实体已死亡,其上下文已取消。 EntityState_Destroyed // EntityState_Destroyed 表示实体已完成销毁并释放托管句柄。 )
func (EntityState) String ¶
func (i EntityState) String() string
type EventComponentDestroy ¶ added in v0.4.25
type EventComponentDestroy interface {
OnComponentDestroy(comp Component)
}
EventComponentDestroy 描述组件销毁流程末尾尝试派发的通知。 若组件事件表已随 Dead 状态禁用,则该通知不会到达订阅者。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventComponentDestroyHandler ¶ added in v0.4.25
type EventComponentDestroyHandler func(comp Component)
func HandleEventComponentDestroy ¶ added in v0.4.25
func HandleEventComponentDestroy(fun func(comp Component)) EventComponentDestroyHandler
func (EventComponentDestroyHandler) OnComponentDestroy ¶ added in v0.4.25
func (h EventComponentDestroyHandler) OnComponentDestroy(comp Component)
type EventComponentEnableChanged ¶ added in v0.3.80
type EventComponentEnableChanged interface {
OnComponentEnableChanged(comp Component, enable bool)
}
EventComponentEnableChanged 在组件的启用标记发生变化时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventComponentEnableChangedHandler ¶ added in v0.3.80
func HandleEventComponentEnableChanged ¶ added in v0.3.80
func HandleEventComponentEnableChanged(fun func(comp Component, enable bool)) EventComponentEnableChangedHandler
func (EventComponentEnableChangedHandler) OnComponentEnableChanged ¶ added in v0.3.80
func (h EventComponentEnableChangedHandler) OnComponentEnableChanged(comp Component, enable bool)
type EventComponentManagerAddComponents ¶ added in v0.3.66
type EventComponentManagerAddComponents interface {
OnComponentManagerAddComponents(entity Entity, components []Component)
}
EventComponentManagerAddComponents 在一批组件加入实体后同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventComponentManagerAddComponentsHandler ¶ added in v0.3.66
func HandleEventComponentManagerAddComponents ¶ added in v0.3.66
func HandleEventComponentManagerAddComponents(fun func(entity Entity, components []Component)) EventComponentManagerAddComponentsHandler
func (EventComponentManagerAddComponentsHandler) OnComponentManagerAddComponents ¶ added in v0.3.66
func (h EventComponentManagerAddComponentsHandler) OnComponentManagerAddComponents(entity Entity, components []Component)
type EventComponentManagerComponentEnableChanged ¶ added in v0.4.25
type EventComponentManagerComponentEnableChanged interface {
OnComponentManagerComponentEnableChanged(entity Entity, component Component, enable bool)
}
EventComponentManagerComponentEnableChanged 在所属组件的启用标记发生变化时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventComponentManagerComponentEnableChangedHandler ¶ added in v0.4.25
type EventComponentManagerComponentEnableChangedHandler func(entity Entity, component Component, enable bool)
func HandleEventComponentManagerComponentEnableChanged ¶ added in v0.4.25
func HandleEventComponentManagerComponentEnableChanged(fun func(entity Entity, component Component, enable bool)) EventComponentManagerComponentEnableChangedHandler
func (EventComponentManagerComponentEnableChangedHandler) OnComponentManagerComponentEnableChanged ¶ added in v0.4.25
func (h EventComponentManagerComponentEnableChangedHandler) OnComponentManagerComponentEnableChanged(entity Entity, component Component, enable bool)
type EventComponentManagerFirstTouchComponent ¶ added in v0.3.66
type EventComponentManagerFirstTouchComponent interface {
OnComponentManagerFirstTouchComponent(entity Entity, component Component)
}
EventComponentManagerFirstTouchComponent 在启用首次访问唤醒且 Attached 状态组件被访问时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventComponentManagerFirstTouchComponentHandler ¶ added in v0.3.66
func HandleEventComponentManagerFirstTouchComponent ¶ added in v0.3.66
func HandleEventComponentManagerFirstTouchComponent(fun func(entity Entity, component Component)) EventComponentManagerFirstTouchComponentHandler
func (EventComponentManagerFirstTouchComponentHandler) OnComponentManagerFirstTouchComponent ¶ added in v0.3.66
func (h EventComponentManagerFirstTouchComponentHandler) OnComponentManagerFirstTouchComponent(entity Entity, component Component)
type EventComponentManagerRemoveComponent ¶ added in v0.3.66
type EventComponentManagerRemoveComponent interface {
OnComponentManagerRemoveComponent(entity Entity, component Component)
}
EventComponentManagerRemoveComponent 在组件脱离实体时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventComponentManagerRemoveComponentHandler ¶ added in v0.3.66
func HandleEventComponentManagerRemoveComponent ¶ added in v0.3.66
func HandleEventComponentManagerRemoveComponent(fun func(entity Entity, component Component)) EventComponentManagerRemoveComponentHandler
func (EventComponentManagerRemoveComponentHandler) OnComponentManagerRemoveComponent ¶ added in v0.3.66
func (h EventComponentManagerRemoveComponentHandler) OnComponentManagerRemoveComponent(entity Entity, component Component)
type EventEntityDestroy ¶ added in v0.4.25
type EventEntityDestroy interface {
OnEntityDestroy(entity Entity)
}
EventEntityDestroy 在实体收到销毁请求时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityDestroyHandler ¶ added in v0.4.25
type EventEntityDestroyHandler func(entity Entity)
func HandleEventEntityDestroy ¶ added in v0.4.25
func HandleEventEntityDestroy(fun func(entity Entity)) EventEntityDestroyHandler
func (EventEntityDestroyHandler) OnEntityDestroy ¶ added in v0.4.25
func (h EventEntityDestroyHandler) OnEntityDestroy(entity Entity)
type EventTreeNodeAddChild ¶ added in v0.2.58
EventTreeNodeAddChild 在实体节点加入直接子实体时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventTreeNodeAddChildHandler ¶ added in v0.2.58
func HandleEventTreeNodeAddChild ¶ added in v0.2.58
func HandleEventTreeNodeAddChild(fun func(entity Entity, childId uid.Id)) EventTreeNodeAddChildHandler
func (EventTreeNodeAddChildHandler) OnTreeNodeAddChild ¶ added in v0.2.58
func (h EventTreeNodeAddChildHandler) OnTreeNodeAddChild(entity Entity, childId uid.Id)
type EventTreeNodeAttachParent ¶ added in v0.4.25
EventTreeNodeAttachParent 在实体接入父节点时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventTreeNodeAttachParentHandler ¶ added in v0.4.25
func HandleEventTreeNodeAttachParent ¶ added in v0.4.25
func HandleEventTreeNodeAttachParent(fun func(entity Entity, parentId uid.Id)) EventTreeNodeAttachParentHandler
func (EventTreeNodeAttachParentHandler) OnTreeNodeAttachParent ¶ added in v0.4.25
func (h EventTreeNodeAttachParentHandler) OnTreeNodeAttachParent(entity Entity, parentId uid.Id)
type EventTreeNodeDetachParent ¶ added in v0.4.25
EventTreeNodeDetachParent 在实体脱离父节点时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventTreeNodeDetachParentHandler ¶ added in v0.4.25
func HandleEventTreeNodeDetachParent ¶ added in v0.4.25
func HandleEventTreeNodeDetachParent(fun func(entity Entity, parentId uid.Id)) EventTreeNodeDetachParentHandler
func (EventTreeNodeDetachParentHandler) OnTreeNodeDetachParent ¶ added in v0.4.25
func (h EventTreeNodeDetachParentHandler) OnTreeNodeDetachParent(entity Entity, parentId uid.Id)
type EventTreeNodeMoveTo ¶ added in v0.4.25
type EventTreeNodeMoveTo interface {
OnTreeNodeMoveTo(entity Entity, fromParentId, toParentId uid.Id)
}
EventTreeNodeMoveTo 在实体从一个父节点移动到另一个父节点时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventTreeNodeMoveToHandler ¶ added in v0.4.25
func HandleEventTreeNodeMoveTo ¶ added in v0.4.25
func HandleEventTreeNodeMoveTo(fun func(entity Entity, fromParentId, toParentId uid.Id)) EventTreeNodeMoveToHandler
func (EventTreeNodeMoveToHandler) OnTreeNodeMoveTo ¶ added in v0.4.25
func (h EventTreeNodeMoveToHandler) OnTreeNodeMoveTo(entity Entity, fromParentId, toParentId uid.Id)
type EventTreeNodeRemoveChild ¶ added in v0.2.58
EventTreeNodeRemoveChild 在直接子实体离开实体节点时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventTreeNodeRemoveChildHandler ¶ added in v0.2.58
func HandleEventTreeNodeRemoveChild ¶ added in v0.2.58
func HandleEventTreeNodeRemoveChild(fun func(entity Entity, childId uid.Id)) EventTreeNodeRemoveChildHandler
func (EventTreeNodeRemoveChildHandler) OnTreeNodeRemoveChild ¶ added in v0.2.58
func (h EventTreeNodeRemoveChildHandler) OnTreeNodeRemoveChild(entity Entity, childId uid.Id)
type IComponentEventTab ¶ added in v0.3.48
type IEntityComponentManagerEventTab ¶ added in v0.3.66
type IEntityEventTab ¶ added in v0.3.48
type IEntityTreeNodeEventTab ¶ added in v0.3.48
type TreeNodeState ¶ added in v0.2.58
type TreeNodeState int8
TreeNodeState 表示实体在 Runtime 实体树中的过渡状态。
const ( TreeNodeState_Free TreeNodeState = iota // TreeNodeState_Free 表示实体不在实体树中。 TreeNodeState_Attaching // TreeNodeState_Attaching 表示实体正在加入实体树。 TreeNodeState_Attached // TreeNodeState_Attached 表示实体已在实体树中。 TreeNodeState_Detaching // TreeNodeState_Detaching 表示实体正在脱离实体树。 TreeNodeState_Moving // TreeNodeState_Moving 表示实体正在切换父节点。 )
func (TreeNodeState) String ¶ added in v0.2.58
func (i TreeNodeState) String() string
Source Files
¶
- component.go
- component_concurrent.go
- component_event.gen.go
- component_event.go
- component_eventtab.gen.go
- componentstate.go
- componentstate_string.go
- doc.go
- entity.go
- entity_componentmanager.go
- entity_componentmanager_event.gen.go
- entity_componentmanager_event.go
- entity_componentmanager_eventtab.gen.go
- entity_concurrent.go
- entity_event.gen.go
- entity_event.go
- entity_eventtab.gen.go
- entity_options.go
- entity_treenode.go
- entity_treenode_event.gen.go
- entity_treenode_event.go
- entity_treenode_eventtab.gen.go
- entitystate.go
- entitystate_string.go
- errors.go
- prototype.go
- scope.go
- scope_string.go
- treenodestate.go
- treenodestate_string.go
- unsafe_component.go
- unsafe_concurrent_component.go
- unsafe_concurrent_entity.go
- unsafe_entity.go