100 lines
2.0 KiB
Odin
100 lines
2.0 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
|
|
|
|
camera : rl.Camera2D
|
|
|
|
main :: proc() {
|
|
|
|
rl.InitWindow(1280, 720, "Odin game")
|
|
flags : rl.ConfigFlags = {.VSYNC_HINT}
|
|
rl.SetConfigFlags(flags)
|
|
|
|
rl.SetTargetFPS(60)
|
|
|
|
player.position.x = CELL_SIZE * 5
|
|
player.position.y = CELL_SIZE * 5
|
|
|
|
camera.target = {player.position.x + (CELL_SIZE / 2), player.position.y + (CELL_SIZE / 2)}
|
|
camera.zoom = 2
|
|
camera.offset = {f32(rl.GetScreenWidth()) / 2, f32(rl.GetScreenHeight()) / 2}
|
|
|
|
load_tilemap()
|
|
defer unload_tilemap()
|
|
|
|
fill_world_grid_with_nothing(&world)
|
|
|
|
place_random_trees(&world)
|
|
|
|
game_loop()
|
|
}
|
|
|
|
game_loop :: proc() {
|
|
|
|
pos_string : string
|
|
pos_cstring : cstring
|
|
|
|
for !rl.WindowShouldClose() {
|
|
|
|
update()
|
|
|
|
rl.BeginDrawing()
|
|
rl.ClearBackground(rl.BLACK)
|
|
rl.BeginMode2D(camera)
|
|
|
|
draw()
|
|
|
|
rl.EndMode2D()
|
|
|
|
rl.DrawFPS(5,5)
|
|
|
|
player_grid_pos := get_player_grid_position(&player)
|
|
player_grid_pos_tile := get_grid_tile(&world, vec2_to_vec2i(player_grid_pos))
|
|
pos_string := rl.TextFormat("POS: %v : %v", player_grid_pos, player_grid_pos_tile.type)
|
|
|
|
rl.DrawText(pos_string, 5, 25, 20, rl.RED)
|
|
|
|
|
|
rl.EndDrawing()
|
|
}
|
|
|
|
delete(pos_string)
|
|
delete(pos_cstring)
|
|
}
|
|
|
|
update :: proc() {
|
|
|
|
handle_player_input(&player, &world)
|
|
handle_window_resize()
|
|
camera.target = {player.position.x + (CELL_SIZE / 2), player.position.y + (CELL_SIZE / 2)}
|
|
|
|
}
|
|
|
|
draw :: proc() {
|
|
draw_world(&world)
|
|
draw_player(&player)
|
|
}
|
|
|
|
handle_window_resize :: proc() {
|
|
if rl.IsWindowResized() {
|
|
camera.offset = {f32(rl.GetScreenWidth()) / 2, f32(rl.GetScreenHeight()) / 2}
|
|
}
|
|
}
|
|
|
|
print_grid :: proc() {
|
|
for x in 0..< len(world.grid) {
|
|
for y in 0..< len(world.grid) {
|
|
fmt.printfln("[%d, %d] %v", x, y, world.grid[x][y].type)
|
|
}
|
|
}
|
|
}
|