summaryrefslogtreecommitdiff
path: root/engine/Dynamic/Descriptors
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-25 01:11:59 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-25 01:11:59 +0500
commit3ba197732d13d84eca0d706218b38d4f84cecba9 (patch)
treebcb9a967cb648277325ea60ba45905c024a2f8d6 /engine/Dynamic/Descriptors
parentaa35ce4db5326928cf13c7604014fb7aaaedf203 (diff)
Object scene registry
Diffstat (limited to 'engine/Dynamic/Descriptors')
-rw-r--r--engine/Dynamic/Descriptors/World.go28
1 files changed, 26 insertions, 2 deletions
diff --git a/engine/Dynamic/Descriptors/World.go b/engine/Dynamic/Descriptors/World.go
index c449ab0..425c3f2 100644
--- a/engine/Dynamic/Descriptors/World.go
+++ b/engine/Dynamic/Descriptors/World.go
@@ -2,6 +2,7 @@ package descriptors
import (
components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
+ coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
rl "github.com/gen2brain/raylib-go/raylib"
)
@@ -9,10 +10,11 @@ const WorldsDirName string = "Worlds"
type WorldDescriptor struct {
Name string
+ DefaultStartingPosition rl.Vector2
// Deprecated
TileSize rl.Vector2 `json:"-"`
FloorMap []FloorPiece
- DefaultStartingPosition rl.Vector2
+ StaticObjects []ObjectLink
}
func (base *WorldDescriptor) IsValid() error {
@@ -33,8 +35,14 @@ type FloorPiece struct {
Texture string
}
+type ObjectLink struct {
+ Object string
+ Position rl.Vector2
+}
+
// Transforms the world descriptor into the game world
-func (base WorldDescriptor) Parse() components.World {
+// Assumes that objects and textures have already been loaded
+func (base *WorldDescriptor) Parse() components.World {
var outp = components.World {
Name: base.Name,
Floor: make([]components.FloorTile, 0, len(base.FloorMap)),
@@ -42,6 +50,7 @@ func (base WorldDescriptor) Parse() components.World {
Texture: *components.Resources.Textures.Textures[3], // TODO: Change
Position: base.DefaultStartingPosition,
},
+ StaticObjects: base.parseObjects(),
Camera: &rl.Camera2D{
Offset: rl.Vector2 {X: 0, Y: 0},
@@ -64,3 +73,18 @@ func (base WorldDescriptor) Parse() components.World {
}
return outp
}
+
+func (base *WorldDescriptor) parseObjects() []coreobjects.GameObject {
+ var outp = make([]coreobjects.GameObject, 0, len(base.StaticObjects))
+ for _, v := range base.StaticObjects {
+ var model, modelErr = components.Resources.GetObject(v.Object)
+ if modelErr != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to parse an object in the world %s: %s", base.Name, modelErr.Error())
+ continue
+ }
+ var clone = model.Clone()
+ clone.Position = v.Position
+ outp = append(outp, clone)
+ }
+ return outp
+}