mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
fix(drawings): coalition commanders will not see enemy coalition drawings and navpoints
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
import { decimalToRGBA } from "../../other/utils";
|
import { decimalToRGBA } from "../../other/utils";
|
||||||
import { getApp } from "../../olympusapp";
|
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 { MapOptions } from "../../types/types";
|
||||||
import { Circle, DivIcon, Layer, LayerGroup, layerGroup, Marker, Polygon, Polyline } from "leaflet";
|
import { Circle, DivIcon, Layer, LayerGroup, layerGroup, Marker, Polygon, Polyline } from "leaflet";
|
||||||
import { NavpointMarker } from "../markers/navpointmarker";
|
import { NavpointMarker } from "../markers/navpointmarker";
|
||||||
|
import { BLUE_COMMANDER, GAME_MASTER, NONE, RED_COMMANDER } from "../../constants/constants";
|
||||||
|
|
||||||
export abstract class DCSDrawing {
|
export abstract class DCSDrawing {
|
||||||
#name: string;
|
#name: string;
|
||||||
@@ -582,12 +583,6 @@ export class DCSDrawingsContainer {
|
|||||||
if (othersContainer.getDrawings().length === 0) this.removeSubContainer(othersContainer); // Remove empty container
|
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() {
|
getLayerGroup() {
|
||||||
return this.#layerGroup;
|
return this.#layerGroup;
|
||||||
}
|
}
|
||||||
@@ -705,6 +700,7 @@ export class DrawingsManager {
|
|||||||
#sessionDataDrawings = {};
|
#sessionDataDrawings = {};
|
||||||
#sessionDataNavpoints = {};
|
#sessionDataNavpoints = {};
|
||||||
#initialized: boolean = false;
|
#initialized: boolean = false;
|
||||||
|
#hiddenContainers: Record<string, { parent: DCSDrawingsContainer, container: DCSDrawingsContainer }> = {};
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
const drawingsLayerGroup = new LayerGroup();
|
const drawingsLayerGroup = new LayerGroup();
|
||||||
@@ -727,6 +723,13 @@ export class DrawingsManager {
|
|||||||
this.#drawingsContainer.setVisibility(getApp().getMap().getOptions().showMissionDrawings);
|
this.#drawingsContainer.setVisibility(getApp().getMap().getOptions().showMissionDrawings);
|
||||||
this.#navpointsContainer.setVisibility(getApp().getMap().getOptions().showMissionNavpoints);
|
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<string, Record<string, any>> }): boolean {
|
initDrawings(data: { drawings: Record<string, Record<string, any>> }): 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<string, string[]> = {
|
||||||
|
[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() {
|
getDrawingsContainer() {
|
||||||
return this.#drawingsContainer;
|
return this.#drawingsContainer;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user