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 { 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 { 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 { 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 { ServerOverlay } from "./serveroverlay"; import { ImportExportModal } from "./modals/importexportmodal"; import { WarningModal } from "./modals/warningmodal"; import { TrainingModal } from "./modals/trainingmodal"; import { AdminModal } from "./modals/adminmodal"; export function UI() { const [appState, setAppState] = useState(OlympusState.NOT_INITIALIZED); const [appSubState, setAppSubState] = useState(NO_SUBSTATE as OlympusSubState); const [serverConnected, setServerConnected] = useState(false as boolean); 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); setServerConnected(status.connected); }); }, []); useEffect(() => { setupApp(); }); return (
{appState !== OlympusState.SERVER &&
}
{appState === OlympusState.SERVER && } {appState !== OlympusState.SERVER && ( <> )}
{appState !== OlympusState.SERVER && ( <> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} /> {/*} getApp().setState(OlympusState.IDLE)} /> getApp().setState(OlympusState.IDLE)} />{*/} )}
{!serverConnected && appState !== OlympusState.LOGIN && (
Olympus Logo
{!connectedOnce &&
Establishing connection
} {connectedOnce &&
Connection lost
} {!connectedOnce &&
Trying to connect with the server, please wait...
} {connectedOnce && (
Try reloading this page. However, this usually means that you internet connection is down, or that the server is offline, paused, or loading a new mission.
)}
)} {appState === OlympusState.NOT_INITIALIZED && (
Loading...
)}
); }