summaryrefslogtreecommitdiff
path: root/engine/Components/Packages/Package.go
diff options
context:
space:
mode:
Diffstat (limited to 'engine/Components/Packages/Package.go')
-rw-r--r--engine/Components/Packages/Package.go38
1 files changed, 33 insertions, 5 deletions
diff --git a/engine/Components/Packages/Package.go b/engine/Components/Packages/Package.go
index 51e2a80..9f2fdd2 100644
--- a/engine/Components/Packages/Package.go
+++ b/engine/Components/Packages/Package.go
@@ -1,37 +1,48 @@
package packages
import (
+ "encoding/json"
"fmt"
"os"
+ world "github.com/DegustatorPonos/RuinesOfRafdolon/Components/World"
settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
+ rl "github.com/gen2brain/raylib-go/raylib"
)
type PackageDescription struct {
Name string `json:"name"`
Version uint64 `json:"version"`
Type string `json:"type"`
+ MinimumVersion *settings.AppVersion
+ MaximumVersion *settings.AppVersion
}
type Package struct {
Description PackageDescription `json:"description"`
+ Worlds map[string]world.World `json:"-"`
+}
+
+func (base *Package) String() string {
+ var outp, jsonErr = json.Marshal(base)
+ if jsonErr != nil {
+ return fmt.Sprintf("Failed to parse settings: %s", jsonErr.Error())
+ }
+ return string(outp)
}
func ReadPackage(dir os.DirEntry) (*Package, error) {
var dirPath = ConcantinateFileLocation(settings.Current.PackagesLocation, dir.Name())
var desc = PackageDescription{}
- if descErr := ReadJSONfromFile(ConcantinateFileLocation(dirPath, "Description.json"), &desc); descErr != nil {
+ if descErr := ReadValidJSONfromFile(ConcantinateFileLocation(dirPath, "Description.json"), &desc); descErr != nil {
return nil, descErr
}
- if descErr := desc.Validate(); descErr != nil {
- return nil, fmt.Errorf("Failed to parse descriptor: %s", descErr.Error())
- }
return &Package{
Description: desc,
}, nil
}
-func (base *PackageDescription) Validate() error {
+func (base *PackageDescription) IsValid() error {
if base.Name == "" {
return fmt.Errorf("Invalid package descriptor: the name cannot be empty")
}
@@ -40,3 +51,20 @@ func (base *PackageDescription) Validate() error {
}
return nil
}
+
+func loadWorldsFromDir(dirLocation string) (map[string]world.World, error) {
+ var files, err = os.ReadDir(dirLocation)
+ if err != nil {
+ return nil, err
+ }
+ var outp = make(map[string]world.World)
+ for _, v := range files {
+ var new = world.World{}
+ var loadErr = ReadJSONfromFile(ConcantinateFileLocation(dirLocation, v.Name()), &new)
+ if loadErr != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to load the world %s: %s", v.Name(), loadErr)
+ continue
+ }
+ }
+ return outp, nil
+}