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 }