summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorphyscik <mynameisgennadiy@vk.com>2026-03-24 12:25:32 +0500
committerphyscik <mynameisgennadiy@vk.com>2026-03-24 12:25:32 +0500
commitaab26bbdb0d8ad96e774baa07d44a3fcc5212cf1 (patch)
treecf2296dc48767f8b339e1867fc16079c6ba235c8 /engine
parent3e3e1f480f87192cf1042bec0ee0d4bb7c356e62 (diff)
Moved assets to a 'core' package
Diffstat (limited to 'engine')
-rw-r--r--engine/Builtin/MainMenu.go13
-rw-r--r--engine/Components/ResourceManager.go2
-rw-r--r--engine/CoreObjects/Scene.go4
-rw-r--r--engine/Dynamic/DynamicMenu.go2
-rw-r--r--engine/Dynamic/Manager.go1
-rw-r--r--engine/Dynamic/Package.go52
-rw-r--r--engine/Settings/AppVersion.go4
-rw-r--r--engine/main.go6
8 files changed, 61 insertions, 23 deletions
diff --git a/engine/Builtin/MainMenu.go b/engine/Builtin/MainMenu.go
deleted file mode 100644
index 35eabea..0000000
--- a/engine/Builtin/MainMenu.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package builtin
-
-import (
- dynamic "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic"
-)
-
-const mainMenuLocation string = "../assets/MainMenu.json"
-
-func MainMenu() *dynamic.DynamicMenu {
- return &dynamic.DynamicMenu {
- FileLocation: mainMenuLocation,
- }
-}
diff --git a/engine/Components/ResourceManager.go b/engine/Components/ResourceManager.go
index b33acc0..d7242c4 100644
--- a/engine/Components/ResourceManager.go
+++ b/engine/Components/ResourceManager.go
@@ -16,6 +16,7 @@ type ResourceManager struct {
Textures TextrueManager
objects map[string]*coreobjects.DynamicObject
Worlds map[string]*World
+ Menus map[string]coreobjects.Scene
}
func InitManager() {
@@ -23,6 +24,7 @@ func InitManager() {
LoadedPackages: make(map[string]*settings.AppVersion),
Worlds: make(map[string]*World),
objects: make(map[string]*coreobjects.DynamicObject),
+ Menus: make(map[string]coreobjects.Scene),
Textures: TextrueManager{
Textures: make([]*rl.Texture2D, 0),
NameToId: make(map[string]uint64),
diff --git a/engine/CoreObjects/Scene.go b/engine/CoreObjects/Scene.go
index 594778f..b6b886c 100644
--- a/engine/CoreObjects/Scene.go
+++ b/engine/CoreObjects/Scene.go
@@ -38,6 +38,10 @@ func (base *SceneManager) Update() {
if (base.OverlayScene != nil) {
base.OverlayScene.Update()
}
+
+ if rl.IsKeyDown(rl.KeyF11) {
+ rl.ToggleFullscreen()
+ }
}
func (base *SceneManager) Draw() {
diff --git a/engine/Dynamic/DynamicMenu.go b/engine/Dynamic/DynamicMenu.go
index 33efc1f..c7226dd 100644
--- a/engine/Dynamic/DynamicMenu.go
+++ b/engine/Dynamic/DynamicMenu.go
@@ -11,6 +11,8 @@ import (
rl "github.com/gen2brain/raylib-go/raylib"
)
+const MenusDirName string = "Menus"
+
const RefreshButton int32 = rl.KeyF5
// Represents a menu variant that is loaded from a file
diff --git a/engine/Dynamic/Manager.go b/engine/Dynamic/Manager.go
index e67b0a8..924b4c3 100644
--- a/engine/Dynamic/Manager.go
+++ b/engine/Dynamic/Manager.go
@@ -38,6 +38,7 @@ func loadPackages() (*PackageManager, error) {
newPackage.ReadTextures()
newPackage.ReadObjects()
newPackage.ReadWorlds()
+ newPackage.ReadMenus()
outp.AvaliablePackages[newPackage.Description.Name] = *newPackage
rl.TraceLog(rl.LogInfo, "Loaded the module %s", newPackage.Description.Name)
diff --git a/engine/Dynamic/Package.go b/engine/Dynamic/Package.go
index 0a3af5a..15a5368 100644
--- a/engine/Dynamic/Package.go
+++ b/engine/Dynamic/Package.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"os"
+ "strings"
components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
descriptors "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic/Descriptors"
@@ -15,23 +16,23 @@ import (
// The defenition of the package
type PackageDescription struct {
Name string `json:"name"`
- Version uint64 `json:"version"`
+ Version *settings.AppVersion `json:"version"`
Type string `json:"type"`
- MinimumVersion *settings.AppVersion
- MaximumVersion *settings.AppVersion
+ MinimumGameVersion *settings.AppVersion
+ MaximumGameVersion *settings.AppVersion
}
func (base *PackageDescription) IsValid() error {
if base.Name == "" {
return fmt.Errorf("Invalid package descriptor: the name cannot be empty")
}
- if base.Version == 0 {
+ if !base.Version.IsValid() {
return fmt.Errorf("Invalid package descriptor: the version cannot be 0")
}
- if base.MinimumVersion == nil {
+ if base.MinimumGameVersion == nil {
return fmt.Errorf("Invalid package descriptor: The package must specify the minimal version")
}
- if !base.MinimumVersion.IsCompatible() || (base.MaximumVersion != nil && !base.MaximumVersion.IsLessThan(&settings.Current.Version)){
+ if !base.MinimumGameVersion.IsCompatible() || (base.MaximumGameVersion != nil && !base.MaximumGameVersion.IsLessThan(&settings.Current.Version)){
return fmt.Errorf("Invalid package descriptor: The package is made for the newer or older version")
}
return nil
@@ -44,6 +45,8 @@ type Package struct {
Textures *descriptors.TexturesDescriptor
Objects map[string]*descriptors.ObjectDescriptor
Worlds map[string]*descriptors.WorldDescriptor
+ // Dynamic menus don't have descriptors - they self-reload
+ Menus map[string]*DynamicMenu
location string
}
@@ -91,9 +94,8 @@ func (base *Package) ReadTextures() {
var loadErr = utils.ReadJSONfromFile(utils.JoinFileLocation(texturesLocation, descriptors.TexturesDescriptorFileName), textures)
if loadErr != nil {
rl.TraceLog(rl.LogWarning, "Failed to load texture description from the module %s: %s", base.location, loadErr)
- } else {
- base.Textures = textures
}
+ base.Textures = textures
}
// Loads textures in the resource manager
@@ -166,3 +168,37 @@ func loadObjectsFromDir(dir string) (map[string]*descriptors.ObjectDescriptor, e
}
return descriptors.MapObjectDescriptors(loaded), nil
}
+
+func (base *Package) ReadMenus() {
+ var loaded, err = loadMenusFromDir(utils.JoinFileLocation(base.location, MenusDirName))
+ if err != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to load menus from the module %s: %s", base.location, err)
+ return
+ }
+ base.Menus = loaded
+}
+
+func loadMenusFromDir(dir string) (map[string]*DynamicMenu, error) {
+ var files, err = os.ReadDir(dir)
+ if err != nil {
+ return nil, err
+ }
+ var outp = make(map[string]*DynamicMenu)
+ for _, v := range files {
+ if v.IsDir() {
+ rl.TraceLog(rl.LogWarning, "Failed to load menu %s: the file is a directory", v.Name())
+ continue
+ }
+ var menuName = strings.TrimSuffix(v.Name(), ".json")
+ outp[menuName] = &DynamicMenu{
+ FileLocation: utils.JoinFileLocation(dir, v.Name()),
+ }
+ }
+ return outp, nil
+}
+
+func (base *Package) LoadMenus() {
+ for k, v := range base.Menus {
+ components.Resources.Menus[fmt.Sprintf("%s/%s", base.Description.Name, k)] = v
+ }
+}
diff --git a/engine/Settings/AppVersion.go b/engine/Settings/AppVersion.go
index d21fd1a..4f3f2f3 100644
--- a/engine/Settings/AppVersion.go
+++ b/engine/Settings/AppVersion.go
@@ -22,3 +22,7 @@ func (base *AppVersion) IsLessThan(other *AppVersion) bool {
func (base *AppVersion) IsCompatible() bool {
return Current.Version.MajorVersion >= base.MajorVersion && Current.Version.MinorVersion >= base.MinorVersion && Current.Version.Patch >= base.Patch
}
+
+func (base *AppVersion) IsValid() bool {
+ return base.MajorVersion != 0 || base.MinorVersion != 0 || base.Patch != 0
+}
diff --git a/engine/main.go b/engine/main.go
index 3b66d09..7f5e1bd 100644
--- a/engine/main.go
+++ b/engine/main.go
@@ -5,7 +5,6 @@ import (
"log"
"os"
- builtin "github.com/DegustatorPonos/RuinesOfRafdolon/Builtin"
components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
dynamic "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic"
@@ -25,15 +24,18 @@ func main() {
// TEMPORARY SECTION
for _, v := range dynamic.Manager.AvaliablePackages {
// log.Printf("%s: %s", k, &v)
+ components.Resources.LoadedPackages[v.Description.Name] = v.Description.Version
v.LoadTextures()
v.LoadObjects()
v.LoadWorlds()
+ v.LoadMenus()
}
log.Printf("Resource manager: %s", &components.Resources)
var manager = coreobjects.InitSceneManager()
// render.StartLoop(manager, components.Resources.Worlds["MainWorld"])
- render.StartLoop(manager, builtin.MainMenu())
+ render.StartLoop(manager, components.Resources.Menus["core/MainMenu"])
+ // render.StartLoop(manager, builtin.MainMenu())
}
func test_desc() (ui.UIElement, error) {