diff options
| -rw-r--r-- | Makefile | 1 | ||||
| -rw-r--r-- | engine/Builtin/MainMenu.go | 13 | ||||
| -rw-r--r-- | engine/Components/ResourceManager.go | 2 | ||||
| -rw-r--r-- | engine/CoreObjects/Scene.go | 4 | ||||
| -rw-r--r-- | engine/Dynamic/DynamicMenu.go | 2 | ||||
| -rw-r--r-- | engine/Dynamic/Manager.go | 1 | ||||
| -rw-r--r-- | engine/Dynamic/Package.go | 52 | ||||
| -rw-r--r-- | engine/Settings/AppVersion.go | 4 | ||||
| -rw-r--r-- | engine/main.go | 6 | ||||
| -rw-r--r-- | packages/Core/Description.json | 14 | ||||
| -rw-r--r-- | packages/Core/Menus/MainMenu.json (renamed from assets/MainMenu.json) | 0 | ||||
| -rw-r--r-- | packages/TestPackage/Description.json | 8 |
12 files changed, 81 insertions, 26 deletions
@@ -2,7 +2,6 @@ all: cd engine; go build . mkdir -p bin ln -f engine/Config.json bin - ln -fs ../assets bin ln -f engine/RuinesOfRafdolon bin clean: 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) { diff --git a/packages/Core/Description.json b/packages/Core/Description.json new file mode 100644 index 0000000..326fc03 --- /dev/null +++ b/packages/Core/Description.json @@ -0,0 +1,14 @@ +{ + "name": "core", + "version": { + "MajorVersion": 0, + "MinorVersion": 0, + "Patch": 1 + }, + "type": "assetpack", + "MinimumGameVersion": { + "MajorVersion": 0, + "MinorVersion": 0, + "Patch": 1 + } +} diff --git a/assets/MainMenu.json b/packages/Core/Menus/MainMenu.json index 9054627..9054627 100644 --- a/assets/MainMenu.json +++ b/packages/Core/Menus/MainMenu.json diff --git a/packages/TestPackage/Description.json b/packages/TestPackage/Description.json index 9fd287f..e0cf6fb 100644 --- a/packages/TestPackage/Description.json +++ b/packages/TestPackage/Description.json @@ -1,8 +1,12 @@ { "name": "testPackage", - "version": 1, + "version": { + "MajorVersion": 0, + "MinorVersion": 0, + "Patch": 1 + }, "type": "story", - "MinimumVersion": { + "MinimumGameVersion": { "MajorVersion": 0, "MinorVersion": 0, "Patch": 1 |
