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) }