From f5df2fba7cdadfd9e7b0e07f549b43d64ac5c6f4 Mon Sep 17 00:00:00 2001 From: physcik Date: Tue, 24 Mar 2026 18:38:32 +0500 Subject: More package concern separation --- engine/Components/ResourceManager.go | 1 + engine/Dynamic/Manager.go | 22 ++++++++++++++++++++-- engine/Dynamic/Package.go | 9 +++++++++ engine/main.go | 32 +++++++++++++++++++++++++------- 4 files changed, 55 insertions(+), 9 deletions(-) (limited to 'engine') diff --git a/engine/Components/ResourceManager.go b/engine/Components/ResourceManager.go index d7242c4..7dae454 100644 --- a/engine/Components/ResourceManager.go +++ b/engine/Components/ResourceManager.go @@ -19,6 +19,7 @@ type ResourceManager struct { Menus map[string]coreobjects.Scene } +// Initializes the shared resource manager func InitManager() { Resources = ResourceManager{ LoadedPackages: make(map[string]*settings.AppVersion), diff --git a/engine/Dynamic/Manager.go b/engine/Dynamic/Manager.go index 924b4c3..4a5f70f 100644 --- a/engine/Dynamic/Manager.go +++ b/engine/Dynamic/Manager.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + components "github.com/DegustatorPonos/RuinesOfRafdolon/Components" descriptors "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic/Descriptors" settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" utils "github.com/DegustatorPonos/RuinesOfRafdolon/Utils" @@ -47,7 +48,7 @@ func loadPackages() (*PackageManager, error) { } // Loads the packages from the specified in settings directory. Panics on serious error -func Init() { +func ReadPackages() { descriptors.InitUIParser() var manager, err = loadPackages() if err != nil { @@ -58,6 +59,23 @@ func Init() { func (base *PackageManager) GetPackage(packageName string) (*Package, error) { var pack, exists = base.AvaliablePackages[packageName] - if !exists { return nil, fmt.Errorf("Failed to load package: no such package") } + if !exists { + return nil, fmt.Errorf("Failed to load package: package %s does not exist", packageName) + } return &pack, nil } + +func (base *PackageManager) IsPackageAvaliable(PkgName string) bool { + var _, exists = base.AvaliablePackages[PkgName] + return exists +} + +func (base *PackageManager) LoadPackage(PkgName string) error { + var pkg, err = base.GetPackage(PkgName) + if err != nil { + return err + } + components.Resources.LoadedPackages[pkg.Description.Name] = pkg.Description.Version + pkg.Load() + return nil +} diff --git a/engine/Dynamic/Package.go b/engine/Dynamic/Package.go index 15a5368..c9a4ef6 100644 --- a/engine/Dynamic/Package.go +++ b/engine/Dynamic/Package.go @@ -70,6 +70,15 @@ func ReadPackage(dir os.DirEntry) (*Package, error) { }, nil } +// Loads package in the memory +func (base *Package) Load() { + // Do not change the order - it will break inner dependencies + base.LoadTextures() + base.LoadObjects() + base.LoadWorlds() + base.LoadMenus() +} + func loadAssetsFromDir[T Validatable](dirLocation string, InitializeFunc func()T) ([]T, error) { var files, err = os.ReadDir(dirLocation) if err != nil { diff --git a/engine/main.go b/engine/main.go index 7f5e1bd..0ee6fec 100644 --- a/engine/main.go +++ b/engine/main.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "fmt" "log" "os" @@ -14,22 +15,39 @@ import ( ui "github.com/DegustatorPonos/RuinesOfRafdolon/UI" ) +const CorePackageName string = "core" + func main() { settings.ReadSettings() components.InitManager() - dynamic.Init() + dynamic.ReadPackages() + + // The core package contains the main menu and necessary logic. + // It should be loaded for the game to boot + if (!dynamic.Manager.IsPackageAvaliable(CorePackageName)) { + panic("The core package was not loaded") + } + render.InitWindow() defer render.DeinitWindow() // TEMPORARY SECTION - for _, v := range dynamic.Manager.AvaliablePackages { + // for _, v := range dynamic.Manager.AvaliablePackages { // log.Printf("%s: %s", k, &v) - components.Resources.LoadedPackages[v.Description.Name] = v.Description.Version - v.LoadTextures() - v.LoadObjects() - v.LoadWorlds() - v.LoadMenus() + //components.Resources.LoadedPackages[v.Description.Name] = v.Description.Version + //v.LoadTextures() + //v.LoadObjects() + //v.LoadWorlds() + //v.LoadMenus() + //} + + var coreLoadErr = dynamic.Manager.LoadPackage(CorePackageName) + if coreLoadErr != nil { + panic(fmt.Sprintf("Failed to load core package: %s", coreLoadErr.Error())) } + + // _ = dynamic.Manager.LoadPackage("testPackage") + log.Printf("Resource manager: %s", &components.Resources) var manager = coreobjects.InitSceneManager() -- cgit v1.3