import { Colord } from "colord"; import { html, LitElement } from "lit"; import { customElement, state } from "lit/decorators.js"; import { assetUrl } from "../../../core/AssetUrls"; import { EventBus } from "../../../core/EventBus"; import { GameMode, Team } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; import { Controller } from "../../Controller"; import { Platform } from "../../Platform"; import { getTranslatedPlayerTeamLabel, translateText } from "../../Utils"; import { ImmunityBarVisibleEvent } from "./ImmunityTimer"; import { SpawnBarVisibleEvent } from "./SpawnTimer"; const leaderboardRegularIcon = assetUrl( "images/LeaderboardIconRegularWhite.svg", ); const leaderboardSolidIcon = assetUrl("images/LeaderboardIconSolidWhite.svg"); const teamRegularIcon = assetUrl("images/TeamIconRegularWhite.svg"); const teamSolidIcon = assetUrl("images/TeamIconSolidWhite.svg"); @customElement("game-left-sidebar") export class GameLeftSidebar extends LitElement implements Controller { @state() private isLeaderboardShow = false; @state() private isTeamLeaderboardShow = false; @state() private isVisible = false; @state() private isPlayerTeamLabelVisible = false; @state() private playerTeam: Team | null = null; @state() private spawnBarVisible = false; @state() private immunityBarVisible = false; private playerColor: Colord = new Colord("#FFFFFF"); public game: GameView; public eventBus: EventBus; private _shownOnInit = false; createRenderRoot() { return this; } init() { this.isVisible = true; this.eventBus.on(SpawnBarVisibleEvent, (e) => { this.spawnBarVisible = e.visible; }); this.eventBus.on(ImmunityBarVisibleEvent, (e) => { this.immunityBarVisible = e.visible; }); if (this.isTeamGame) { this.isPlayerTeamLabelVisible = true; } // Make it visible by default on large screens if (Platform.isDesktopWidth) { // lg breakpoint this._shownOnInit = true; } this.requestUpdate(); } tick() { if (!this.playerTeam && this.game.myPlayer()?.team()) { this.playerTeam = this.game.myPlayer()!.team(); if (this.playerTeam) { this.playerColor = this.game .config() .theme() .teamColor(this.playerTeam); this.requestUpdate(); } } if (this._shownOnInit && !this.game.inSpawnPhase()) { this._shownOnInit = false; this.isLeaderboardShow = true; this.requestUpdate(); } if (!this.game.inSpawnPhase() && this.isPlayerTeamLabelVisible) { this.isPlayerTeamLabelVisible = false; this.requestUpdate(); } } private get barOffset(): number { return (this.spawnBarVisible ? 7 : 0) + (this.immunityBarVisible ? 7 : 0); } private toggleLeaderboard(): void { this.isLeaderboardShow = !this.isLeaderboardShow; } private toggleTeamLeaderboard(): void { this.isTeamLeaderboardShow = !this.isTeamLeaderboardShow; } private get isTeamGame(): boolean { return this.game?.config().gameConfig().gameMode === GameMode.Team; } render() { return html` `; } }