summaryrefslogtreecommitdiff
path: root/engine/Components/World
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-07 02:42:09 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-07 02:42:09 +0500
commitb2895f2e9f64cf7cc593130980747b045f6abee8 (patch)
treeb1b3862bf835050bfbab573288248de37d5a0d2e /engine/Components/World
parent284b235a8f7672090bc4f31e56d451bb21d8ee55 (diff)
Build system + world gen settings
Diffstat (limited to 'engine/Components/World')
-rw-r--r--engine/Components/World/Descriptor.go29
-rw-r--r--engine/Components/World/Tile.go31
-rw-r--r--engine/Components/World/World.go62
3 files changed, 122 insertions, 0 deletions
diff --git a/engine/Components/World/Descriptor.go b/engine/Components/World/Descriptor.go
new file mode 100644
index 0000000..553aa5b
--- /dev/null
+++ b/engine/Components/World/Descriptor.go
@@ -0,0 +1,29 @@
+package world
+
+import rl "github.com/gen2brain/raylib-go/raylib"
+
+type Descriptor struct {
+ TileSize rl.Vector2
+ Textures map[int]string `json:"textures"`
+ WorldMap [][]TileDescriptor `json:"worldmap"`
+}
+
+func (base *Descriptor) GenerateMap() *World {
+ var outp = &World {
+ TileSize: base.TileSize,
+ TextureNames: base.Textures,
+ Tiles: make([][]Tile, len(base.WorldMap)),
+ }
+ for x := range base.WorldMap {
+ outp.Tiles[x] = make([]Tile, len(base.WorldMap[x]))
+ for y, tile := range base.WorldMap[x] {
+ outp.Tiles[x][y] = &StandardTile {
+ X: float32(x),
+ Y: float32(y),
+ ParentWorld: outp,
+ Descriptor: tile,
+ }
+ }
+ }
+ return outp
+}
diff --git a/engine/Components/World/Tile.go b/engine/Components/World/Tile.go
new file mode 100644
index 0000000..203d40d
--- /dev/null
+++ b/engine/Components/World/Tile.go
@@ -0,0 +1,31 @@
+package world
+
+import rl "github.com/gen2brain/raylib-go/raylib"
+
+// The square that will be displayed at the screen
+type Tile interface {
+ Update()
+ Draw()
+}
+
+type StandardTile struct {
+ X float32
+ Y float32
+ ParentWorld *World
+ Descriptor TileDescriptor
+}
+
+func (base *StandardTile) Update() {
+}
+
+func (base *StandardTile) Draw() {
+ rl.DrawTexture(base.ParentWorld.Textures[base.Descriptor.TextureId],
+ int32(base.X) * int32(base.ParentWorld.TileSize.X),
+ int32(base.Y) * int32(base.ParentWorld.TileSize.Y),
+ rl.White)
+}
+
+
+type TileDescriptor struct {
+ TextureId int `json:"textureid"`
+}
diff --git a/engine/Components/World/World.go b/engine/Components/World/World.go
new file mode 100644
index 0000000..47f776a
--- /dev/null
+++ b/engine/Components/World/World.go
@@ -0,0 +1,62 @@
+package world
+
+import (
+ coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
+ rl "github.com/gen2brain/raylib-go/raylib"
+)
+
+var Texture rl.Texture2D
+
+// The scene full of tiles
+type World struct {
+ TileSize rl.Vector2
+ TextureNames map[int]string
+ Textures map[int]rl.Texture2D
+ Tiles [][]Tile
+ Camera rl.Camera2D
+}
+
+func (base *World) Create(_ coreobjects.SceneManager) {
+ base.Textures = map[int]rl.Texture2D{}
+ for k, v := range base.TextureNames {
+ var image = rl.LoadImage(v)
+ base.Textures[k] = 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 *World) Destroy() {
+ rl.UnloadTexture(Texture)
+}
+
+func (base *World) 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 *World) Draw() {
+ rl.BeginMode2D(base.Camera)
+ defer rl.EndMode2D()
+
+ for _, r := range base.Tiles {
+ for _, v := range r {
+ v.Draw()
+ }
+ }
+}