diff options
| author | physcik <mynameisgennadiy@vk.com> | 2026-03-24 12:25:32 +0500 |
|---|---|---|
| committer | physcik <mynameisgennadiy@vk.com> | 2026-03-24 12:25:32 +0500 |
| commit | aab26bbdb0d8ad96e774baa07d44a3fcc5212cf1 (patch) | |
| tree | cf2296dc48767f8b339e1867fc16079c6ba235c8 /engine/Dynamic/Package.go | |
| parent | 3e3e1f480f87192cf1042bec0ee0d4bb7c356e62 (diff) | |
Moved assets to a 'core' package
Diffstat (limited to 'engine/Dynamic/Package.go')
| -rw-r--r-- | engine/Dynamic/Package.go | 52 |
1 files changed, 44 insertions, 8 deletions
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 + } +} |
