odin-raylib-game/game/world.odin

63 lines
1.3 KiB
Odin

package game
import rl "vendor:raylib"
import "core:fmt"
CELL_SIZE :: 16
WORLD_SIZE :: 100
World :: struct {
grid: [WORLD_SIZE][WORLD_SIZE]Tile
}
Tile :: struct {
type: TileType,
tilemap_pos:rl.Vector2,
color:rl.Color,
}
TileType :: enum {
NOTHING,
WALL,
DOOR,
FLOOR,
}
set_grid_tile :: proc(w:^World, pos:Vec2i, t:Tile) {
w.grid[pos.x][pos.y] = t
}
get_grid_tile :: proc(w: ^World, pos: Vec2i) -> Tile {
if pos.x < 0 || pos.x >= len(w.grid) || pos.y < 0 || pos.y >= len(w.grid[0]) {
// fmt.printfln("Target [%v] outside of world bounds", pos)
return w.grid[0][0] // Default or error tile
}
return w.grid[pos.x][pos.y]
}
fill_world_grid_with_nothing :: proc(w:^World) {
for x in 0..< len(w.grid) {
for y in 0..<len(w.grid) {
w.grid[x][y] = Tile {
type = .NOTHING,
tilemap_pos = {0,0}
}
}
}
}
draw_world :: proc(w:^World) {
for x in 0..< len(w.grid) {
for y in 0..< len(w.grid) {
tile := w.grid[x][y]
posX := x * TILE_SIZE
posY := y * TILE_SIZE
if tile.type != .NOTHING {
draw_tile(tile.tilemap_pos, {f32(posX), f32(posY)}, tile.color)
}
}
}
}