summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-08 21:14:55 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-08 21:14:55 +0500
commita6abcd529522c6682a4c2a1f25b1eaf6bd74d53d (patch)
treee4a1ac10c5bb43d8129934212746218be748b55d
parentb2895f2e9f64cf7cc593130980747b045f6abee8 (diff)
Package start
-rw-r--r--Makefile1
-rw-r--r--README.md9
-rw-r--r--engine/Components/Packages/Common.go23
-rw-r--r--engine/Components/Packages/Manager.go43
-rw-r--r--engine/Components/Packages/Package.go42
-rw-r--r--engine/Components/World/Tile.go12
-rw-r--r--engine/Config.json13
-rw-r--r--engine/Packages/TestPackage/Description.json5
-rw-r--r--engine/Render/initWindow.go2
-rw-r--r--engine/Settings/Settings.go18
-rw-r--r--engine/assets/tree.pngbin0 -> 1033 bytes
-rw-r--r--engine/main.go43
12 files changed, 157 insertions, 54 deletions
diff --git a/Makefile b/Makefile
index a61764f..3c7694f 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,7 @@ all:
mkdir -p bin
ln -f engine/Config.json bin
ln -fs ../engine/assets bin
+ ln -fs ../engine/Packages bin
ln -f engine/RuinesOfRafdolon bin
run:
diff --git a/README.md b/README.md
index d003f4a..a449ba7 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,8 @@
-# RuinesOfRafdolon \ No newline at end of file
+# RuinesOfRafdolon
+
+# Package structure
+
+```
+PackageName
+|-Description.json
+```
diff --git a/engine/Components/Packages/Common.go b/engine/Components/Packages/Common.go
new file mode 100644
index 0000000..0564f08
--- /dev/null
+++ b/engine/Components/Packages/Common.go
@@ -0,0 +1,23 @@
+package packages
+
+import (
+ "encoding/json"
+ "fmt"
+ "os"
+)
+
+func ReadJSONfromFile(fileLocation string, v any) error {
+ var file, openErr = os.ReadFile(fileLocation)
+ if openErr != nil {
+ return openErr
+ }
+ var jsonErr = json.Unmarshal(file, v)
+ if jsonErr != nil {
+ return jsonErr
+ }
+ return nil
+}
+
+func ConcantinateFileLocation(baseDirLocation string, appendix string) string {
+ return fmt.Sprintf("%v/%v", baseDirLocation, appendix)
+}
diff --git a/engine/Components/Packages/Manager.go b/engine/Components/Packages/Manager.go
new file mode 100644
index 0000000..47b0476
--- /dev/null
+++ b/engine/Components/Packages/Manager.go
@@ -0,0 +1,43 @@
+package packages
+
+import (
+ "fmt"
+ "os"
+
+ settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
+ rl "github.com/gen2brain/raylib-go/raylib"
+)
+
+type PackageManager struct {
+ AvaliablePackages map[string]Package
+}
+
+var Manager *PackageManager = nil
+
+func LoadPackages() (*PackageManager, error) {
+ var dir, dirErr = os.ReadDir(settings.Current.PackagesLocation)
+ if dirErr != nil {
+ return nil, dirErr
+ }
+ var outp = PackageManager{
+ AvaliablePackages: make(map[string]Package),
+ }
+ for _, v := range dir {
+ var newPackage, packageErr = ReadPackage(v)
+ if packageErr != nil {
+ rl.TraceLog(rl.LogWarning, "Failed to load the module %v: %s", v.Name(), packageErr.Error())
+ continue
+ }
+ _ = newPackage
+ rl.TraceLog(rl.LogError, "Loaded the module %s", newPackage.Description.Name)
+ }
+ return &outp, nil
+}
+
+func Init() {
+ var manager, err = LoadPackages()
+ if err != nil {
+ panic(fmt.Sprintf("Failed to load packages: %v", err.Error()))
+ }
+ Manager = manager
+}
diff --git a/engine/Components/Packages/Package.go b/engine/Components/Packages/Package.go
new file mode 100644
index 0000000..51e2a80
--- /dev/null
+++ b/engine/Components/Packages/Package.go
@@ -0,0 +1,42 @@
+package packages
+
+import (
+ "fmt"
+ "os"
+
+ settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
+)
+
+type PackageDescription struct {
+ Name string `json:"name"`
+ Version uint64 `json:"version"`
+ Type string `json:"type"`
+}
+
+type Package struct {
+ Description PackageDescription `json:"description"`
+}
+
+func ReadPackage(dir os.DirEntry) (*Package, error) {
+ var dirPath = ConcantinateFileLocation(settings.Current.PackagesLocation, dir.Name())
+ var desc = PackageDescription{}
+ if descErr := ReadJSONfromFile(ConcantinateFileLocation(dirPath, "Description.json"), &desc); descErr != nil {
+ return nil, descErr
+ }
+ if descErr := desc.Validate(); descErr != nil {
+ return nil, fmt.Errorf("Failed to parse descriptor: %s", descErr.Error())
+ }
+ return &Package{
+ Description: desc,
+ }, nil
+}
+
+func (base *PackageDescription) Validate() error {
+ if base.Name == "" {
+ return fmt.Errorf("Invalid package descriptor: the name cannot be empty")
+ }
+ if base.Version == 0{
+ return fmt.Errorf("Invalid package descriptor: the version cannot be 0")
+ }
+ return nil
+}
diff --git a/engine/Components/World/Tile.go b/engine/Components/World/Tile.go
index 203d40d..a630062 100644
--- a/engine/Components/World/Tile.go
+++ b/engine/Components/World/Tile.go
@@ -23,9 +23,19 @@ func (base *StandardTile) Draw() {
int32(base.X) * int32(base.ParentWorld.TileSize.X),
int32(base.Y) * int32(base.ParentWorld.TileSize.Y),
rl.White)
-}
+ if base.Descriptor.OveralyTextureId != 0 {
+ var overlayTexture = base.ParentWorld.Textures[base.Descriptor.OveralyTextureId]
+ var dx = (base.ParentWorld.TileSize.X - float32(overlayTexture.Width)) / 2
+ var dy = (float32(overlayTexture.Height) - base.ParentWorld.TileSize.Y)
+ rl.DrawTexture(overlayTexture,
+ int32(base.X) * int32(base.ParentWorld.TileSize.X) + int32(dx),
+ int32(base.Y) * int32(base.ParentWorld.TileSize.Y) - int32(dy),
+ rl.White)
+ }
+}
type TileDescriptor struct {
TextureId int `json:"textureid"`
+ OveralyTextureId int `json:"overalytextureid"`
}
diff --git a/engine/Config.json b/engine/Config.json
index f96a4e9..9e1474f 100644
--- a/engine/Config.json
+++ b/engine/Config.json
@@ -1,8 +1,9 @@
{
- "Version": {
- "MajorVersion": 0,
- "MinorVersion": 0,
- "Patch": 1,
- "IsBeta": true
- }
+ "Version": {
+ "MajorVersion": 0,
+ "MinorVersion": 0,
+ "Patch": 1,
+ "IsBeta": true
+ },
+ "PackagesLocation": "Packages"
}
diff --git a/engine/Packages/TestPackage/Description.json b/engine/Packages/TestPackage/Description.json
new file mode 100644
index 0000000..259c715
--- /dev/null
+++ b/engine/Packages/TestPackage/Description.json
@@ -0,0 +1,5 @@
+{
+ "name": "testPackage",
+ "version": 1,
+ "type": "story"
+}
diff --git a/engine/Render/initWindow.go b/engine/Render/initWindow.go
index 6b38180..436beb6 100644
--- a/engine/Render/initWindow.go
+++ b/engine/Render/initWindow.go
@@ -6,6 +6,8 @@ import (
)
func InitWindow(manager coreobjects.SceneManager, startScene coreobjects.Scene) {
+ rl.SetConfigFlags(rl.FlagWindowResizable)
+
rl.InitWindow(800, 450, "xdx")
defer rl.CloseWindow()
diff --git a/engine/Settings/Settings.go b/engine/Settings/Settings.go
index 05afe02..a0490cc 100644
--- a/engine/Settings/Settings.go
+++ b/engine/Settings/Settings.go
@@ -15,6 +15,7 @@ type AppVersion struct {
type Settings struct {
Version AppVersion
+ PackagesLocation string
}
var defaultSettings = Settings {
@@ -24,6 +25,7 @@ var defaultSettings = Settings {
Patch: 0,
IsBeta: true,
},
+ PackagesLocation: "Packages",
}
func (base Settings) String() string {
@@ -41,11 +43,11 @@ func ReadSettings() {
var file, fopenerr = os.ReadFile(appliedFlags.SettingsFileLocation)
if fopenerr != nil {
- var success, inintBody = createSettingsFile()
- if success {
- file = inintBody
+ var inintBody, createErr = createSettingsFile()
+ if createErr != nil {
+ panic(fmt.Sprintf("Unable to load or create settings file. \nOriginal error: %v\nFile open error: %v", createErr.Error(), fopenerr.Error()))
} else {
- panic(fmt.Sprintf("Unable to load or create settings file. \nOriginal error: %v\n", fopenerr.Error()))
+ file = inintBody
}
}
var data = Settings{}
@@ -57,19 +59,19 @@ func ReadSettings() {
Current = data
}
-func createSettingsFile() (bool, []byte ) {
+func createSettingsFile() ([]byte, error) {
var file, err = os.Create(readFlags().SettingsFileLocation)
if err != nil {
- return false, nil
+ return nil, err
}
defer file.Close()
var inititalData = defaultSettings
var body, jsonerr = json.MarshalIndent(inititalData, "", " ")
if jsonerr != nil {
- return false, nil
+ return nil, jsonerr
}
fmt.Fprint(file, string(body))
- return true, body
+ return body, nil
}
// Returns an error with the issue description if the settings are invalid
diff --git a/engine/assets/tree.png b/engine/assets/tree.png
new file mode 100644
index 0000000..b2452b1
--- /dev/null
+++ b/engine/assets/tree.png
Binary files differ
diff --git a/engine/main.go b/engine/main.go
index 86d3b2f..10a531b 100644
--- a/engine/main.go
+++ b/engine/main.go
@@ -1,6 +1,7 @@
package main
import (
+ packages "github.com/DegustatorPonos/RuinesOfRafdolon/Components/Packages"
world "github.com/DegustatorPonos/RuinesOfRafdolon/Components/World"
coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
render "github.com/DegustatorPonos/RuinesOfRafdolon/Render"
@@ -10,12 +11,15 @@ import (
func main() {
settings.ReadSettings()
+ packages.Init()
// TEMPORARY SECTION
+
var descriptor = world.Descriptor {
TileSize: rl.Vector2 { X: 32, Y: 32 },
Textures: map[int]string{
0: "assets/tile.png",
1: "assets/water.png",
+ 2: "assets/tree.png",
},
WorldMap: [][]world.TileDescriptor {
[]world.TileDescriptor {
@@ -24,6 +28,7 @@ func main() {
},
world.TileDescriptor{
TextureId: 0,
+ OveralyTextureId: 2,
},
},
[]world.TileDescriptor {
@@ -37,46 +42,8 @@ func main() {
},
}
- // var field = CreateWorld(8, 8)
var field = descriptor.GenerateMap()
var manager = coreobjects.InitSceneManager()
render.InitWindow(manager, field)
}
-
-// ==================== TEMPORARY SECTION ====================
-
-var TileSize = rl.Vector2 { X: 32, Y: 32 }
-
-type DefaultTile struct {
- Position rl.Vector2
-}
-
-func (base *DefaultTile) Init(pos rl.Vector2) {
- base.Position = pos
-}
-
-func (base *DefaultTile) Update() {
-}
-
-func (base *DefaultTile) Draw() {
- rl.DrawTexture(world.Texture,
- int32(base.Position.X) * int32(TileSize.X),
- int32(base.Position.Y) * int32(TileSize.Y),
- rl.White)
-}
-
-func CreateWorld(x int, y int) world.World {
- var tiles = make([][]world.Tile, x)
- for i := range tiles {
- tiles[i] = make([]world.Tile, y)
- for j := range tiles[i] {
- tiles[i][j] = &DefaultTile{
- Position: rl.Vector2{ X: float32(j), Y: float32(i) },
- }
- }
- }
- return world.World {
- Tiles: tiles,
- }
-}