import type { Client } from "$/client/client.ts"; import { begin_mode_3d, end_mode_3d } from "$/client/renderer/mod.ts"; import { Hud } from "$/client/gui/hud.ts"; import { DebugOverlay } from "$/client/gui/debug_overlay.ts"; import { LevelRenderer } from "./level_renderer.ts"; // draws a frame, like minecraft's GameRenderer: the level from the camera, then the hud and screens on top export class GameRenderer { level_renderer = new LevelRenderer(); hud = new Hud(); debug_overlay = new DebugOverlay(); render(client: Client) { const camera = client.camera; camera.setup(client.player); begin_mode_3d(camera); this.level_renderer.render_opaque(client.level, camera); this.level_renderer.render_destroy_progress(client.game_mode); this.level_renderer.render_entities(client.level, client.player); this.level_renderer.render_translucent(client.level, camera); end_mode_3d(); this.hud.render(client); client.screen?.on_render(); if (client.debugging) { this.debug_overlay.render(client); } } }