summaryrefslogtreecommitdiff
path: root/engine/Dynamic
diff options
context:
space:
mode:
Diffstat (limited to 'engine/Dynamic')
-rw-r--r--engine/Dynamic/DynamicMenu.go45
1 files changed, 37 insertions, 8 deletions
diff --git a/engine/Dynamic/DynamicMenu.go b/engine/Dynamic/DynamicMenu.go
index a1f3cd0..33efc1f 100644
--- a/engine/Dynamic/DynamicMenu.go
+++ b/engine/Dynamic/DynamicMenu.go
@@ -11,10 +11,14 @@ import (
rl "github.com/gen2brain/raylib-go/raylib"
)
+const RefreshButton int32 = rl.KeyF5
+
// Represents a menu variant that is loaded from a file
type DynamicMenu struct {
FileLocation string
baseMenu *ui.Menu
+
+ manager *coreobjects.SceneManager
}
func (base *DynamicMenu) Create(manager *coreobjects.SceneManager) {
@@ -25,6 +29,7 @@ func (base *DynamicMenu) Create(manager *coreobjects.SceneManager) {
Contents: &ui.Void{},
}
}
+ base.manager = manager
base.baseMenu.Create(manager)
}
@@ -33,6 +38,13 @@ func (base *DynamicMenu) Destroy() {
}
func (base *DynamicMenu) Update() {
+ if rl.IsKeyReleased(RefreshButton) {
+ rl.TraceLog(rl.LogInfo, "Reloading the menu '%v'...", base.FileLocation)
+ var err = base.Reload()
+ if err != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to reload a dynamic menu '%v': %v", base.FileLocation, err.Error())
+ }
+ }
base.baseMenu.Update()
}
@@ -54,18 +66,35 @@ func (base *DynamicMenu) String() string {
// 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 = base.readMenu()
+ if parseErr != nil {
+ return parseErr
}
- var parsed, parseErr = descriptor.Parse()
+ base.baseMenu = parsed
+ return nil
+}
+
+func (base *DynamicMenu) Reload() error {
+ var parsed, parseErr = base.readMenu()
if parseErr != nil {
return parseErr
}
+ base.baseMenu.Destroy()
base.baseMenu = parsed
+ base.baseMenu.Create(base.manager)
return nil
}
+
+// Tries to read a base menu from the file
+func (base *DynamicMenu) readMenu() (*ui.Menu, error) {
+ var file, fErr = os.ReadFile(base.FileLocation)
+ if fErr != nil {
+ return nil, fErr
+ }
+ var descriptor = descriptors.MenuDescriptor{}
+ if jsonErr := json.Unmarshal(file, &descriptor); jsonErr != nil {
+ return nil, jsonErr
+ }
+ return descriptor.Parse()
+}
+