diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | engine/Components/World/Descriptor.go | 29 | ||||
| -rw-r--r-- | engine/Components/World/Tile.go | 31 | ||||
| -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) | bin | 377 -> 377 bytes | |||
| -rw-r--r-- | engine/assets/water.png | bin | 0 -> 384 bytes | |||
| -rw-r--r-- | engine/main.go | 70 |
8 files changed, 149 insertions, 28 deletions
@@ -1,3 +1,4 @@ # build result RuinesOfRafdolon Config.json +bin @@ -1,7 +1,9 @@ all: cd engine; go build . - ln -f engine/Config.json . - ln -f engine/RuinesOfRafdolon . + mkdir -p bin + ln -f engine/Config.json bin + ln -fs ../engine/assets bin + ln -f engine/RuinesOfRafdolon bin run: cd engine; go run . 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 Binary files differindex b7fefb2..b7fefb2 100644 --- a/engine/tile.png +++ b/engine/assets/tile.png diff --git a/engine/assets/water.png b/engine/assets/water.png Binary files differnew file mode 100644 index 0000000..f1e9fed --- /dev/null +++ b/engine/assets/water.png 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, + } +} |
