summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/Components/World/Descriptor.go29
-rw-r--r--engine/Components/World/Tile.go31
-rw-r--r--engine/Components/World/World.go (renamed from engine/Components/World.go)40
-rw-r--r--engine/assets/tile.png (renamed from engine/tile.png)bin377 -> 377 bytes
-rw-r--r--engine/assets/water.pngbin0 -> 384 bytes
-rw-r--r--engine/main.go70
6 files changed, 144 insertions, 26 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.go b/engine/Components/World/World.go
index 015805d..47f776a 100644
--- a/engine/Components/World.go
+++ b/engine/Components/World/World.go
@@ -1,25 +1,29 @@
-package components
+package world
import (
coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
rl "github.com/gen2brain/raylib-go/raylib"
)
-var texture rl.Texture2D
-
-type Tile struct {
-}
+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) {
- var image = rl.LoadImage("tile.png")
- texture = rl.LoadTextureFromImage(image)
- rl.UnloadImage(image)
-
+ 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 }
@@ -28,7 +32,7 @@ func (base *World) Create(_ coreobjects.SceneManager) {
}
func (base *World) Destroy() {
- rl.UnloadTexture(texture)
+ rl.UnloadTexture(Texture)
}
func (base *World) Update() {
@@ -50,19 +54,9 @@ func (base *World) 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)
+ for _, r := range base.Tiles {
+ for _, v := range r {
+ v.Draw()
}
}
}
-
-func CreateWorld(x int, y int) World {
- var tiles = make([][]Tile, x)
- for i := range tiles {
- tiles[i] = make([]Tile, y)
- }
- return World {
- Tiles: tiles,
- }
-}
diff --git a/engine/tile.png b/engine/assets/tile.png
index b7fefb2..b7fefb2 100644
--- a/engine/tile.png
+++ b/engine/assets/tile.png
Binary files differ
diff --git a/engine/assets/water.png b/engine/assets/water.png
new file mode 100644
index 0000000..f1e9fed
--- /dev/null
+++ b/engine/assets/water.png
Binary files differ
diff --git a/engine/main.go b/engine/main.go
index 8d11769..86d3b2f 100644
--- a/engine/main.go
+++ b/engine/main.go
@@ -1,18 +1,82 @@
package main
import (
- components "github.com/DegustatorPonos/RuinesOfRafdolon/Components"
+ world "github.com/DegustatorPonos/RuinesOfRafdolon/Components/World"
coreobjects "github.com/DegustatorPonos/RuinesOfRafdolon/CoreObjects"
render "github.com/DegustatorPonos/RuinesOfRafdolon/Render"
settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
+ rl "github.com/gen2brain/raylib-go/raylib"
)
func main() {
settings.ReadSettings()
// TEMPORARY SECTION
- var field = components.CreateWorld(8, 8)
+ var descriptor = world.Descriptor {
+ TileSize: rl.Vector2 { X: 32, Y: 32 },
+ Textures: map[int]string{
+ 0: "assets/tile.png",
+ 1: "assets/water.png",
+ },
+ WorldMap: [][]world.TileDescriptor {
+ []world.TileDescriptor {
+ world.TileDescriptor{
+ TextureId: 0,
+ },
+ world.TileDescriptor{
+ TextureId: 0,
+ },
+ },
+ []world.TileDescriptor {
+ world.TileDescriptor{
+ TextureId: 1,
+ },
+ world.TileDescriptor{
+ TextureId: 1,
+ },
+ },
+ },
+ }
+
+ // var field = CreateWorld(8, 8)
+ var field = descriptor.GenerateMap()
var manager = coreobjects.InitSceneManager()
- render.InitWindow(manager, &field)
+ 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,
+ }
+}