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() }