// ========================================== // GLOBALE STATUS VARIABLEN // ========================================== // --- KONFIGURATION & FLAGS --- let gameConfig = null; // Wird von /api/config geladen let isLoaded = false; // Sind Assets geladen? let isGameRunning = false; // Läuft der Game Loop? let isGameOver = false; // Ist der Spieler tot? let sessionID = null; // UUID der aktuellen Session (vom Server) // --- NETZWERK & STREAMING --- let socket = null; // WebSocket Verbindung let obstacleBuffer = []; // Warteschlange Hindernisse (vom Server) let platformBuffer = []; // Warteschlange Plattformen (vom Server) // --- LATENZ & SYNC --- let currentLatencyMs = 0; // Gemessene One-Way Latenz let pingInterval = null; // Interval ID für den Ping-Loop // --- PIXI JS (RENDERING) --- let app = null; // Die Pixi Application let bgLayer = null; // Container: Hintergrund let gameLayer = null; // Container: Spielwelt (Player, Items) let debugLayer = null; // Graphics: Hitboxen // --- CACHING (PIXI SPRITES) --- // Map // Wir ordnen jedem Logik-Objekt ein festes Sprite zu, statt neu zu erstellen const spriteCache = new Map(); const platformCache = new Map(); // Referenzen für statische Sprites let pixiPlayer = null; let bgSprite = null; // --- SPIELZUSTAND --- let score = 0; // Aktueller Score let currentTick = 0; // Zeitbasis (Synchronisiert mit Server) // --- POWERUPS (Client Visuals) --- let godModeLives = 0; let hasBat = false; let bootTicks = 0; // --- HINTERGRUND LOGIK --- let maxRawBgIndex = 0; // Welches BG Bild ist dran? // --- GAME LOOP TIMING --- let lastTime = 0; let accumulator = 0; // --- GRAFIKEN & EFFEKTE --- let particles = []; // Array für Partikel-Effekte // --- ENTITIES (Render-Listen) --- let player = { x: 50, y: 300, w: 30, h: 50, color: "red", vy: 0, grounded: false, // WICHTIG für Interpolation: prevY: 300 }; // Diese Listen werden von logic.js gefüllt und von render.js gezeichnet let obstacles = []; let platforms = []; // Debug-Daten vom Server (für das Overlay) let serverObstacles = []; let serverPlatforms = []; // --- INPUT STATE --- let isCrouching = false; // ========================================== // HTML ELEMENTE (DOM Caching) // ========================================== const container = document.getElementById('game-container'); // Hinweis: 'canvas' und 'ctx' gibt es nicht mehr, da PixiJS das verwaltet! // UI Elemente const startScreen = document.getElementById('startScreen'); const startBtn = document.getElementById('startBtn'); const loadingText = document.getElementById('loadingText'); const gameOverScreen = document.getElementById('gameOverScreen'); const scoreDisplay = document.getElementById('score'); const highscoreDisplay = document.getElementById('localHighscore');