diff --git a/frontend/react/src/map/drawings/drawingsmanager.ts b/frontend/react/src/map/drawings/drawingsmanager.ts index 108bda5e..19f739f7 100644 --- a/frontend/react/src/map/drawings/drawingsmanager.ts +++ b/frontend/react/src/map/drawings/drawingsmanager.ts @@ -1,9 +1,10 @@ import { decimalToRGBA } from "../../other/utils"; import { getApp } from "../../olympusapp"; -import { DrawingsInitEvent, DrawingsUpdatedEvent, MapOptionsChangedEvent, SessionDataLoadedEvent } from "../../events"; +import { CommandModeOptionsChangedEvent, DrawingsInitEvent, DrawingsUpdatedEvent, MapOptionsChangedEvent, SessionDataLoadedEvent } from "../../events"; import { MapOptions } from "../../types/types"; import { Circle, DivIcon, Layer, LayerGroup, layerGroup, Marker, Polygon, Polyline } from "leaflet"; import { NavpointMarker } from "../markers/navpointmarker"; +import { BLUE_COMMANDER, GAME_MASTER, NONE, RED_COMMANDER } from "../../constants/constants"; export abstract class DCSDrawing { #name: string; @@ -582,12 +583,6 @@ export class DCSDrawingsContainer { if (othersContainer.getDrawings().length === 0) this.removeSubContainer(othersContainer); // Remove empty container } - // initNavpoints(drawingsData) { - // const newContainer = new DCSDrawingsContainer('Navpoints', this); - // this.addSubContainer(newContainer); - // newContainer.initFromData(drawingsData); - // } - getLayerGroup() { return this.#layerGroup; } @@ -705,6 +700,7 @@ export class DrawingsManager { #sessionDataDrawings = {}; #sessionDataNavpoints = {}; #initialized: boolean = false; + #hiddenContainers: Record = {}; constructor() { const drawingsLayerGroup = new LayerGroup(); @@ -727,6 +723,13 @@ export class DrawingsManager { this.#drawingsContainer.setVisibility(getApp().getMap().getOptions().showMissionDrawings); this.#navpointsContainer.setVisibility(getApp().getMap().getOptions().showMissionNavpoints); }); + + CommandModeOptionsChangedEvent.on((commandOptions) => { + if (commandOptions.commandMode !== GAME_MASTER) { + this.restrictCoalitionLayers(commandOptions.commandMode) + } + this.restoreHiddenLayers(commandOptions.commandMode); + }) } initDrawings(data: { drawings: Record> }): boolean { @@ -747,6 +750,53 @@ export class DrawingsManager { } } + private restrictContainer(containerName: string, targetContainer: any, hiddenKey: string) { + const container = targetContainer.getSubContainers().find(c => c.getName().toLowerCase() === containerName.toLowerCase()); + if (container) { + this.#hiddenContainers[hiddenKey] = { + parent: container['#parent'], + container: container + }; + container.setVisibility(false); + targetContainer.removeSubContainer(container); + } + } + + restrictCoalitionLayers(playerRole: string) { + if (playerRole === RED_COMMANDER) { + this.restrictContainer('Blue', this.#drawingsContainer, 'blue_drawings'); + this.restrictContainer('blue', this.#navpointsContainer, 'blue_navpoints'); + } else { + this.restrictContainer('Red', this.#drawingsContainer, 'red_drawings'); + this.restrictContainer('red', this.#navpointsContainer, 'red_navpoints'); + } + } + + private restoreContainer(key: string, targetContainer: any) { + if (this.#hiddenContainers[key]) { + console.log('this.#hiddenContainers[key] esiste ', this.#hiddenContainers); + + const container = this.#hiddenContainers[key].container; + targetContainer.addSubContainer(container); + container.setVisibility(true); + } + } + + restoreHiddenLayers(playerRole: string) { + console.log('--- restoring hidden layers for role ', playerRole); + + const roleContainers: Record = { + [RED_COMMANDER]: ['red_drawings', 'red_navpoints'], + [BLUE_COMMANDER]: ['blue_drawings', 'blue_navpoints'], + [GAME_MASTER]: ['red_drawings', 'red_navpoints', 'blue_drawings', 'blue_navpoints'] + }; + + roleContainers[playerRole]?.forEach((key) => { + const targetContainer = key.includes('drawings') ? this.#drawingsContainer : this.#navpointsContainer; + this.restoreContainer(key, targetContainer); + }); + } + getDrawingsContainer() { return this.#drawingsContainer; }