summaryrefslogtreecommitdiff
path: root/engine/Dynamic/Descriptors
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-26 20:40:49 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-26 20:40:49 +0500
commita46e7d650896d86c7bade602446ac9539d93396a (patch)
tree56787d8625aa8f66a002dd8eaa97541d83d96b4e /engine/Dynamic/Descriptors
parent3ba197732d13d84eca0d706218b38d4f84cecba9 (diff)
Collider registrty
Diffstat (limited to 'engine/Dynamic/Descriptors')
-rw-r--r--engine/Dynamic/Descriptors/Objects.go56
-rw-r--r--engine/Dynamic/Descriptors/World.go2
2 files changed, 51 insertions, 7 deletions
diff --git a/engine/Dynamic/Descriptors/Objects.go b/engine/Dynamic/Descriptors/Objects.go
index 92a44d7..fa67889 100644
--- a/engine/Dynamic/Descriptors/Objects.go
+++ b/engine/Dynamic/Descriptors/Objects.go
@@ -3,6 +3,7 @@ package descriptors
import (
"encoding/json"
"fmt"
+ "strings"
components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
@@ -14,6 +15,7 @@ const ObjectsDirName string = "Objects"
type ObjectDescriptor struct {
Name string
Textures []*ObjectTextureBlock
+ Colliders []*ObjectColliderBlock
}
// Maps objects by their IDs
@@ -38,24 +40,45 @@ func (base *ObjectDescriptor) IsValid() error {
return nil
}
-func (base *ObjectDescriptor) Parse() coreobjects.DynamicObject {
- var outp = coreobjects.DynamicObject{
- Textures: make([]*coreobjects.TextureBlock, len(base.Textures)),
- }
- for i, v := range base.Textures {
+func (base *ObjectDescriptor) parseTextures() []*coreobjects.TextureBlock {
+ var outp = make([]*coreobjects.TextureBlock, 0, len(base.Textures))
+ for _, v := range base.Textures {
var texture, err = v.GetTexture()
if err != nil {
rl.TraceLog(rl.LogWarning, "Failed to get the required by the object %s texture: %s", base.Name, err.Error())
continue
}
- outp.Textures[i] = &coreobjects.TextureBlock {
+ outp = append(outp, &coreobjects.TextureBlock {
Texture: texture,
Offset: v.Offset,
+ })
+ }
+ return outp
+}
+
+func (base *ObjectDescriptor) parseColliders() []*coreobjects.ColliderBlock {
+ var outp = make([]*coreobjects.ColliderBlock, 0, len(base.Colliders))
+ for _, v := range base.Colliders {
+ var parsed, err = v.GetCollider()
+ if err != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to parse the required by the object %s collidet: %s", base.Name, err.Error())
+ continue
}
+ outp = append(outp, &coreobjects.ColliderBlock{
+ Collider: parsed,
+ Offset: v.Offset,
+ })
}
return outp
}
+func (base *ObjectDescriptor) Parse() coreobjects.DynamicObject {
+ return coreobjects.DynamicObject {
+ Textures: base.parseTextures(),
+ Colliders: base.parseColliders(),
+ }
+}
+
type ObjectTextureBlock struct {
Name string
TextureId *uint64
@@ -69,6 +92,27 @@ func (base *ObjectTextureBlock) GetTexture() (*rl.Texture2D, error) {
return components.Resources.Textures.GetTextureByName(base.Name)
}
+type ObjectColliderBlock struct {
+ Type string
+ Size rl.Vector2
+ Offset rl.Vector2
+}
+
+func (base *ObjectColliderBlock) GetCollider() (coreobjects.Collider, error) {
+ switch strings.ToLower(base.Type) {
+ case "box":
+ return base.parseAsBox(), nil
+ }
+ return nil, fmt.Errorf("Failed to parse collider: type %s is unknown", base.Type)
+}
+
+func (base *ObjectColliderBlock) parseAsBox() coreobjects.Collider {
+ var outp = (&coreobjects.BoxCollider{}).Init(
+ base.Offset.X, base.Offset.Y,
+ base.Size.X, base.Size.Y )
+ return outp
+}
+
func (base *ObjectDescriptor) String() string {
var outp, jsonErr = json.Marshal(base)
if jsonErr != nil {
diff --git a/engine/Dynamic/Descriptors/World.go b/engine/Dynamic/Descriptors/World.go
index 425c3f2..f0328fd 100644
--- a/engine/Dynamic/Descriptors/World.go
+++ b/engine/Dynamic/Descriptors/World.go
@@ -83,7 +83,7 @@ func (base *WorldDescriptor) parseObjects() []coreobjects.GameObject {
continue
}
var clone = model.Clone()
- clone.Position = v.Position
+ clone.MoveTo(v.Position.X, v.Position.Y)
outp = append(outp, clone)
}
return outp