From 834cf6b5e7e16506e72192b4fc37fd8229bb78f0 Mon Sep 17 00:00:00 2001 From: Physcik Date: Sun, 8 Feb 2026 18:51:02 +0500 Subject: Menu reloading --- engine/Dynamic/DynamicMenu.go | 45 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) (limited to 'engine/Dynamic') 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() +} + -- cgit v1.3