Documentation ¶
Overview ¶
Package pt 实体与组件原型,用于创建实例。
Index ¶
- Variables
- func As[T comparable](entity ec.Entity) (T, bool)
- func Cast[T comparable](entity ec.Entity) T
- func CompNamePair(comp any, name string) [2]any
- type ComponentCtor
- type ComponentLib
- type ComponentPT
- type Composite
- type ConstructEntityOptions
- type EntityCtor
- type EntityLib
- type EntityPT
- type EntityPTProvider
- type Option
- func (Option) AwakeOnFirstAccess(b bool) option.Setting[ConstructEntityOptions]
- func (Option) ComponentCtor(ctor ComponentCtor) option.Setting[ConstructEntityOptions]
- func (Option) CompositeFace(face iface.Face[ec.Entity]) option.Setting[ConstructEntityOptions]
- func (Option) Default() option.Setting[ConstructEntityOptions]
- func (Option) EntityCtor(ctor EntityCtor) option.Setting[ConstructEntityOptions]
- func (Option) FaceAnyAllocator(allocator container.Allocator[iface.FaceAny]) option.Setting[ConstructEntityOptions]
- func (Option) GCCollector(collector container.GCCollector) option.Setting[ConstructEntityOptions]
- func (Option) HookAllocator(allocator container.Allocator[event.Hook]) option.Setting[ConstructEntityOptions]
- func (Option) Meta(m ec.Meta) option.Setting[ConstructEntityOptions]
- func (Option) PersistId(id uid.Id) option.Setting[ConstructEntityOptions]
- func (Option) Scope(s ec.Scope) option.Setting[ConstructEntityOptions]
Constants ¶
This section is empty.
Variables ¶
View Source
var (
ErrPt = fmt.Errorf("%w: pt", exception.ErrGolaxy) // 原型错误
)
Functions ¶
func As ¶
func As[T comparable](entity ec.Entity) (T, bool)
As 从实体提取一些需要的组件接口,复合在一起直接使用
示例:
type A interface { MethodA() } ... type B interface { MethodB() } ... type CompositeAB struct { A B } ... v, ok := As[CompositeAB](entity) if ok { v.MethodA() v.MethodB() }
注意:
1.内部逻辑有使用反射,为了提高性能,可以使用一次后存储转换结果重复使用。 2.实体更新组件后,需要重新提取。
func Cast ¶
func Cast[T comparable](entity ec.Entity) T
Cast 从实体提取一些需要的组件接口,复合在一起直接使用,提取失败会panic
示例:
type A interface { MethodA() } ... type B interface { MethodB() } ... type CompositeAB struct { A B } ... Cast[CompositeAB](entity).MethodA() Cast[CompositeAB](entity).MethodB()
注意:
1.内部逻辑有使用反射,为了提高性能,可以使用一次后存储转换结果重复使用。 2.实体更新组件后,需要重新提取。
Types ¶
type ComponentCtor ¶
type ComponentLib ¶
type ComponentLib interface { // Register 注册组件原型,不设置组件名称时,将会使用组件实例名称作为组件名称 Register(comp any, name ...string) ComponentPT // Deregister 取消注册组件原型 Deregister(impl string) // Get 获取组件原型 Get(impl string) (ComponentPT, bool) // Range 遍历所有已注册的组件原型 Range(fun generic.Func1[ComponentPT, bool]) }
ComponentLib 组件原型库
type ComponentPT ¶
type ComponentPT struct { Name string // 组件名称 Implementation string // 组件实例名称 // contains filtered or unexported fields }
ComponentPT 组件原型
type Composite ¶
type Composite[T comparable] struct { Entity ec.Entity // contains filtered or unexported fields }
Composite 创建组件复合提取器,直接使用As()或Cast()时,无法检测提取后实体是否又更新组件,使用提取器可以解决此问题
示例:
type A interface { MethodA() } ... type B interface { MethodB() } ... type CompositeAB struct { A B } ... cx := Composite[CompositeAB]{Entity: entity} ... if v, ok := cx.As(); ok { v.MethodA() v.MethodB() ... entity.AddComponent(comp) ... if v, ok := cx.As(); ok { v.MethodA() v.MethodB() } } ... cx.Cast().MethodA() cx.Cast().MethodB() ... entity.AddComponent(comp) ... cx.Cast().MethodA() cx.Cast().MethodB()
type ConstructEntityOptions ¶
type ConstructEntityOptions struct { ec.EntityOptions ComponentCtor ComponentCtor // 组件构造函数 EntityCtor EntityCtor // 实体构造函数 }
ConstructEntityOptions 创建实体的所有选项
type EntityCtor ¶
type EntityCtor = generic.DelegateAction1[ec.Entity] // 实体构造函数
type EntityLib ¶
type EntityLib interface { EntityPTProvider // Register 注册实体原型 Register(prototype string, comps ...any) EntityPT // Declare 声明实体原型,要求组件实例已注册 Declare(prototype string, compImpls ...string) EntityPT // Deregister 取消注册实体原型 Deregister(prototype string) // Get 获取实体原型 Get(prototype string) (EntityPT, bool) // Range 遍历所有已注册的实体原型 Range(fun generic.Func1[EntityPT, bool]) }
EntityLib 实体原型库
type EntityPT ¶
type EntityPT struct { Prototype string // 实体原型名称 // contains filtered or unexported fields }
EntityPT 实体原型
func (EntityPT) Assemble ¶
func (pt EntityPT) Assemble(entity ec.Entity, componentCtor ComponentCtor, entityCtor EntityCtor) ec.Entity
Assemble 向实体安装组件
func (EntityPT) UnsafeConstruct
deprecated
func (pt EntityPT) UnsafeConstruct(options ConstructEntityOptions) ec.Entity
Deprecated: UnsafeConstruct 内部创建实体
type EntityPTProvider ¶
type EntityPTProvider interface { // GetEntityLib 获取实体原型库 GetEntityLib() EntityLib }
EntityPTProvider 实体原型提供者
type Option ¶
type Option struct{}
Option 所有选项设置器
func (Option) AwakeOnFirstAccess ¶
func (Option) AwakeOnFirstAccess(b bool) option.Setting[ConstructEntityOptions]
AwakeOnFirstAccess 开启组件被首次访问时,检测并调用Awake()
func (Option) ComponentCtor ¶
func (Option) ComponentCtor(ctor ComponentCtor) option.Setting[ConstructEntityOptions]
ComponentCtor 组件构造函数
func (Option) CompositeFace ¶
CompositeFace 扩展者,在扩展实体自身能力时使用
func (Option) EntityCtor ¶
func (Option) EntityCtor(ctor EntityCtor) option.Setting[ConstructEntityOptions]
EntityCtor 实体构造函数
func (Option) FaceAnyAllocator ¶
func (Option) FaceAnyAllocator(allocator container.Allocator[iface.FaceAny]) option.Setting[ConstructEntityOptions]
FaceAnyAllocator 自定义FaceAny内存分配器,用于提高性能,通常传入运行时上下文中的FaceAnyAllocator
func (Option) GCCollector ¶
func (Option) GCCollector(collector container.GCCollector) option.Setting[ConstructEntityOptions]
GCCollector 自定义GC收集器,通常不传或者传入运行时上下文
func (Option) HookAllocator ¶
func (Option) HookAllocator(allocator container.Allocator[event.Hook]) option.Setting[ConstructEntityOptions]
HookAllocator 自定义Hook内存分配器,用于提高性能,通常传入运行时上下文中的HookAllocator
Click to show internal directories.
Click to hide internal directories.