diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2026-01-08 21:14:55 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2026-01-08 21:14:55 +0500 |
| commit | a6abcd529522c6682a4c2a1f25b1eaf6bd74d53d (patch) | |
| tree | e4a1ac10c5bb43d8129934212746218be748b55d /engine/Components | |
| parent | b2895f2e9f64cf7cc593130980747b045f6abee8 (diff) | |
Package start
Diffstat (limited to 'engine/Components')
| -rw-r--r-- | engine/Components/Packages/Common.go | 23 | ||||
| -rw-r--r-- | engine/Components/Packages/Manager.go | 43 | ||||
| -rw-r--r-- | engine/Components/Packages/Package.go | 42 | ||||
| -rw-r--r-- | engine/Components/World/Tile.go | 12 |
4 files changed, 119 insertions, 1 deletions
diff --git a/engine/Components/Packages/Common.go b/engine/Components/Packages/Common.go new file mode 100644 index 0000000..0564f08 --- /dev/null +++ b/engine/Components/Packages/Common.go @@ -0,0 +1,23 @@ +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 new file mode 100644 index 0000000..47b0476 --- /dev/null +++ b/engine/Components/Packages/Manager.go @@ -0,0 +1,43 @@ +package packages + +import ( + "fmt" + "os" + + settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" + rl "github.com/gen2brain/raylib-go/raylib" +) + +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 newPackage, packageErr = ReadPackage(v) + if packageErr != nil { + rl.TraceLog(rl.LogWarning, "Failed to load the module %v: %s", v.Name(), packageErr.Error()) + continue + } + _ = newPackage + rl.TraceLog(rl.LogError, "Loaded the module %s", newPackage.Description.Name) + } + return &outp, nil +} + +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 new file mode 100644 index 0000000..51e2a80 --- /dev/null +++ b/engine/Components/Packages/Package.go @@ -0,0 +1,42 @@ +package packages + +import ( + "fmt" + "os" + + settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" +) + +type PackageDescription struct { + Name string `json:"name"` + Version uint64 `json:"version"` + Type string `json:"type"` +} + +type Package struct { + Description PackageDescription `json:"description"` +} + +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 { + 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 { + 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 +} diff --git a/engine/Components/World/Tile.go b/engine/Components/World/Tile.go index 203d40d..a630062 100644 --- a/engine/Components/World/Tile.go +++ b/engine/Components/World/Tile.go @@ -23,9 +23,19 @@ func (base *StandardTile) Draw() { int32(base.X) * int32(base.ParentWorld.TileSize.X), int32(base.Y) * int32(base.ParentWorld.TileSize.Y), rl.White) -} + if base.Descriptor.OveralyTextureId != 0 { + var overlayTexture = base.ParentWorld.Textures[base.Descriptor.OveralyTextureId] + var dx = (base.ParentWorld.TileSize.X - float32(overlayTexture.Width)) / 2 + var dy = (float32(overlayTexture.Height) - base.ParentWorld.TileSize.Y) + rl.DrawTexture(overlayTexture, + int32(base.X) * int32(base.ParentWorld.TileSize.X) + int32(dx), + int32(base.Y) * int32(base.ParentWorld.TileSize.Y) - int32(dy), + rl.White) + } +} type TileDescriptor struct { TextureId int `json:"textureid"` + OveralyTextureId int `json:"overalytextureid"` } |
