diff options
Diffstat (limited to 'engine/Components/Packages')
| -rw-r--r-- | engine/Components/Packages/Common.go | 23 | ||||
| -rw-r--r-- | engine/Components/Packages/Manager.go | 57 | ||||
| -rw-r--r-- | engine/Components/Packages/Package.go | 70 | ||||
| -rw-r--r-- | engine/Components/Packages/Validation.go | 15 |
4 files changed, 0 insertions, 165 deletions
diff --git a/engine/Components/Packages/Common.go b/engine/Components/Packages/Common.go deleted file mode 100644 index 0564f08..0000000 --- a/engine/Components/Packages/Common.go +++ /dev/null @@ -1,23 +0,0 @@ -package packages - -import ( - "encoding/json" - "fmt" - "os" -) - -func ReadJSONfromFile(fileLocation string, v any) error { - var file, openErr = os.ReadFile(fileLocation) - if openErr != nil { - return openErr - } - var jsonErr = json.Unmarshal(file, v) - if jsonErr != nil { - return jsonErr - } - return nil -} - -func ConcantinateFileLocation(baseDirLocation string, appendix string) string { - return fmt.Sprintf("%v/%v", baseDirLocation, appendix) -} diff --git a/engine/Components/Packages/Manager.go b/engine/Components/Packages/Manager.go deleted file mode 100644 index 8a2786b..0000000 --- a/engine/Components/Packages/Manager.go +++ /dev/null @@ -1,57 +0,0 @@ -package packages - -import ( - "fmt" - "os" - - settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" - rl "github.com/gen2brain/raylib-go/raylib" -) - -// The collection of all avaliable packages that are loaded in the system -type PackageManager struct { - AvaliablePackages map[string]Package -} - -var Manager *PackageManager = nil - -func loadPackages() (*PackageManager, error) { - var dir, dirErr = os.ReadDir(settings.Current.PackagesLocation) - if dirErr != nil { - return nil, dirErr - } - var outp = PackageManager{ - AvaliablePackages: make(map[string]Package), - } - for _, v := range dir { - var packagePath = ConcantinateFileLocation(settings.Current.PackagesLocation, v.Name()) - var newPackage, packageErr = ReadPackage(v) - if packageErr != nil { - rl.TraceLog(rl.LogWarning, "Failed to load the module %v: %s", packagePath, packageErr.Error()) - continue - } - - // Resource packages cannot contain worlds - if newPackage.Description.Type == "story" { - var worlds, worldsErr = loadWorldsFromDir(ConcantinateFileLocation(packagePath, "Worlds")) - if worldsErr != nil { - rl.TraceLog(rl.LogWarning, "Failed to load the world from the module %s: %s", v.Name(), worldsErr) - } else { - newPackage.Worlds = worlds - } - } - - outp.AvaliablePackages[newPackage.Description.Name] = *newPackage - rl.TraceLog(rl.LogError, "Loaded the module %s", newPackage.Description.Name) - } - return &outp, nil -} - -// Loads the packages from the specified in settings directory. Panics on serious error -func Init() { - var manager, err = loadPackages() - if err != nil { - panic(fmt.Sprintf("Failed to load packages: %v", err.Error())) - } - Manager = manager -} diff --git a/engine/Components/Packages/Package.go b/engine/Components/Packages/Package.go deleted file mode 100644 index 9f2fdd2..0000000 --- a/engine/Components/Packages/Package.go +++ /dev/null @@ -1,70 +0,0 @@ -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 := ReadValidJSONfromFile(ConcantinateFileLocation(dirPath, "Description.json"), &desc); descErr != nil { - return nil, descErr - } - return &Package{ - Description: desc, - }, nil -} - -func (base *PackageDescription) IsValid() error { - if base.Name == "" { - return fmt.Errorf("Invalid package descriptor: the name cannot be empty") - } - if base.Version == 0{ - return fmt.Errorf("Invalid package descriptor: the version cannot be 0") - } - 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 -} diff --git a/engine/Components/Packages/Validation.go b/engine/Components/Packages/Validation.go deleted file mode 100644 index 04428d2..0000000 --- a/engine/Components/Packages/Validation.go +++ /dev/null @@ -1,15 +0,0 @@ -package packages - -type Validatable interface { - // If the object is returned invalid this function should return the reason - IsValid() error -} - -// Reads object fron the file and validates it -func ReadValidJSONfromFile(fileLocation string, v Validatable) error { - var err = ReadJSONfromFile(fileLocation, v) - if err != nil { - return err - } - return v.IsValid() -} |
