94 lines
2.4 KiB
Odin
94 lines
2.4 KiB
Odin
package game
|
|
|
|
import "core:fmt"
|
|
import rl "vendor:raylib"
|
|
import "core:os"
|
|
|
|
|
|
player : Player
|
|
world : World
|
|
|
|
main :: proc() {
|
|
if !os.is_dir("data") {
|
|
os.make_directory("data")
|
|
}
|
|
|
|
if !os.is_dir("data/worlds") {
|
|
os.make_directory("data/worlds")
|
|
}
|
|
|
|
rl.InitWindow(1280, 720, "Odin game")
|
|
|
|
flags : rl.ConfigFlags = {.VSYNC_HINT}
|
|
rl.SetConfigFlags(flags)
|
|
|
|
rl.SetTargetFPS(60)
|
|
|
|
player = {
|
|
position = {CELL_SIZE * 0, CELL_SIZE * 0},
|
|
camera = {
|
|
zoom = 4,
|
|
target = {player.position.x + (CELL_SIZE / 2), player.position.y + (CELL_SIZE / 2)},
|
|
offset = {f32(rl.GetScreenWidth()) / 2, f32(rl.GetScreenHeight()) / 2},
|
|
},
|
|
mode = .INTERACT,
|
|
speed = 1,
|
|
}
|
|
|
|
load_tilemap()
|
|
defer unload_tilemap()
|
|
|
|
world = create_world("test_world", 10172020)
|
|
save_world(&world)
|
|
|
|
game_loop()
|
|
}
|
|
|
|
game_loop :: proc() {
|
|
|
|
|
|
for !rl.WindowShouldClose() {
|
|
|
|
update()
|
|
|
|
rl.BeginDrawing()
|
|
rl.ClearBackground(rl.BLACK)
|
|
rl.BeginMode2D(player.camera)
|
|
|
|
draw()
|
|
|
|
rl.EndMode2D()
|
|
|
|
rl.DrawFPS(5,5)
|
|
|
|
player_grid_pos := get_player_grid_position(&player)
|
|
player_grid_pos_tile := get_world_tile(&world, vec2_to_vec2i(player_grid_pos))
|
|
current_chunk := get_chunk_from_world_pos(&world, player_grid_pos)
|
|
status_string := rl.TextFormat("POS: [%i,%i] : %v | Chunk: [%i,%i] : %v | MODE: %v", int(player_grid_pos.x), int(player_grid_pos.y), player_grid_pos_tile.type, current_chunk.position.x, current_chunk.position.y, get_biome_from_id(current_chunk.biome_id).name, player.mode)
|
|
pos_string := rl.TextFormat("Actual pos: %v", player.position)
|
|
rl.DrawText(status_string, 5, 25, 20, rl.RED)
|
|
|
|
// Debug: Draw collision check position
|
|
target_pos := player_grid_pos
|
|
chunk_pos := world_pos_to_chunk_pos(player_grid_pos)
|
|
local_pos := get_local_chunk_pos(vec2_to_vec2i(player_grid_pos))
|
|
format_string := rl.TextFormat("Grid: (%.0f,%.0f) Chunk: (%d,%d) Local: (%d,%d)",
|
|
player_grid_pos.x, player_grid_pos.y,
|
|
chunk_pos.x, chunk_pos.y,
|
|
local_pos.x, local_pos.y)
|
|
rl.DrawText(format_string, 10, 45, 20, rl.YELLOW)
|
|
|
|
rl.EndDrawing()
|
|
}
|
|
}
|
|
|
|
update :: proc() {
|
|
player_update(&player, &world)
|
|
}
|
|
|
|
draw :: proc() {
|
|
draw_world(&world)
|
|
draw_player(&player)
|
|
}
|
|
|