import React, { useEffect, useState } from "react"; import "./ui.css"; import { Header } from "./panels/header"; import { SpawnMenu } from "./panels/spawnmenu"; import { UnitControlMenu } from "./panels/unitcontrolmenu"; import { MainMenu } from "./panels/mainmenu"; import { SideBar } from "./panels/sidebar"; import { OptionsMenu } from "./panels/optionsmenu"; import { MapHiddenTypes, MapOptions } from "../types/types"; import { NO_SUBSTATE, OlympusState, OlympusSubState, OptionsSubstate, UnitControlSubState } from "../constants/constants"; import { getApp, setupApp } from "../olympusapp"; import { LoginModal } from "./modals/loginmodal"; import { MiniMapPanel } from "./panels/minimappanel"; import { MapToolBar } from "./panels/maptoolbar"; import { DrawingMenu } from "./panels/drawingmenu"; import { ControlsPanel } from "./panels/controlspanel"; import { MapContextMenu } from "./contextmenus/mapcontextmenu"; import { AirbaseMenu } from "./panels/airbasemenu"; import { AudioMenu } from "./panels/audiomenu"; import { FormationMenu } from "./panels/formationmenu"; import { ProtectionPromptModal } from "./modals/protectionpromptmodal"; import { KeybindModal } from "./modals/keybindmodal"; import { UnitExplosionMenu } from "./panels/unitexplosionmenu"; import { JTACMenu } from "./panels/jtacmenu"; import { AppStateChangedEvent, ServerStatusUpdatedEvent } from "../events"; import { GameMasterMenu } from "./panels/gamemastermenu"; import { InfoBar } from "./panels/infobar"; import { HotGroupBar } from "./panels/hotgroupsbar"; import { SpawnContextMenu } from "./contextmenus/spawncontextmenu"; import { CoordinatesPanel } from "./panels/coordinatespanel"; import { RadiosSummaryPanel } from "./panels/radiossummarypanel"; import { AWACSMenu } from "./panels/awacsmenu"; import { ServerOverlay } from "./serveroverlay"; import { ImportExportModal } from "./modals/importexportmodal"; import { WarningModal } from "./modals/warningmodal"; import { ServerStatus } from "../interfaces"; export type OlympusUIState = { mainMenuVisible: boolean; spawnMenuVisible: boolean; unitControlMenuVisible: boolean; measureMenuVisible: boolean; drawingMenuVisible: boolean; optionsMenuVisible: boolean; airbaseMenuVisible: boolean; mapHiddenTypes: MapHiddenTypes; mapOptions: MapOptions; }; export function UI() { const [appState, setAppState] = useState(OlympusState.NOT_INITIALIZED); const [appSubState, setAppSubState] = useState(NO_SUBSTATE as OlympusSubState); const [serverStatus, setServerStatus] = useState({} as ServerStatus); const [connectedOnce, setConnectedOnce] = useState(false); useEffect(() => { AppStateChangedEvent.on((state, subState) => { setAppState(state); setAppSubState(subState); }); ServerStatusUpdatedEvent.on((status) => { // If we connected at least once, record it if (status.connected) setConnectedOnce(true); setServerStatus(status); }); }, []); useEffect(() => { setupApp(); }); return (