From aab26bbdb0d8ad96e774baa07d44a3fcc5212cf1 Mon Sep 17 00:00:00 2001 From: physcik Date: Tue, 24 Mar 2026 12:25:32 +0500 Subject: Moved assets to a 'core' package --- engine/Dynamic/DynamicMenu.go | 2 ++ engine/Dynamic/Manager.go | 1 + engine/Dynamic/Package.go | 52 ++++++++++++++++++++++++++++++++++++------- 3 files changed, 47 insertions(+), 8 deletions(-) (limited to 'engine/Dynamic') diff --git a/engine/Dynamic/DynamicMenu.go b/engine/Dynamic/DynamicMenu.go index 33efc1f..c7226dd 100644 --- a/engine/Dynamic/DynamicMenu.go +++ b/engine/Dynamic/DynamicMenu.go @@ -11,6 +11,8 @@ import ( rl "github.com/gen2brain/raylib-go/raylib" ) +const MenusDirName string = "Menus" + const RefreshButton int32 = rl.KeyF5 // Represents a menu variant that is loaded from a file diff --git a/engine/Dynamic/Manager.go b/engine/Dynamic/Manager.go index e67b0a8..924b4c3 100644 --- a/engine/Dynamic/Manager.go +++ b/engine/Dynamic/Manager.go @@ -38,6 +38,7 @@ func loadPackages() (*PackageManager, error) { newPackage.ReadTextures() newPackage.ReadObjects() newPackage.ReadWorlds() + newPackage.ReadMenus() outp.AvaliablePackages[newPackage.Description.Name] = *newPackage rl.TraceLog(rl.LogInfo, "Loaded the module %s", newPackage.Description.Name) diff --git a/engine/Dynamic/Package.go b/engine/Dynamic/Package.go index 0a3af5a..15a5368 100644 --- a/engine/Dynamic/Package.go +++ b/engine/Dynamic/Package.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "os" + "strings" components "github.com/DegustatorPonos/RuinesOfRafdolon/Components" descriptors "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic/Descriptors" @@ -15,23 +16,23 @@ import ( // The defenition of the package type PackageDescription struct { Name string `json:"name"` - Version uint64 `json:"version"` + Version *settings.AppVersion `json:"version"` Type string `json:"type"` - MinimumVersion *settings.AppVersion - MaximumVersion *settings.AppVersion + MinimumGameVersion *settings.AppVersion + MaximumGameVersion *settings.AppVersion } func (base *PackageDescription) IsValid() error { if base.Name == "" { return fmt.Errorf("Invalid package descriptor: the name cannot be empty") } - if base.Version == 0 { + if !base.Version.IsValid() { return fmt.Errorf("Invalid package descriptor: the version cannot be 0") } - if base.MinimumVersion == nil { + if base.MinimumGameVersion == nil { return fmt.Errorf("Invalid package descriptor: The package must specify the minimal version") } - if !base.MinimumVersion.IsCompatible() || (base.MaximumVersion != nil && !base.MaximumVersion.IsLessThan(&settings.Current.Version)){ + if !base.MinimumGameVersion.IsCompatible() || (base.MaximumGameVersion != nil && !base.MaximumGameVersion.IsLessThan(&settings.Current.Version)){ return fmt.Errorf("Invalid package descriptor: The package is made for the newer or older version") } return nil @@ -44,6 +45,8 @@ type Package struct { Textures *descriptors.TexturesDescriptor Objects map[string]*descriptors.ObjectDescriptor Worlds map[string]*descriptors.WorldDescriptor + // Dynamic menus don't have descriptors - they self-reload + Menus map[string]*DynamicMenu location string } @@ -91,9 +94,8 @@ func (base *Package) ReadTextures() { var loadErr = utils.ReadJSONfromFile(utils.JoinFileLocation(texturesLocation, descriptors.TexturesDescriptorFileName), textures) if loadErr != nil { rl.TraceLog(rl.LogWarning, "Failed to load texture description from the module %s: %s", base.location, loadErr) - } else { - base.Textures = textures } + base.Textures = textures } // Loads textures in the resource manager @@ -166,3 +168,37 @@ func loadObjectsFromDir(dir string) (map[string]*descriptors.ObjectDescriptor, e } return descriptors.MapObjectDescriptors(loaded), nil } + +func (base *Package) ReadMenus() { + var loaded, err = loadMenusFromDir(utils.JoinFileLocation(base.location, MenusDirName)) + if err != nil { + rl.TraceLog(rl.LogWarning, "Failed to load menus from the module %s: %s", base.location, err) + return + } + base.Menus = loaded +} + +func loadMenusFromDir(dir string) (map[string]*DynamicMenu, error) { + var files, err = os.ReadDir(dir) + if err != nil { + return nil, err + } + var outp = make(map[string]*DynamicMenu) + for _, v := range files { + if v.IsDir() { + rl.TraceLog(rl.LogWarning, "Failed to load menu %s: the file is a directory", v.Name()) + continue + } + var menuName = strings.TrimSuffix(v.Name(), ".json") + outp[menuName] = &DynamicMenu{ + FileLocation: utils.JoinFileLocation(dir, v.Name()), + } + } + return outp, nil +} + +func (base *Package) LoadMenus() { + for k, v := range base.Menus { + components.Resources.Menus[fmt.Sprintf("%s/%s", base.Description.Name, k)] = v + } +} -- cgit v1.3