diff --git a/pkg/api/api.go b/pkg/api/api.go index 36d692c..338f72f 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -333,7 +333,7 @@ func (s *Server) handleLootRules(w http.ResponseWriter, r *http.Request) { func (s *Server) handleRoutines(w http.ResponseWriter, r *http.Request) { routines := s.engine.GamePlugin().Routines() - var response []map[string]interface{} + response := make([]map[string]interface{}, 0) for _, routine := range routines { response = append(response, map[string]interface{}{ "name": routine.Name(), @@ -475,7 +475,7 @@ func (s *Server) getRegions() []RegionInfo { profile, err := registry.Get(gameID, width, height) if err != nil { log.Printf("Failed to get resolution profile: %v", err) - return nil + return make([]RegionInfo, 0) } var regions []RegionInfo diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index d64962b..dd5168a 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -61,6 +61,18 @@ func NewEngine(captureSource capture.Source, gamePlugin plugin.Plugin, devMode b startTime: time.Now(), } + // Register game-specific resolution profiles with the engine's registry. + // Plugins that support resolution profiles implement this optional interface. + type profileRegistrar interface { + RegisterResolutionProfiles(*resolution.Registry) error + } + if registrar, ok := gamePlugin.(profileRegistrar); ok { + if err := registrar.RegisterResolutionProfiles(engine.resolutionRegistry); err != nil { + return nil, fmt.Errorf("failed to register resolution profiles: %w", err) + } + log.Printf("Registered resolution profiles for %s", gamePlugin.Info().ID) + } + // Create engine services for the plugin engine.services = &engineServices{engine: engine} diff --git a/plugins/d2r/plugin.go b/plugins/d2r/plugin.go index 37c86bb..9eec746 100644 --- a/plugins/d2r/plugin.go +++ b/plugins/d2r/plugin.go @@ -78,3 +78,9 @@ func (p *Plugin) DefaultLootFilter() plugin.LootFilter { func (p *Plugin) SupportedResolutions() []image.Point { return p.resolutionRegistry.SupportedResolutions("d2r") } + +// RegisterResolutionProfiles registers D2R profiles with an external registry. +// Called by the engine before Init(). +func (p *Plugin) RegisterResolutionProfiles(reg *resolution.Registry) error { + return RegisterProfiles(reg) +}