summaryrefslogtreecommitdiff
path: root/engine/Components
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-08 21:14:55 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-08 21:14:55 +0500
commita6abcd529522c6682a4c2a1f25b1eaf6bd74d53d (patch)
treee4a1ac10c5bb43d8129934212746218be748b55d /engine/Components
parentb2895f2e9f64cf7cc593130980747b045f6abee8 (diff)
Package start
Diffstat (limited to 'engine/Components')
-rw-r--r--engine/Components/Packages/Common.go23
-rw-r--r--engine/Components/Packages/Manager.go43
-rw-r--r--engine/Components/Packages/Package.go42
-rw-r--r--engine/Components/World/Tile.go12
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"`
}