summaryrefslogtreecommitdiff
path: root/engine/Dynamic/Descriptors/UIElement.go
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-02-06 01:55:27 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-02-06 01:55:27 +0500
commit85666467056ccae2011128e0d38ea2dbd1efee8a (patch)
treefa91af8a8e9be05e6ef87a4ecddc6b3f0303dea4 /engine/Dynamic/Descriptors/UIElement.go
parente071f6670cf2d379237bf9cc66bd99696e48df8d (diff)
Menu description pt. 1
Diffstat (limited to 'engine/Dynamic/Descriptors/UIElement.go')
-rw-r--r--engine/Dynamic/Descriptors/UIElement.go84
1 files changed, 84 insertions, 0 deletions
diff --git a/engine/Dynamic/Descriptors/UIElement.go b/engine/Dynamic/Descriptors/UIElement.go
new file mode 100644
index 0000000..e0540ee
--- /dev/null
+++ b/engine/Dynamic/Descriptors/UIElement.go
@@ -0,0 +1,84 @@
+package descriptors
+
+import (
+ "fmt"
+ "strings"
+
+ ui "github.com/DegustatorPonos/RuinesOfRafdolon/UI"
+ rl "github.com/gen2brain/raylib-go/raylib"
+)
+
+type UIElementDescriptor struct {
+ Type string
+ Weight float32
+ Style StyleDescriptor
+
+ // For labels
+ Text string
+ Alignment string
+
+ // For grid elements
+ Children []UIElementDescriptor
+ Spacing float32
+}
+
+func InitUIParser() {
+ typeParsers = map[string]func(*UIElementDescriptor) ui.UIElement {
+ ui.VoidTypeName: parseAsVoid,
+ ui.LabelTypeName: parseAsLabel,
+ ui.GridRowTypeName: parseAsGridRow,
+ }
+}
+
+// The item type to its parser relationship
+var typeParsers map[string]func(*UIElementDescriptor) ui.UIElement
+
+func (base *UIElementDescriptor) Parse() (ui.UIElement, error) {
+ var elemType = strings.ToLower(base.Type)
+ var descFunc, exists = typeParsers[elemType]
+ if exists {
+ return descFunc(base), nil
+ }
+ return nil, fmt.Errorf("Unknown UI element type")
+}
+
+func parseAsVoid(base *UIElementDescriptor) ui.UIElement {
+ return &ui.Void {
+ Weight: base.Weight,
+ }
+}
+
+func parseAsLabel(base *UIElementDescriptor) ui.UIElement {
+ var alignment ui.TextAlignment
+ switch strings.ToLower(base.Alignment) {
+ case "center":
+ alignment = ui.Center
+ case "start":
+ alignment = ui.Start
+ }
+
+ return &ui.Label {
+ WidthWeight: base.Weight,
+ Text: base.Text,
+ Alignment: alignment,
+ Style: base.Style.Parse(),
+ }
+}
+
+func parseAsGridRow(base *UIElementDescriptor) ui.UIElement {
+ var outp = ui.GridRow {
+ Weight: base.Weight,
+ Spacing: base.Spacing,
+ Style: base.Style.Parse(),
+ Objects: make([]ui.UIElement, 0, len(base.Children)),
+ }
+ for _, v := range base.Children {
+ var child, parseErr = v.Parse()
+ if parseErr != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to parse a parent element of a grid row: %v", parseErr.Error())
+ continue
+ }
+ outp.Objects = append(outp.Objects, child)
+ }
+ return &outp
+}