diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2026-01-26 20:40:49 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2026-01-26 20:40:49 +0500 |
| commit | a46e7d650896d86c7bade602446ac9539d93396a (patch) | |
| tree | 56787d8625aa8f66a002dd8eaa97541d83d96b4e /engine/Dynamic/Descriptors/Objects.go | |
| parent | 3ba197732d13d84eca0d706218b38d4f84cecba9 (diff) | |
Collider registrty
Diffstat (limited to 'engine/Dynamic/Descriptors/Objects.go')
| -rw-r--r-- | engine/Dynamic/Descriptors/Objects.go | 56 |
1 files changed, 50 insertions, 6 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 { |
