import type { UserInputManager } from "../Phaser/UserInput/UserInputManager"; import {HtmlUtils} from "./HtmlUtils"; export enum LayoutMode { // All videos are displayed on the right side of the screen. If there is a screen sharing, it is displayed in the middle. Presentation = "Presentation", // Videos take the whole page. VideoChat = "VideoChat", } export enum DivImportance { // For screen sharing Important = "Important", // For normal video Normal = "Normal", } export const ON_ACTION_TRIGGER_BUTTON = 'onaction'; export const TRIGGER_WEBSITE_PROPERTIES = 'openWebsiteTrigger'; export const TRIGGER_JITSI_PROPERTIES = 'jitsiTrigger'; export const WEBSITE_MESSAGE_PROPERTIES = 'openWebsiteTriggerMessage'; export const JITSI_MESSAGE_PROPERTIES = 'jitsiTriggerMessage'; export const AUDIO_VOLUME_PROPERTY = 'audioVolume'; export const AUDIO_LOOP_PROPERTY = 'audioLoop'; export type Box = {xStart: number, yStart: number, xEnd: number, yEnd: number}; class LayoutManager { private actionButtonTrigger: Map = new Map(); private actionButtonInformation: Map = new Map(); public addActionButton(id: string, text: string, callBack: Function, userInputManager: UserInputManager){ //delete previous element this.removeActionButton(id, userInputManager); //create div and text html component const p = document.createElement('p'); p.classList.add('action-body'); p.innerText = text; const div = document.createElement('div'); div.classList.add('action'); div.id = id; div.appendChild(p); this.actionButtonInformation.set(id, div); const mainContainer = HtmlUtils.getElementByIdOrFail('main-container'); mainContainer.appendChild(div); //add trigger action div.onpointerdown = () => callBack(); this.actionButtonTrigger.set(id, callBack); userInputManager.addSpaceEventListner(callBack); } public removeActionButton(id: string, userInputManager?: UserInputManager){ //delete previous element const previousDiv = this.actionButtonInformation.get(id); if(previousDiv){ previousDiv.remove(); this.actionButtonInformation.delete(id); } const previousEventCallback = this.actionButtonTrigger.get(id); if(previousEventCallback && userInputManager){ userInputManager.removeSpaceEventListner(previousEventCallback); } } public addInformation(id: string, text: string, callBack?: Function, userInputManager?: UserInputManager){ //delete previous element for ( const [key, value] of this.actionButtonInformation ) { this.removeActionButton(key, userInputManager); } //create div and text html component const p = document.createElement('p'); p.classList.add('action-body'); p.innerText = text; const div = document.createElement('div'); div.classList.add('action'); div.classList.add(id); div.id = id; div.appendChild(p); this.actionButtonInformation.set(id, div); const mainContainer = HtmlUtils.getElementByIdOrFail('main-container'); mainContainer.appendChild(div); //add trigger action if(callBack){ div.onpointerdown = () => { callBack(); this.removeActionButton(id, userInputManager); }; } //remove it after 10 sec setTimeout(() => { this.removeActionButton(id, userInputManager); }, 10000) } } const layoutManager = new LayoutManager(); export { layoutManager };