Files
siege-protocol/js/renderer.js
T
44r0n7 622a9fd170 Initial commit: Siege Protocol
Inverted tower-defense browser game — deploy enemies yourself, tower auto-kills them, pocket credits, upgrade weapons. HTML + Canvas + vanilla JS, no build step.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-16 11:36:53 -04:00

47 lines
1.4 KiB
JavaScript

// ═══ renderer.js ═══
// ============================================================
// RENDERER — draw order orchestration
// ============================================================
// ── MAIN RENDER ───────────────────────────────────────────────
function render() {
const W = canvas.width, H = canvas.height;
const cx = ARENA_CX, cy = ARENA_CY;
// Rebuild bg cache if size changed
if (!_bgCanvas || _bgW !== W || _bgH !== H) buildBackground(W, H);
// Blit cached background — O(1)
ctx.drawImage(_bgCanvas, 0, 0);
drawArenaRangeLine(cx, cy); // faint dashed ring at tower range
drawPortals();
drawAoeZones();
drawEnemyTrails();
drawEnemies();
drawProjectiles();
drawChainArcs();
drawBeams();
drawFog(cx, cy); // dim beyond tower range
drawTower(cx, cy);
drawShield(cx, cy);
drawParticles();
drawFloaters();
drawArenaMask(W, H, cx, cy); // solid dark outside arena circle
drawArenaRing(cx, cy); // glowing border ring
drawStreak(cx, cy);
clearHitRegions();
_mountDropZones.length = 0;
_bagDropZones.length = 0;
_dragRegions.length = 0;
drawHUD();
drawBrokeWarning();
drawSidePanel();
drawInventoryOverlay();
drawShopOverlay();
if (G.gameOver) drawGameOverPanel();
drawPauseOverlay();
drawMountInteraction(cx, cy);
drawDragGhost();
}