diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2026-02-07 23:20:48 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2026-02-07 23:20:48 +0500 |
| commit | 64f718a1cd694be0952fd3700636d81ba05d30f0 (patch) | |
| tree | 3e9a19e34328072e15b2c8e1387484c7a3099265 /engine/Dynamic/DynamicMenu.go | |
| parent | 08242fe7c284d8e02c662d65831a08a6482e87a3 (diff) | |
Dynamic menus
Diffstat (limited to 'engine/Dynamic/DynamicMenu.go')
| -rw-r--r-- | engine/Dynamic/DynamicMenu.go | 71 |
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 +} |
