Files

63 lines
1.4 KiB
Odin

package game
import rl "vendor:raylib"
game_target: rl.RenderTexture2D
init_display :: proc() {
rl.InitWindow(DEFAULT_WINDOW_W, DEFAULT_WINDOW_H, "Tower Defense")
rl.SetWindowState({.WINDOW_RESIZABLE})
rl.SetTargetFPS(60)
game_target = rl.LoadRenderTexture(i32(SCREEN_W), i32(SCREEN_H))
}
shutdown_display :: proc() {
rl.UnloadRenderTexture(game_target)
}
update_display :: proc() {
if rl.IsKeyPressed(.F11) {
rl.ToggleFullscreen()
}
}
game_viewport_dest :: proc() -> rl.Rectangle {
sw := f32(rl.GetRenderWidth())
sh := f32(rl.GetRenderHeight())
scale := min(sw / f32(SCREEN_W), sh / f32(SCREEN_H))
dw := f32(SCREEN_W) * scale
dh := f32(SCREEN_H) * scale
return {x = (sw - dw) * 0.5, y = (sh - dh) * 0.5, width = dw, height = dh}
}
game_mouse :: proc() -> rl.Vector2 {
m := rl.GetMousePosition()
dest := game_viewport_dest()
if dest.width <= 0 || dest.height <= 0 {
return m
}
return {
(m.x - dest.x) / dest.width * f32(SCREEN_W),
(m.y - dest.y) / dest.height * f32(SCREEN_H),
}
}
begin_game_draw :: proc() {
rl.BeginTextureMode(game_target)
rl.ClearBackground(rl.Color{34, 139, 34, 255})
}
end_game_draw :: proc() {
rl.EndTextureMode()
rl.BeginDrawing()
rl.ClearBackground(rl.BLACK)
dest := game_viewport_dest()
source := rl.Rectangle{0, 0, f32(SCREEN_W), -f32(SCREEN_H)}
rl.DrawTexturePro(game_target.texture, source, dest, {}, 0, rl.WHITE)
rl.EndDrawing()
}