import type { GameStateEvent } from './GameStateEvent'; import type { ButtonClickedEvent } from './ButtonClickedEvent'; import type { ChatEvent } from './ChatEvent'; import type { ClosePopupEvent } from './ClosePopupEvent'; import type { EnterLeaveEvent } from './EnterLeaveEvent'; import type { GoToPageEvent } from './GoToPageEvent'; import type { MenuItemClickedEvent } from './MenuItemClickedEvent'; import type { MenuItemRegisterEvent } from './MenuItemRegisterEvent'; import type { HasPlayerMovedEvent } from './HasPlayerMovedEvent'; import type { OpenCoWebSiteEvent } from './OpenCoWebSiteEvent'; import type { OpenPopupEvent } from './OpenPopupEvent'; import type { OpenTabEvent } from './OpenTabEvent'; import type { UserInputChatEvent } from './UserInputChatEvent'; import type { DataLayerEvent } from "./DataLayerEvent"; import type { LayerEvent } from './LayerEvent'; import type { SetPropertyEvent } from "./setPropertyEvent"; import type { TagEvent } from "./TagEvent"; import type { TilesetEvent } from "./TilesetEvent"; import type { UpdateTileEvent } from "./UpdateTileEvent"; export interface TypedMessageEvent extends MessageEvent { data: T } export type IframeEventMap = { getState: GameStateEvent, // updateTile: UpdateTileEvent registerMenuCommand: MenuItemRegisterEvent chat: ChatEvent, openPopup: OpenPopupEvent closePopup: ClosePopupEvent openTab: OpenTabEvent goToPage: GoToPageEvent openCoWebSite: OpenCoWebSiteEvent closeCoWebSite: null disablePlayerControls: null restorePlayerControls: null displayBubble: null removeBubble: null onPlayerMove: undefined showLayer: LayerEvent hideLayer: LayerEvent setProperty: SetPropertyEvent getDataLayer: undefined getTag: undefined tilesetEvent: TilesetEvent updateTileEvent: UpdateTileEvent } export interface IframeEvent { type: T; data: IframeEventMap[T]; } // eslint-disable-next-line @typescript-eslint/no-explicit-any export const isIframeEventWrapper = (event: any): event is IframeEvent => typeof event.type === 'string'; export interface IframeResponseEventMap { userInputChat: UserInputChatEvent enterEvent: EnterLeaveEvent leaveEvent: EnterLeaveEvent buttonClickedEvent: ButtonClickedEvent gameState: GameStateEvent hasPlayerMoved: HasPlayerMovedEvent dataLayer: DataLayerEvent menuItemClicked: MenuItemClickedEvent tagList: TagEvent } export interface IframeResponseEvent { type: T; data: IframeResponseEventMap[T]; } // eslint-disable-next-line @typescript-eslint/no-explicit-any export const isIframeResponseEventWrapper = (event: { type?: string }): event is IframeResponseEvent => typeof event.type === 'string';