summaryrefslogtreecommitdiff
path: root/engine/Dynamic
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-11 20:43:46 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-11 20:43:46 +0500
commit4c614ef14ebf4c3cd16c1e96283dc3763b9b0d0a (patch)
tree2e82a07e2b5f782b0991ee824109295784308b59 /engine/Dynamic
parent754c860540660f004d09f1634ff62a56c481972e (diff)
World rendering
Diffstat (limited to 'engine/Dynamic')
-rw-r--r--engine/Dynamic/Common.go22
-rw-r--r--engine/Dynamic/Descriptors/Textures.go12
-rw-r--r--engine/Dynamic/Descriptors/World.go32
-rw-r--r--engine/Dynamic/Manager.go14
-rw-r--r--engine/Dynamic/Package.go48
-rw-r--r--engine/Dynamic/Validation.go4
6 files changed, 91 insertions, 41 deletions
diff --git a/engine/Dynamic/Common.go b/engine/Dynamic/Common.go
index 99cfdc2..4cd440b 100644
--- a/engine/Dynamic/Common.go
+++ b/engine/Dynamic/Common.go
@@ -1,23 +1 @@
package dynamic
-
-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/Dynamic/Descriptors/Textures.go b/engine/Dynamic/Descriptors/Textures.go
index 9d480ee..f436575 100644
--- a/engine/Dynamic/Descriptors/Textures.go
+++ b/engine/Dynamic/Descriptors/Textures.go
@@ -1,5 +1,9 @@
package descriptors
+import (
+ utils "github.com/DegustatorPonos/RuinesOfRafdolon/Utils"
+)
+
const TexturesDescriptorDirectoryName string = "Textures"
const TexturesDescriptorFileName string = "Meta.json"
@@ -7,6 +11,14 @@ type TexturesDescriptor struct {
Avaliable []string
}
+func (base *TexturesDescriptor) GetTexturePath(packageLocation string, textureName string) string {
+ return utils.JoinFileLocations([]string {
+ packageLocation,
+ TexturesDescriptorDirectoryName,
+ textureName,
+ })
+}
+
func IsValid() error {
return nil
}
diff --git a/engine/Dynamic/Descriptors/World.go b/engine/Dynamic/Descriptors/World.go
index 5116a0d..25e52ef 100644
--- a/engine/Dynamic/Descriptors/World.go
+++ b/engine/Dynamic/Descriptors/World.go
@@ -1,6 +1,9 @@
package descriptors
-import rl "github.com/gen2brain/raylib-go/raylib"
+import (
+ components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
+ rl "github.com/gen2brain/raylib-go/raylib"
+)
type WorldDescriptor struct {
Name string
@@ -26,3 +29,30 @@ type FloorPiece struct {
Position rl.Vector2
Texture string
}
+
+// Transforms the world descriptor into the game world
+func (base WorldDescriptor) Parse() components.World {
+ var outp = components.World {
+ Name: base.Name,
+ Floor: make([]components.FloorTile, 0, len(base.FloorMap)),
+
+ Camera: &rl.Camera2D{
+ Offset: rl.Vector2 {X: 0, Y: 0},
+ Target: rl.Vector2 {X: 0, Y: 0},
+ Rotation: 0,
+ Zoom: 1,
+ },
+ }
+ for _, v := range base.FloorMap {
+ var texture, textureErr = components.Resources.Textures.GetTextureByName(v.Texture)
+ if textureErr != nil {
+ continue
+ }
+ var new = components.FloorTile {
+ Position: v.Position,
+ Texture: texture,
+ }
+ outp.Floor = append(outp.Floor, new)
+ }
+ return outp
+}
diff --git a/engine/Dynamic/Manager.go b/engine/Dynamic/Manager.go
index 7a6e341..7b7d6b4 100644
--- a/engine/Dynamic/Manager.go
+++ b/engine/Dynamic/Manager.go
@@ -5,6 +5,7 @@ import (
"os"
settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
+ utils "github.com/DegustatorPonos/RuinesOfRafdolon/Utils"
rl "github.com/gen2brain/raylib-go/raylib"
)
@@ -24,7 +25,7 @@ func loadPackages() (*PackageManager, error) {
AvaliablePackages: make(map[string]Package),
}
for _, v := range dir {
- var packagePath = ConcantinateFileLocation(settings.Current.PackagesLocation, v.Name())
+ var packagePath = utils.JoinFileLocation(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())
@@ -32,9 +33,8 @@ func loadPackages() (*PackageManager, error) {
}
newPackage.location = packagePath
- // newPackage.LoadTiles()
- newPackage.LoadTextures()
- newPackage.LoadWorlds()
+ newPackage.ReadTextures()
+ newPackage.ReadWorlds()
outp.AvaliablePackages[newPackage.Description.Name] = *newPackage
rl.TraceLog(rl.LogInfo, "Loaded the module %s", newPackage.Description.Name)
@@ -50,3 +50,9 @@ func Init() {
}
Manager = manager
}
+
+func (base *PackageManager) GetPackage(packageName string) (*Package, error) {
+ var pack, exists = base.AvaliablePackages[packageName]
+ if !exists { return nil, fmt.Errorf("Failed to load package: no such package") }
+ return &pack, nil
+}
diff --git a/engine/Dynamic/Package.go b/engine/Dynamic/Package.go
index 2108d7b..2d8cc72 100644
--- a/engine/Dynamic/Package.go
+++ b/engine/Dynamic/Package.go
@@ -5,8 +5,10 @@ import (
"fmt"
"os"
+ components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
descriptors "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic/Descriptors"
settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
+ utils "github.com/DegustatorPonos/RuinesOfRafdolon/Utils"
rl "github.com/gen2brain/raylib-go/raylib"
)
@@ -54,9 +56,9 @@ func (base *Package) String() string {
}
func ReadPackage(dir os.DirEntry) (*Package, error) {
- var dirPath = ConcantinateFileLocation(settings.Current.PackagesLocation, dir.Name())
+ var dirPath = utils.JoinFileLocation(settings.Current.PackagesLocation, dir.Name())
var desc = PackageDescription{}
- if descErr := ReadValidJSONfromFile(ConcantinateFileLocation(dirPath, "Description.json"), &desc); descErr != nil {
+ if descErr := ReadValidJSONfromFile(utils.JoinFileLocation(dirPath, "Description.json"), &desc); descErr != nil {
return nil, descErr
}
return &Package{
@@ -72,7 +74,7 @@ func loadAssetsFromDir[T Validatable](dirLocation string, InitializeFunc func()T
var outp = make([]T, 0)
for _, v := range files {
var new = InitializeFunc()
- var loadErr = ReadValidJSONfromFile(ConcantinateFileLocation(dirLocation, v.Name()), new)
+ var loadErr = ReadValidJSONfromFile(utils.JoinFileLocation(dirLocation, v.Name()), new)
if loadErr != nil {
rl.TraceLog(rl.LogWarning, "Failed to load the asset %s: %s", v.Name(), loadErr)
continue
@@ -82,11 +84,31 @@ func loadAssetsFromDir[T Validatable](dirLocation string, InitializeFunc func()T
return outp, nil
}
-func (base *Package) LoadWorlds() {
+func (base *Package) ReadTextures() {
+ var textures = &descriptors.TexturesDescriptor{}
+ var texturesLocation = utils.JoinFileLocation(base.location, descriptors.TexturesDescriptorDirectoryName)
+ var loadErr = utils.ReadJSONfromFile(utils.JoinFileLocation(texturesLocation, descriptors.TexturesDescriptorFileName), textures)
+ if loadErr != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to load texture description from the module %s: %s", base.location, loadErr)
+ } else {
+ base.Textures = textures
+ }
+}
+
+// Loads textures in the resource manager
+func (base *Package) LoadTextures() {
+ for _, v := range base.Textures.Avaliable {
+ var location = base.Textures.GetTexturePath(base.location, v)
+ var displayName = fmt.Sprintf("%v/%v", base.Description.Name, v)
+ components.Resources.Textures.LoadTexture(location, displayName)
+ }
+}
+
+func (base *Package) ReadWorlds() {
if base.Description.Type != "story" {
return
}
- var worlds, loadErr = loadWorldsFromDir(ConcantinateFileLocation(base.location, "Worlds"))
+ var worlds, loadErr = loadWorldsFromDir(utils.JoinFileLocation(base.location, "Worlds"))
if loadErr != nil {
rl.TraceLog(rl.LogWarning, "Failed to load world from the module %s: %s", base.location, loadErr)
} else {
@@ -94,14 +116,13 @@ func (base *Package) LoadWorlds() {
}
}
-func (base *Package) LoadTextures() {
- var textures = &descriptors.TexturesDescriptor{}
- var texturesLocation = ConcantinateFileLocation(base.location, descriptors.TexturesDescriptorDirectoryName)
- var loadErr = ReadJSONfromFile(ConcantinateFileLocation(texturesLocation, descriptors.TexturesDescriptorFileName), textures)
- if loadErr != nil {
- rl.TraceLog(rl.LogWarning, "Failed to load texture description from the module %s: %s", base.location, loadErr)
- } else {
- base.Textures = textures
+func (base *Package) LoadWorlds() {
+ if base.Description.Type != "story" {
+ return
+ }
+ for _, v := range base.Worlds {
+ var parsed = v.Parse()
+ components.Resources.Worlds[v.Name] = &parsed
}
}
@@ -113,6 +134,7 @@ func loadWorldsFromDir(dirLocation string) (map[string]*descriptors.WorldDescrip
return descriptors.MapWorldDescriptors(loaded), nil
}
+// Deprecated
func loadTilesFromDir(dirLocation string) (map[uint64]*descriptors.TileDescriptor, error) {
var loaded, err = loadAssetsFromDir(dirLocation, func() *descriptors.TileDescriptor{ return &descriptors.TileDescriptor{} })
if err != nil {
diff --git a/engine/Dynamic/Validation.go b/engine/Dynamic/Validation.go
index dfe1d5c..a7d24d5 100644
--- a/engine/Dynamic/Validation.go
+++ b/engine/Dynamic/Validation.go
@@ -1,5 +1,7 @@
package dynamic
+import utils "github.com/DegustatorPonos/RuinesOfRafdolon/Utils"
+
type Validatable interface {
// If the object is returned invalid this function should return the reason
IsValid() error
@@ -7,7 +9,7 @@ type Validatable interface {
// Reads object fron the file and validates it
func ReadValidJSONfromFile(fileLocation string, v Validatable) error {
- var err = ReadJSONfromFile(fileLocation, v)
+ var err = utils.ReadJSONfromFile(fileLocation, v)
if err != nil {
return err
}