summaryrefslogtreecommitdiff
path: root/engine/Dynamic/DynamicMenu.go
diff options
context:
space:
mode:
Diffstat (limited to 'engine/Dynamic/DynamicMenu.go')
-rw-r--r--engine/Dynamic/DynamicMenu.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/engine/Dynamic/DynamicMenu.go b/engine/Dynamic/DynamicMenu.go
new file mode 100644
index 0000000..a1f3cd0
--- /dev/null
+++ b/engine/Dynamic/DynamicMenu.go
@@ -0,0 +1,71 @@
+package dynamic
+
+import (
+ "encoding/json"
+ "fmt"
+ "os"
+
+ coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
+ descriptors "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic/Descriptors"
+ ui "github.com/DegustatorPonos/RuinesOfRafdolon/UI"
+ rl "github.com/gen2brain/raylib-go/raylib"
+)
+
+// Represents a menu variant that is loaded from a file
+type DynamicMenu struct {
+ FileLocation string
+ baseMenu *ui.Menu
+}
+
+func (base *DynamicMenu) Create(manager *coreobjects.SceneManager) {
+ var err = base.LoadMenu()
+ if err != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to load the menu from the file %v: %v", base.FileLocation, err.Error())
+ base.baseMenu = &ui.Menu {
+ Contents: &ui.Void{},
+ }
+ }
+ base.baseMenu.Create(manager)
+}
+
+func (base *DynamicMenu) Destroy() {
+ base.baseMenu.Destroy()
+}
+
+func (base *DynamicMenu) Update() {
+ base.baseMenu.Update()
+}
+
+func (base *DynamicMenu) Draw() {
+ base.baseMenu.Draw()
+}
+
+func (base *DynamicMenu) GetMousePosition() rl.Vector2 {
+ return rl.GetMousePosition()
+}
+
+func (base *DynamicMenu) String() string {
+ var outp, jsonErr = json.Marshal(base)
+ if jsonErr != nil {
+ return fmt.Sprintf("Failed to parse: %s", jsonErr.Error())
+ }
+ return string(outp)
+}
+
+// Loads the menu from the file. Does not initialize it
+func (base *DynamicMenu) LoadMenu() error {
+ var file, fErr = os.ReadFile(base.FileLocation)
+ if fErr != nil {
+ return fErr
+ }
+ var descriptor = descriptors.MenuDescriptor{}
+ if jsonErr := json.Unmarshal(file, &descriptor); jsonErr != nil {
+ return jsonErr
+ }
+ var parsed, parseErr = descriptor.Parse()
+ if parseErr != nil {
+ return parseErr
+ }
+ base.baseMenu = parsed
+ return nil
+}