import React, { useEffect, useState } from "react"; import "./ui.css"; import { EventsProvider } from "../eventscontext"; import { StateProvider } from "../statecontext"; 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 { Options } from "./panels/options"; import { MapHiddenTypes, MapOptions } from "../types/types"; import { BLUE_COMMANDER, CONTEXT_ACTION, GAME_MASTER, IDLE, MAP_HIDDEN_TYPES_DEFAULTS, MAP_OPTIONS_DEFAULTS, RED_COMMANDER } from "../constants/constants"; import { getApp, setupApp } from "../olympusapp"; import { LoginModal } from "./modals/login"; import { sha256 } from "js-sha256"; import { MiniMapPanel } from "./panels/minimappanel"; import { UnitMouseControlBar } from "./panels/unitmousecontrolbar"; import { DrawingMenu } from "./panels/drawingmenu"; import { ControlsPanel } from "./panels/controls"; import { MapContextMenu } from "./contextmenus/mapcontextmenu"; export type OlympusState = { mainMenuVisible: boolean; spawnMenuVisible: boolean; unitControlMenuVisible: boolean; measureMenuVisible: boolean; drawingMenuVisible: boolean; optionsMenuVisible: boolean; mapHiddenTypes: MapHiddenTypes; mapOptions: MapOptions; }; export function UI() { const [loginModalVisible, setLoginModalVisible] = useState(true); const [mainMenuVisible, setMainMenuVisible] = useState(false); const [spawnMenuVisible, setSpawnMenuVisible] = useState(false); const [unitControlMenuVisible, setUnitControlMenuVisible] = useState(false); const [measureMenuVisible, setMeasureMenuVisible] = useState(false); const [drawingMenuVisible, setDrawingMenuVisible] = useState(false); const [optionsMenuVisible, setOptionsMenuVisible] = useState(false); const [mapHiddenTypes, setMapHiddenTypes] = useState(MAP_HIDDEN_TYPES_DEFAULTS); const [mapOptions, setMapOptions] = useState(MAP_OPTIONS_DEFAULTS); const [checkingPassword, setCheckingPassword] = useState(false); const [loginError, setLoginError] = useState(false); const [commandMode, setCommandMode] = useState(null as null | string); const [mapSources, setMapSources] = useState([] as string[]); const [activeMapSource, setActiveMapSource] = useState(""); const [mapState, setMapState] = useState(IDLE); useEffect(() => { document.addEventListener("hiddenTypesChanged", (ev) => { setMapHiddenTypes({ ...getApp().getMap().getHiddenTypes() }); }); document.addEventListener("mapOptionsChanged", (ev) => { setMapOptions({ ...getApp().getMap().getOptions() }); }); document.addEventListener("mapStateChanged", (ev) => { if ((ev as CustomEvent).detail === IDLE) hideAllMenus(); else if ((ev as CustomEvent).detail === CONTEXT_ACTION) setUnitControlMenuVisible(true); setMapState(String((ev as CustomEvent).detail)); }); document.addEventListener("mapSourceChanged", (ev) => { var source = (ev as CustomEvent).detail; setActiveMapSource(source); }); document.addEventListener("configLoaded", (ev) => { let config = getApp().getConfig(); var sources = Object.keys(config.mapMirrors).concat(Object.keys(config.mapLayers)); setMapSources(sources); setActiveMapSource(sources[0]); }); }, []); function hideAllMenus() { setMainMenuVisible(false); setSpawnMenuVisible(false); setUnitControlMenuVisible(false); setMeasureMenuVisible(false); setDrawingMenuVisible(false); setOptionsMenuVisible(false); } function checkPassword(password: string) { setCheckingPassword(true); var hash = sha256.create(); getApp().getServerManager().setPassword(hash.update(password).hex()); getApp() .getServerManager() .getMission( (response) => { const commandMode = response.mission.commandModeOptions.commandMode; try { [GAME_MASTER, BLUE_COMMANDER, RED_COMMANDER].includes(commandMode) ? setCommandMode(commandMode) : setLoginError(true); } catch { setLoginError(true); } setCheckingPassword(false); }, () => { setLoginError(true); setCheckingPassword(false); } ); } function connect(username: string) { getApp().getServerManager().setUsername(username); getApp().getServerManager().startUpdate(); setLoginModalVisible(false); } /* Temporary during devel */ //useEffect(() => { // window.setTimeout(() => { // checkPassword("admin"); // connect("devel"); // }, 1000) //}, []) return (