rts-sim-module/entity/singleton.go

42 lines
973 B
Go
Raw Normal View History

package entity
import (
"time"
2023-09-28 15:38:18 +08:00
"github.com/yohamta/donburi/filter"
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/repository"
)
// 初始化世界数据
func LoadWorldData(w ecs.World, repo *repository.Repository) {
2023-09-28 15:38:18 +08:00
if repo == nil {
panic("repo不能为nil")
}
entry := w.Create(component.WorldDataType)
component.WorldDataType.Set(entry, &component.WorldData{
Repo: repo,
Time: time.Now().UnixMilli(),
EntityMap: make(map[string]*ecs.Entry),
})
}
2023-09-28 17:18:23 +08:00
var worldDataQuery = ecs.NewQuery(filter.Contains(component.WorldDataType))
2023-09-28 15:38:18 +08:00
// 获取世界数据
func GetWorldData(w ecs.World) *component.WorldData {
2023-09-28 17:18:23 +08:00
entry, ok := worldDataQuery.First(w)
2023-09-28 15:38:18 +08:00
if ok {
return component.WorldDataType.Get(entry)
}
panic("不存在世界数据")
}
2023-09-28 17:18:23 +08:00
// 根据uid获取对象实体
func GetEntityByUid(w ecs.World, uid string) (entry *ecs.Entry, ok bool) {
wd := GetWorldData(w)
entry, ok = wd.EntityMap[uid]
return
}