import { LitElement, html, css } from "lit"; import { gameStateManager } from "../core/GameStateManager.js"; import { GameLoop } from "../core/GameLoop.js"; import "./deployment-hud.js"; import "./dialogue-overlay.js"; import "./combat-hud.js"; export class GameViewport extends LitElement { static styles = css` :host { display: block; width: 100%; height: 100%; overflow: hidden; } #canvas-container { width: 100%; height: 100%; } `; static get properties() { return { squad: { type: Array }, deployedIds: { type: Array }, }; } constructor() { super(); this.squad = []; this.deployedIds = []; } #handleUnitSelected(event) { const unit = event.detail.unit; const index = this.squad.indexOf(unit); gameStateManager.gameLoop.selectDeploymentUnit(index); } #handleStartBattle() { if (gameStateManager.gameLoop) { gameStateManager.gameLoop.finalizeDeployment(); } } async firstUpdated() { const container = this.shadowRoot.getElementById("canvas-container"); const loop = new GameLoop(); loop.init(container); gameStateManager.setGameLoop(loop); this.squad = await gameStateManager.rosterLoaded; } render() { return html`
`; } } customElements.define("game-viewport", GameViewport);