summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-06 18:53:57 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-06 18:53:57 +0500
commitd804d0467399c821a05832a96ae4780ef69fb1bf (patch)
tree69a51d854684625af082202f6687587d9343c10b
parent41a6f340e6d455444aecf216271a09cce192e0e9 (diff)
Project init
-rw-r--r--Makefile2
-rw-r--r--engine/Config.json8
-rw-r--r--engine/CoreObjects/Object.go8
-rw-r--r--engine/CoreObjects/OverlayScene.go60
-rw-r--r--engine/CoreObjects/Scene.go48
-rw-r--r--engine/GameObjects/World.go68
-rw-r--r--engine/Render/initWindow.go21
-rw-r--r--engine/Settings/Flags.go28
-rw-r--r--engine/Settings/Settings.go78
-rw-r--r--engine/go.mod10
-rw-r--r--engine/go.sum8
-rw-r--r--engine/main.go18
-rw-r--r--engine/tile.pngbin0 -> 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
new file mode 100644
index 0000000..b7fefb2
--- /dev/null
+++ b/engine/tile.png
Binary files differ