support full screen gameplay
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user