pt

package
v0.2.28 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2024 License: LGPL-2.1 Imports: 13 Imported by: 0

Documentation

Overview

Package pt 实体与组件原型,用于创建实例。

Index

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.实体更新组件后,需要重新提取。

func CompNamePair

func CompNamePair(comp any, name string) [2]any

CompNamePair 组件与组件名,用于注册实体原型

Types

type ComponentCtor

type ComponentCtor = generic.DelegateAction2[ec.Entity, ec.Component] // 组件构造函数

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 组件原型库

func DefaultComponentLib

func DefaultComponentLib() ComponentLib

DefaultComponentLib 默认组件库

func NewComponentLib

func NewComponentLib() ComponentLib

NewComponentLib 创建组件原型库

type ComponentPT

type ComponentPT struct {
	Name           string // 组件名称
	Implementation string // 组件实例名称
	// contains filtered or unexported fields
}

ComponentPT 组件原型

func (ComponentPT) Construct

func (pt ComponentPT) Construct() ec.Component

Construct 创建组件

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

func (*Composite[T]) As

func (c *Composite[T]) As() (T, bool)

As 从实体提取一些需要的组件接口,复合在一起直接使用(实体更新组件后,会自动重新提取)

func (*Composite[T]) Cast

func (c *Composite[T]) Cast() T

Cast 从实体提取一些需要的组件接口,复合在一起直接使用,提取失败会panic(实体更新组件后,会自动重新提取)

func (*Composite[T]) Changed

func (c *Composite[T]) Changed() bool

Changed 实体是否已更新组件

func (Composite[T]) Clone

func (c Composite[T]) Clone() *Composite[T]

Clone 克隆

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 实体原型库

func DefaultEntityLib

func DefaultEntityLib() EntityLib

DefaultEntityLib 默认实体库

func NewEntityLib

func NewEntityLib(compLib ComponentLib) EntityLib

NewEntityLib 创建实体原型库

type EntityPT

type EntityPT struct {
	Prototype string // 实体原型名称
	// contains filtered or unexported fields
}

EntityPT 实体原型

func Using

func Using(entityPTProvider EntityPTProvider, prototype string) EntityPT

Using 使用实体原型

func (EntityPT) Assemble

func (pt EntityPT) Assemble(entity ec.Entity, componentCtor ComponentCtor, entityCtor EntityCtor) ec.Entity

Assemble 向实体安装组件

func (EntityPT) Construct

func (pt EntityPT) Construct(settings ...option.Setting[ConstructEntityOptions]) ec.Entity

Construct 创建实体

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

ComponentCtor 组件构造函数

func (Option) CompositeFace

CompositeFace 扩展者,在扩展实体自身能力时使用

func (Option) Default

Default 默认值

func (Option) EntityCtor

EntityCtor 实体构造函数

func (Option) FaceAnyAllocator

FaceAnyAllocator 自定义FaceAny内存分配器,用于提高性能,通常传入运行时上下文中的FaceAnyAllocator

func (Option) GCCollector

GCCollector 自定义GC收集器,通常不传或者传入运行时上下文

func (Option) HookAllocator

HookAllocator 自定义Hook内存分配器,用于提高性能,通常传入运行时上下文中的HookAllocator

func (Option) Meta

Meta Meta信息

func (Option) PersistId

PersistId 实体持久化Id

func (Option) Scope added in v0.2.23

Scope 可访问作用域

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL