summaryrefslogtreecommitdiff
path: root/engine/Components
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-10 17:27:55 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-10 17:27:55 +0500
commita364d4330dfd34f953f64e90020f8b8d6f2e82c4 (patch)
treedb71d125f633832b130821f3aec07d4b714ab7bb /engine/Components
parente6ccb74f77d0d03d33c422ca7dc942422074d7dd (diff)
World storage system change
Diffstat (limited to 'engine/Components')
-rw-r--r--engine/Components/Packages/Common.go23
-rw-r--r--engine/Components/Packages/Manager.go57
-rw-r--r--engine/Components/Packages/Package.go70
-rw-r--r--engine/Components/Packages/Validation.go15
-rw-r--r--engine/Components/World/Descriptor.go29
-rw-r--r--engine/Components/World/Tile.go12
-rw-r--r--engine/Components/World/World.go11
7 files changed, 11 insertions, 206 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()
-}
diff --git a/engine/Components/World/Descriptor.go b/engine/Components/World/Descriptor.go
deleted file mode 100644
index 553aa5b..0000000
--- a/engine/Components/World/Descriptor.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package world
-
-import rl "github.com/gen2brain/raylib-go/raylib"
-
-type Descriptor struct {
- TileSize rl.Vector2
- Textures map[int]string `json:"textures"`
- WorldMap [][]TileDescriptor `json:"worldmap"`
-}
-
-func (base *Descriptor) GenerateMap() *World {
- var outp = &World {
- TileSize: base.TileSize,
- TextureNames: base.Textures,
- Tiles: make([][]Tile, len(base.WorldMap)),
- }
- for x := range base.WorldMap {
- outp.Tiles[x] = make([]Tile, len(base.WorldMap[x]))
- for y, tile := range base.WorldMap[x] {
- outp.Tiles[x][y] = &StandardTile {
- X: float32(x),
- Y: float32(y),
- ParentWorld: outp,
- Descriptor: tile,
- }
- }
- }
- return outp
-}
diff --git a/engine/Components/World/Tile.go b/engine/Components/World/Tile.go
index a630062..0ef3a00 100644
--- a/engine/Components/World/Tile.go
+++ b/engine/Components/World/Tile.go
@@ -1,6 +1,9 @@
package world
-import rl "github.com/gen2brain/raylib-go/raylib"
+import (
+ descriptors "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic/Descriptors"
+ rl "github.com/gen2brain/raylib-go/raylib"
+)
// The square that will be displayed at the screen
type Tile interface {
@@ -12,7 +15,7 @@ type StandardTile struct {
X float32
Y float32
ParentWorld *World
- Descriptor TileDescriptor
+ Descriptor descriptors.TileDescriptor
}
func (base *StandardTile) Update() {
@@ -34,8 +37,3 @@ func (base *StandardTile) Draw() {
rl.White)
}
}
-
-type TileDescriptor struct {
- TextureId int `json:"textureid"`
- OveralyTextureId int `json:"overalytextureid"`
-}
diff --git a/engine/Components/World/World.go b/engine/Components/World/World.go
index 80ef7e9..d360adc 100644
--- a/engine/Components/World/World.go
+++ b/engine/Components/World/World.go
@@ -9,11 +9,12 @@ var Texture rl.Texture2D
// The scene full of tiles
type World struct {
- TileSize rl.Vector2
- TextureNames map[int]string
- Textures map[int]rl.Texture2D
- Tiles [][]Tile
- Camera rl.Camera2D
+ Name string `json:"name"`
+ TileSize rl.Vector2 `json:"tilesize"`
+ TextureNames map[int]string `json:"textures"`
+ Textures map[int]rl.Texture2D `json:"-"`
+ Tiles [][]Tile `json:"tiles"`
+ Camera rl.Camera2D `json:"-"`
}
func (base *World) IsValid() error {