summaryrefslogtreecommitdiff
path: root/engine/Dynamic
diff options
context:
space:
mode:
Diffstat (limited to 'engine/Dynamic')
-rw-r--r--engine/Dynamic/DynamicMenu.go2
-rw-r--r--engine/Dynamic/Manager.go1
-rw-r--r--engine/Dynamic/Package.go52
3 files changed, 47 insertions, 8 deletions
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
+ }
+}