63 lines
1.4 KiB
Odin
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()
|
|
}
|
|
|