Drop the duplicate Manager, use inkwell's
ci/woodpecker/push/ebitengine Pipeline was successful

The engine already had the registry the game was reimplementing:
inkwell.Manager[T Named], and every entity type here is an alias of an
engine struct, so they all carry GetName() already. manager.manager.go
and manager.interface.go are gone; a category manager is now one call to
inkwell.NewManager.

registerAll goes with it — Each does the hand-off — and the selector
writes its derived pins back with Set, which keeps the scene in place in
the registration order.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-30 09:51:17 +02:00
co-authored by Claude Opus 5
parent da1410cb4a
commit 07312f0f29
15 changed files with 47 additions and 136 deletions
+1 -1
View File
@@ -6,4 +6,4 @@ import (
type Background = inkwell.Asset
var BackgroundManager = NewManager(func(entity Background) string { return entity.Name })
var BackgroundManager = inkwell.NewManager[Background]()
+1 -1
View File
@@ -6,4 +6,4 @@ import (
type Character = inkwell.Character
var CharacterManager = NewManager(func(entity Character) string { return entity.Name })
var CharacterManager = inkwell.NewManager[Character]()
+5 -5
View File
@@ -1,10 +1,10 @@
package inc
func registerContent() {
registerAll(BackgroundManager, World.G.AssetManager.Register)
registerAll(CharacterManager, World.G.CharacterManager.Register)
registerAll(ItemManager, World.G.ItemManager.Register)
registerAll(DialogManager, World.G.DialogueManager.Register)
registerAll(ScriptManager, World.G.ScriptManager.Register)
BackgroundManager.Each(World.G.AssetManager.Register)
CharacterManager.Each(World.G.CharacterManager.Register)
ItemManager.Each(World.G.ItemManager.Register)
DialogManager.Each(World.G.DialogueManager.Register)
ScriptManager.Each(World.G.ScriptManager.Register)
registerScene()
}
+1 -1
View File
@@ -6,4 +6,4 @@ import (
type Dialog = inkwell.Dialogue
var DialogManager = NewManager(func(entity Dialog) string { return entity.Name })
var DialogManager = inkwell.NewManager[Dialog]()
+1 -1
View File
@@ -6,4 +6,4 @@ import (
type Item = inkwell.Item
var ItemManager = NewManager(func(entity Item) string { return entity.Name })
var ItemManager = inkwell.NewManager[Item]()
-17
View File
@@ -1,17 +0,0 @@
package inc
type ManagerInterface[T any] interface {
Register(entity T)
GetByName(name string) (T, bool)
GetAll() []T
}
var (
_ ManagerInterface[Background] = BackgroundManager
_ ManagerInterface[Character] = CharacterManager
_ ManagerInterface[Dialog] = DialogManager
_ ManagerInterface[Item] = ItemManager
_ ManagerInterface[Script] = ScriptManager
_ ManagerInterface[Scene] = SceneManager
_ ManagerInterface[Theme] = ThemeManager
)
-43
View File
@@ -1,43 +0,0 @@
package inc
type Manager[T any] struct {
nameOf func(T) string
entities []T
index map[string]int
}
func NewManager[T any](nameOf func(T) string) *Manager[T] {
return &Manager[T]{
nameOf: nameOf,
index: map[string]int{},
}
}
func (m *Manager[T]) Register(entity T) {
name := m.nameOf(entity)
if i, ok := m.index[name]; ok {
m.entities[i] = entity
return
}
m.index[name] = len(m.entities)
m.entities = append(m.entities, entity)
}
func (m *Manager[T]) GetByName(name string) (T, bool) {
i, ok := m.index[name]
if !ok {
var missing T
return missing, false
}
return m.entities[i], true
}
func (m *Manager[T]) GetAll() []T {
return m.entities
}
func registerAll[T any](m *Manager[T], register func(T)) {
for _, entity := range m.GetAll() {
register(entity)
}
}
+2 -2
View File
@@ -6,11 +6,11 @@ import (
type Scene = inkwell.Scene
var SceneManager = NewManager(func(entity Scene) string { return entity.Name })
var SceneManager = inkwell.NewManager[Scene]()
func registerScene() {
fillSelectorPins()
registerAll(SceneManager, func(entity Scene) {
SceneManager.Each(func(entity Scene) {
World.G.SceneManager.Register(sceneDefaults(entity))
})
}
+3 -3
View File
@@ -23,12 +23,12 @@ func init() {
}
func fillSelectorPins() {
selector, ok := SceneManager.GetByName(SceneSelector)
selector, ok := SceneManager.Get(SceneSelector)
if !ok {
return
}
var exits []inkwell.Exit
for _, entity := range SceneManager.GetAll() {
for _, entity := range SceneManager.All() {
if !leadsToSelector(entity) {
continue
}
@@ -39,7 +39,7 @@ func fillSelectorPins() {
})
}
selector.Exits = exits
SceneManager.Register(selector)
SceneManager.Set(selector)
}
func leadsToSelector(s Scene) bool {
+1 -1
View File
@@ -6,4 +6,4 @@ import (
type Script = inkwell.Script
var ScriptManager = NewManager(func(entity Script) string { return entity.Name })
var ScriptManager = inkwell.NewManager[Script]()
+2 -2
View File
@@ -8,7 +8,7 @@ import (
type Theme = inkwell.Theme
var ThemeManager = NewManager(func(entity Theme) string { return entity.Name })
var ThemeManager = inkwell.NewManager[Theme]()
const (
RealWorld = "realworld-93"
@@ -34,5 +34,5 @@ func RGBA(hex uint32, a uint8) color.Color {
}
func registerTheme() {
registerAll(ThemeManager, World.G.ThemeManager.Register)
ThemeManager.Each(World.G.ThemeManager.Register)
}