rts-sim-module/system/system.go
2023-09-15 13:48:48 +08:00

71 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package system
import (
"fmt"
"github.com/yohamta/donburi/component"
"github.com/yohamta/donburi/filter"
"joylink.club/ecs"
"joylink.club/rtsssimulation/umi"
)
// EntityIdentity 实体身份定义
type EntityIdentity struct {
Id string
}
// EntityIdentityComponent 实体身份组件
var EntityIdentityComponent = ecs.NewComponentType[EntityIdentity]()
func FindEntityById(world ecs.World, id string) *ecs.Entry {
query := ecs.NewQuery(filter.Contains(EntityIdentityComponent))
return QueryEntityById(world, query, id)
}
func QueryEntityById(world ecs.World, q *ecs.Query, id string) *ecs.Entry {
var entry *ecs.Entry = nil
func() {
defer simpleRecover()
q.Each(world, func(e *ecs.Entry) {
if id == EntityIdentityComponent.Get(e).Id {
entry = e
panic(fmt.Sprintf("找到实体[%s],结束查找", id))
}
})
}()
//
return entry
}
var modelStorageQuery = ecs.NewQuery(filter.Contains(ModelStorageComponent))
// FindModelStorage 获取模型仓库
func FindModelStorage(world ecs.World) umi.IModelManager {
e, _ := modelStorageQuery.First(world)
return ModelStorageComponent.Get(e).ModelManager
}
// 捕获panic并恢复执行
func simpleRecover() {
recover()
}
/////////////////////////////////////////////////////////
// 实体标签
type EntityTag = component.IComponentType
type EntityTagHandler struct {
Tag EntityTag
}
/////////////////////////////////////////////////////////
// 模型仓库引用
// 用于world内使用查询模型
type ModelStorageRef struct {
ModelManager umi.IModelManager
}
// 模型仓库组件
var ModelStorageComponent = ecs.NewComponentType[ModelStorageRef]()