summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--engine/Components/ResourceManager.go1
-rw-r--r--engine/Dynamic/Manager.go22
-rw-r--r--engine/Dynamic/Package.go9
-rw-r--r--engine/main.go32
5 files changed, 56 insertions, 9 deletions
diff --git a/README.md b/README.md
index 6b5dc7d..b9f56e9 100644
--- a/README.md
+++ b/README.md
@@ -9,4 +9,5 @@ PackageName
| |- Meta.json
|-Objects
|-Worlds
+|-Menus
```
diff --git a/engine/Components/ResourceManager.go b/engine/Components/ResourceManager.go
index d7242c4..7dae454 100644
--- a/engine/Components/ResourceManager.go
+++ b/engine/Components/ResourceManager.go
@@ -19,6 +19,7 @@ type ResourceManager struct {
Menus map[string]coreobjects.Scene
}
+// Initializes the shared resource manager
func InitManager() {
Resources = ResourceManager{
LoadedPackages: make(map[string]*settings.AppVersion),
diff --git a/engine/Dynamic/Manager.go b/engine/Dynamic/Manager.go
index 924b4c3..4a5f70f 100644
--- a/engine/Dynamic/Manager.go
+++ b/engine/Dynamic/Manager.go
@@ -4,6 +4,7 @@ import (
"fmt"
"os"
+ components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
descriptors "github.com/DegustatorPonos/RuinesOfRafdolon/Dynamic/Descriptors"
settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
utils "github.com/DegustatorPonos/RuinesOfRafdolon/Utils"
@@ -47,7 +48,7 @@ func loadPackages() (*PackageManager, error) {
}
// Loads the packages from the specified in settings directory. Panics on serious error
-func Init() {
+func ReadPackages() {
descriptors.InitUIParser()
var manager, err = loadPackages()
if err != nil {
@@ -58,6 +59,23 @@ func Init() {
func (base *PackageManager) GetPackage(packageName string) (*Package, error) {
var pack, exists = base.AvaliablePackages[packageName]
- if !exists { return nil, fmt.Errorf("Failed to load package: no such package") }
+ if !exists {
+ return nil, fmt.Errorf("Failed to load package: package %s does not exist", packageName)
+ }
return &pack, nil
}
+
+func (base *PackageManager) IsPackageAvaliable(PkgName string) bool {
+ var _, exists = base.AvaliablePackages[PkgName]
+ return exists
+}
+
+func (base *PackageManager) LoadPackage(PkgName string) error {
+ var pkg, err = base.GetPackage(PkgName)
+ if err != nil {
+ return err
+ }
+ components.Resources.LoadedPackages[pkg.Description.Name] = pkg.Description.Version
+ pkg.Load()
+ return nil
+}
diff --git a/engine/Dynamic/Package.go b/engine/Dynamic/Package.go
index 15a5368..c9a4ef6 100644
--- a/engine/Dynamic/Package.go
+++ b/engine/Dynamic/Package.go
@@ -70,6 +70,15 @@ func ReadPackage(dir os.DirEntry) (*Package, error) {
}, nil
}
+// Loads package in the memory
+func (base *Package) Load() {
+ // Do not change the order - it will break inner dependencies
+ base.LoadTextures()
+ base.LoadObjects()
+ base.LoadWorlds()
+ base.LoadMenus()
+}
+
func loadAssetsFromDir[T Validatable](dirLocation string, InitializeFunc func()T) ([]T, error) {
var files, err = os.ReadDir(dirLocation)
if err != nil {
diff --git a/engine/main.go b/engine/main.go
index 7f5e1bd..0ee6fec 100644
--- a/engine/main.go
+++ b/engine/main.go
@@ -2,6 +2,7 @@ package main
import (
"encoding/json"
+ "fmt"
"log"
"os"
@@ -14,22 +15,39 @@ import (
ui "github.com/DegustatorPonos/RuinesOfRafdolon/UI"
)
+const CorePackageName string = "core"
+
func main() {
settings.ReadSettings()
components.InitManager()
- dynamic.Init()
+ dynamic.ReadPackages()
+
+ // The core package contains the main menu and necessary logic.
+ // It should be loaded for the game to boot
+ if (!dynamic.Manager.IsPackageAvaliable(CorePackageName)) {
+ panic("The core package was not loaded")
+ }
+
render.InitWindow()
defer render.DeinitWindow()
// TEMPORARY SECTION
- for _, v := range dynamic.Manager.AvaliablePackages {
+ // 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()
+ //components.Resources.LoadedPackages[v.Description.Name] = v.Description.Version
+ //v.LoadTextures()
+ //v.LoadObjects()
+ //v.LoadWorlds()
+ //v.LoadMenus()
+ //}
+
+ var coreLoadErr = dynamic.Manager.LoadPackage(CorePackageName)
+ if coreLoadErr != nil {
+ panic(fmt.Sprintf("Failed to load core package: %s", coreLoadErr.Error()))
}
+
+ // _ = dynamic.Manager.LoadPackage("testPackage")
+
log.Printf("Resource manager: %s", &components.Resources)
var manager = coreobjects.InitSceneManager()