diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2026-01-08 21:14:55 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2026-01-08 21:14:55 +0500 |
| commit | a6abcd529522c6682a4c2a1f25b1eaf6bd74d53d (patch) | |
| tree | e4a1ac10c5bb43d8129934212746218be748b55d /engine | |
| parent | b2895f2e9f64cf7cc593130980747b045f6abee8 (diff) | |
Package start
Diffstat (limited to 'engine')
| -rw-r--r-- | engine/Components/Packages/Common.go | 23 | ||||
| -rw-r--r-- | engine/Components/Packages/Manager.go | 43 | ||||
| -rw-r--r-- | engine/Components/Packages/Package.go | 42 | ||||
| -rw-r--r-- | engine/Components/World/Tile.go | 12 | ||||
| -rw-r--r-- | engine/Config.json | 13 | ||||
| -rw-r--r-- | engine/Packages/TestPackage/Description.json | 5 | ||||
| -rw-r--r-- | engine/Render/initWindow.go | 2 | ||||
| -rw-r--r-- | engine/Settings/Settings.go | 18 | ||||
| -rw-r--r-- | engine/assets/tree.png | bin | 0 -> 1033 bytes | |||
| -rw-r--r-- | engine/main.go | 43 |
10 files changed, 148 insertions, 53 deletions
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 Binary files differnew file mode 100644 index 0000000..b2452b1 --- /dev/null +++ b/engine/assets/tree.png 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, - } -} |
