diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2026-01-06 18:53:57 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2026-01-06 18:53:57 +0500 |
| commit | d804d0467399c821a05832a96ae4780ef69fb1bf (patch) | |
| tree | 69a51d854684625af082202f6687587d9343c10b | |
| parent | 41a6f340e6d455444aecf216271a09cce192e0e9 (diff) | |
Project init
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | engine/Config.json | 8 | ||||
| -rw-r--r-- | engine/CoreObjects/Object.go | 8 | ||||
| -rw-r--r-- | engine/CoreObjects/OverlayScene.go | 60 | ||||
| -rw-r--r-- | engine/CoreObjects/Scene.go | 48 | ||||
| -rw-r--r-- | engine/GameObjects/World.go | 68 | ||||
| -rw-r--r-- | engine/Render/initWindow.go | 21 | ||||
| -rw-r--r-- | engine/Settings/Flags.go | 28 | ||||
| -rw-r--r-- | engine/Settings/Settings.go | 78 | ||||
| -rw-r--r-- | engine/go.mod | 10 | ||||
| -rw-r--r-- | engine/go.sum | 8 | ||||
| -rw-r--r-- | engine/main.go | 18 | ||||
| -rw-r--r-- | engine/tile.png | bin | 0 -> 377 bytes |
13 files changed, 357 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6ac3d68 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +run: + cd engine; go run . diff --git a/engine/Config.json b/engine/Config.json new file mode 100644 index 0000000..f96a4e9 --- /dev/null +++ b/engine/Config.json @@ -0,0 +1,8 @@ +{ + "Version": { + "MajorVersion": 0, + "MinorVersion": 0, + "Patch": 1, + "IsBeta": true + } +} diff --git a/engine/CoreObjects/Object.go b/engine/CoreObjects/Object.go new file mode 100644 index 0000000..6f0a808 --- /dev/null +++ b/engine/CoreObjects/Object.go @@ -0,0 +1,8 @@ +package coreobjects + +type Object interface { + Create(SceneManager) + Destroy() + Update() + Draw() +} diff --git a/engine/CoreObjects/OverlayScene.go b/engine/CoreObjects/OverlayScene.go new file mode 100644 index 0000000..5c43e11 --- /dev/null +++ b/engine/CoreObjects/OverlayScene.go @@ -0,0 +1,60 @@ +package coreobjects + +import ( + "fmt" + + settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" + rl "github.com/gen2brain/raylib-go/raylib" +) + +type OveralyScene struct { + FPS FpsMeter +} + +func (base *OveralyScene) Create(_ SceneManager) { +} + +func (base *OveralyScene) Destroy() { +} + +func (base *OveralyScene) Update() { + base.FPS.Update() +} + +func (base *OveralyScene) Draw() { + var appendix = "" + if settings.Current.Version.IsBeta { + appendix = " b" + } + var version = fmt.Sprintf("%d.%d.%d%s", settings.Current.Version.MajorVersion, settings.Current.Version.MinorVersion, settings.Current.Version.Patch, appendix) + rl.DrawText(version, 2, int32(rl.GetScreenHeight()) - 20, 20, rl.Black) + base.FPS.Draw() +} + +// =============== FPS METER =============== + +type FpsMeter struct { + deltaTime float32 + Value float32 + FramesElapsed uint +} + +func (base *FpsMeter) Create(SceneManager) { +} + +func (base *FpsMeter) Destroy() { +} + +func (base *FpsMeter) Update() { + base.deltaTime += rl.GetFrameTime() + base.FramesElapsed++ + if base.deltaTime >= 1 { + base.Value = float32(base.FramesElapsed) + base.deltaTime = 0 + base.FramesElapsed = 0 + } +} + +func (base *FpsMeter) Draw() { + rl.DrawText(fmt.Sprintf("%v FPS", base.Value), 0, 0, 20, rl.Green) +} diff --git a/engine/CoreObjects/Scene.go b/engine/CoreObjects/Scene.go new file mode 100644 index 0000000..bcb8c63 --- /dev/null +++ b/engine/CoreObjects/Scene.go @@ -0,0 +1,48 @@ +package coreobjects + +type SceneManager struct { + OverlayScene Scene + SelectedScene Scene +} + +type Scene interface { + Create(SceneManager) + Destroy() + Update() + Draw() +} + +func InitSceneManager() SceneManager { + return SceneManager{ + OverlayScene: &OveralyScene{}, + SelectedScene: nil, + } +} + +func (base *SceneManager) ChangeScene(newScene Scene) { + if base.SelectedScene != nil { + base.SelectedScene.Destroy() + } + base.SelectedScene = newScene + base.SelectedScene.Create(*base) +} + +func (base *SceneManager) Update() { + if (base.SelectedScene != nil) { + base.SelectedScene.Update() + } + + if (base.OverlayScene != nil) { + base.OverlayScene.Update() + } +} + +func (base *SceneManager) Draw() { + if (base.SelectedScene != nil) { + base.SelectedScene.Draw() + } + + if (base.OverlayScene != nil) { + base.OverlayScene.Draw() + } +} diff --git a/engine/GameObjects/World.go b/engine/GameObjects/World.go new file mode 100644 index 0000000..9ce16b0 --- /dev/null +++ b/engine/GameObjects/World.go @@ -0,0 +1,68 @@ +package gameobjects + +import ( + coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects" + rl "github.com/gen2brain/raylib-go/raylib" +) + +var texture rl.Texture2D + +type Tile struct { +} + +type Field struct { + Tiles [][]Tile + Camera rl.Camera2D +} + +func (base *Field) Create(_ coreobjects.SceneManager) { + var image = rl.LoadImage("tile.png") + texture = rl.LoadTextureFromImage(image) + rl.UnloadImage(image) + + base.Camera = rl.Camera2D{} + base.Camera.Target = rl.Vector2 { X: 0, Y: 0 } + base.Camera.Offset = rl.Vector2 { X: 0, Y: 0 } + base.Camera.Rotation = 0 + base.Camera.Zoom = 2 +} + +func (base *Field) Destroy() { + rl.UnloadTexture(texture) +} + +func (base *Field) Update() { + if rl.IsKeyDown(rl.KeyW) { + base.Camera.Target.Y -= 0.3 + } + if rl.IsKeyDown(rl.KeyS) { + base.Camera.Target.Y += 0.3 + } + if rl.IsKeyDown(rl.KeyA) { + base.Camera.Target.X -= 0.3 + } + if rl.IsKeyDown(rl.KeyD) { + base.Camera.Target.X += 0.3 + } +} + +func (base *Field) Draw() { + rl.BeginMode2D(base.Camera) + defer rl.EndMode2D() + + for x, r := range base.Tiles { + for y, _ := range r { + rl.DrawTexture(texture, (int32(x) * 32), int32(y) * 32, rl.White) + } + } +} + +func CreateField(x int, y int) Field { + var tiles = make([][]Tile, x) + for i := range tiles { + tiles[i] = make([]Tile, y) + } + return Field { + Tiles: tiles, + } +} diff --git a/engine/Render/initWindow.go b/engine/Render/initWindow.go new file mode 100644 index 0000000..6b38180 --- /dev/null +++ b/engine/Render/initWindow.go @@ -0,0 +1,21 @@ +package render + +import ( + coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects" + rl "github.com/gen2brain/raylib-go/raylib" +) + +func InitWindow(manager coreobjects.SceneManager, startScene coreobjects.Scene) { + rl.InitWindow(800, 450, "xdx") + defer rl.CloseWindow() + + manager.ChangeScene(startScene) + + for !rl.WindowShouldClose() { + manager.Update() + rl.BeginDrawing() + rl.ClearBackground(rl.SkyBlue) + manager.Draw() + rl.EndDrawing() + } +} diff --git a/engine/Settings/Flags.go b/engine/Settings/Flags.go new file mode 100644 index 0000000..9f4039e --- /dev/null +++ b/engine/Settings/Flags.go @@ -0,0 +1,28 @@ +package settings + +import ( + "encoding/json" + "flag" + "fmt" +) + +type Flags struct { + SettingsFileLocation string +} + +var appliedFlags *Flags + +func (base Flags) String() string { + var outp, jsonErr = json.Marshal(base) + if jsonErr != nil { + return fmt.Sprintf("Failed to parse settings: %s", jsonErr.Error()) + } + return string(outp) +} + + +func readFlags() *Flags { + return &Flags { + SettingsFileLocation: *flag.String("c", "Config.json", "Configurtation file location"), + } +} diff --git a/engine/Settings/Settings.go b/engine/Settings/Settings.go new file mode 100644 index 0000000..05afe02 --- /dev/null +++ b/engine/Settings/Settings.go @@ -0,0 +1,78 @@ +package settings + +import ( + "encoding/json" + "fmt" + "os" +) + +type AppVersion struct { + MajorVersion uint + MinorVersion uint + Patch uint + IsBeta bool +} + +type Settings struct { + Version AppVersion +} + +var defaultSettings = Settings { + Version: AppVersion{ + MajorVersion: 0, + MinorVersion: 0, + Patch: 0, + IsBeta: true, + }, +} + +func (base Settings) String() string { + var outp, jsonErr = json.Marshal(base) + if jsonErr != nil { + return fmt.Sprintf("Failed to parse settings: %s", jsonErr.Error()) + } + return string(outp) +} + +var Current Settings = Settings{} + +func ReadSettings() { + appliedFlags = readFlags() + + var file, fopenerr = os.ReadFile(appliedFlags.SettingsFileLocation) + if fopenerr != nil { + var success, inintBody = createSettingsFile() + if success { + file = inintBody + } else { + panic(fmt.Sprintf("Unable to load or create settings file. \nOriginal error: %v\n", fopenerr.Error())) + } + } + var data = Settings{} + json.Unmarshal(file, &data) + var validationErr = data.Validate() + if validationErr != nil { + panic(fmt.Sprintf("Failed to load settings file: %s", validationErr.Error())) + } + Current = data +} + +func createSettingsFile() (bool, []byte ) { + var file, err = os.Create(readFlags().SettingsFileLocation) + if err != nil { + return false, nil + } + defer file.Close() + var inititalData = defaultSettings + var body, jsonerr = json.MarshalIndent(inititalData, "", " ") + if jsonerr != nil { + return false, nil + } + fmt.Fprint(file, string(body)) + return true, body +} + +// Returns an error with the issue description if the settings are invalid +func (base *Settings) Validate() error { + return nil +} diff --git a/engine/go.mod b/engine/go.mod new file mode 100644 index 0000000..f318073 --- /dev/null +++ b/engine/go.mod @@ -0,0 +1,10 @@ +module github.com/DegustatorPonos/RuinesOfRafdolon + +go 1.25.4 + +require ( + github.com/ebitengine/purego v0.9.1 // indirect + github.com/gen2brain/raylib-go/raylib v0.55.1 // indirect + golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect + golang.org/x/sys v0.39.0 // indirect +) diff --git a/engine/go.sum b/engine/go.sum new file mode 100644 index 0000000..91b100b --- /dev/null +++ b/engine/go.sum @@ -0,0 +1,8 @@ +github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A= +github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/gen2brain/raylib-go/raylib v0.55.1 h1:1rdc10WvvYjtj7qijHnV9T38/WuvlT6IIL+PaZ6cNA8= +github.com/gen2brain/raylib-go/raylib v0.55.1/go.mod h1:BaY76bZk7nw1/kVOSQObPY1v1iwVE1KHAGMfvI6oK1Q= +golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0= +golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= diff --git a/engine/main.go b/engine/main.go new file mode 100644 index 0000000..47e07b3 --- /dev/null +++ b/engine/main.go @@ -0,0 +1,18 @@ +package main + +import ( + coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects" + gameobjects "github.com/DegustatorPonos/RuinesOfRafdolon/GameObjects" + render "github.com/DegustatorPonos/RuinesOfRafdolon/Render" + settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" +) + +func main() { + settings.ReadSettings() + // TEMPORARY SECTION + var field = gameobjects.CreateField(8, 8) + + var manager = coreobjects.InitSceneManager() + render.InitWindow(manager, &field) +} + diff --git a/engine/tile.png b/engine/tile.png Binary files differnew file mode 100644 index 0000000..b7fefb2 --- /dev/null +++ b/engine/tile.png |
