diff --git a/frontend/react/src/map/drawings/drawingsmanager.ts b/frontend/react/src/map/drawings/drawingsmanager.ts index 9dc21c32..af74ffce 100644 --- a/frontend/react/src/map/drawings/drawingsmanager.ts +++ b/frontend/react/src/map/drawings/drawingsmanager.ts @@ -530,7 +530,7 @@ export class DCSDrawingsContainer { if (layerName === 'navpoints') { return; } - if (drawingsData[layerName]["name"] === undefined) { + if (drawingsData[layerName]["name"] === undefined && drawingsData[layerName]["callsignStr"] === undefined) { const newContainer = new DCSDrawingsContainer(layerName, this); this.addSubContainer(newContainer); newContainer.initFromData(drawingsData[layerName]); @@ -557,7 +557,9 @@ export class DCSDrawingsContainer { if (isANavpoint) { newDrawing = new DCSNavpoint(drawingsData[layerName], othersContainer); - this.addDrawing(newDrawing); + if (hasContainers) othersContainer.addDrawing(newDrawing); + else this.addDrawing(newDrawing); + if (othersContainer.getDrawings().length === 0) this.removeSubContainer(othersContainer); // Remove empty container return; } diff --git a/scripts/lua/backend/OlympusCommand.lua b/scripts/lua/backend/OlympusCommand.lua index 12377fad..af9f1ce9 100644 --- a/scripts/lua/backend/OlympusCommand.lua +++ b/scripts/lua/backend/OlympusCommand.lua @@ -1077,19 +1077,37 @@ function getUnitDescription(unit) end -- This function gets the navpoints from the DCS mission -function Olympus.getNavPoints() +function Olympus.getNavPoints() + local function extract_tag(str) + return str:match("^%[(.-)%]") + end + local navpoints = {} if mist.DBs.navPoints ~= nil then for coalitionName, coalitionNavpoints in pairs(mist.DBs.navPoints) do + if navpoints[coalitionName] == nil then + navpoints[coalitionName] = {} + end + for index, navpointDrawingData in pairs(coalitionNavpoints) do + local navpointCustomLayer = extract_tag(navpointDrawingData['callsignStr']); + -- Let's convert DCS coords to lat lon local vec3 = { x = navpointDrawingData['x'], y = 0, z = navpointDrawingData['y'] } local lat, lng = coord.LOtoLL(vec3) navpointDrawingData['lat'] = lat navpointDrawingData['lng'] = lng navpointDrawingData['coalition'] = coalitionName + + if navpointCustomLayer ~= nil then + if navpoints[coalitionName][navpointCustomLayer] == nil then + navpoints[coalitionName][navpointCustomLayer] = {} + end + navpoints[coalitionName][navpointCustomLayer][navpointDrawingData['callsignStr']] = navpointDrawingData + else + navpoints[coalitionName][navpointDrawingData['callsignStr']] = navpointDrawingData + end end - navpoints[coalitionName] = coalitionNavpoints end end