odin-raylib-game/game/game.odin
2025-02-27 13:51:11 -06:00

90 lines
1.7 KiB
Odin

package game
import "core:fmt"
import rl "vendor:raylib"
import rand "core:math/rand"
import "core:strconv"
import "core:mem"
import "core:strings"
player : Player
world : World
main :: proc() {
rl.InitWindow(1280, 720, "Odin game")
flags : rl.ConfigFlags = {.VSYNC_HINT}
rl.SetConfigFlags(flags)
rl.SetTargetFPS(60)
player = {
position = {CELL_SIZE * 500, CELL_SIZE * 500},
camera = {
zoom = 2,
target = {player.position.x + (CELL_SIZE / 2), player.position.y + (CELL_SIZE / 2)},
offset = {f32(rl.GetScreenWidth()) / 2, f32(rl.GetScreenHeight()) / 2},
},
mode = .INTERACT,
}
load_tilemap()
defer unload_tilemap()
world = create_world("test_world")
load_nearby_chunks(&world, player.position)
set_tile(&world, tree_tile, {400,400})
save_world(&world)
game_loop()
}
game_loop :: proc() {
pos_string : string
pos_cstring : cstring
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))
status_string := rl.TextFormat("POS: %v : %v | MODE: %v", player_grid_pos, player_grid_pos_tile.type, player.mode)
rl.DrawText(status_string, 5, 25, 20, rl.RED)
rl.EndDrawing()
}
delete(pos_string)
delete(pos_cstring)
}
update :: proc() {
player_update(&player, &world)
}
draw :: proc() {
draw_world(&world)
draw_player(&player)
}