From b3e948c133270cd8c35b915a040c66c004f6922d Mon Sep 17 00:00:00 2001 From: Michael Werle Date: Wed, 6 Nov 2024 20:04:02 +0900 Subject: [PATCH 1/8] feat(radar): add manual zoom mode to scanner The radar is zoomed manually, but the scanner has automatic zoom which can lead to some issues while trying to get an overview of the current area around the ship as it is usually zoomed out too far. This commit adds key bindings to switch between the radar and the scanner, as well as bindings to zoom the scanner and reset the mode back to automatic. The zoom bar of the scanner is moved up to make room for the new manual/automatic zoom mode indicator on the left as well as the current range indicator which is in the same position on the right as the radar display. The alternative is to display the range in the center above the zoom bar, but then it is in a different position compared to the radar. TODO: * use icons for the automatic/manual mode indicator * add hover-mode for the scanner to show ship information * use keybindings instead of hardcoded keys --- data/pigui/modules/radar.lua | 117 ++++++++++++++++++++++++++--------- src/pigui/Radar.cpp | 2 +- 2 files changed, 89 insertions(+), 30 deletions(-) diff --git a/data/pigui/modules/radar.lua b/data/pigui/modules/radar.lua index 08a8b39c6e2..6cf54bccb20 100644 --- a/data/pigui/modules/radar.lua +++ b/data/pigui/modules/radar.lua @@ -19,9 +19,11 @@ local icons = ui.theme.icons local MAX_RADAR_SIZE = 1000000000 local MIN_RADAR_SIZE = 1000 +local DEFAULT_RADAR_SIZE = 10000 local shouldDisplay2DRadar -local current_radar_size = 10000 +local current_radar_size = DEFAULT_RADAR_SIZE +local manual_zoom = false local blobSize = 6.0 local function getColorFor(item) @@ -95,9 +97,9 @@ local function display2DRadar(cntr, size) if #tooltip > 0 then ui.setTooltip(table.concat(tooltip, "\n")) end - local distance = ui.Format.Distance(current_radar_size) - local textcenter = cntr + Vector2((halfsize + twothirdsize) * 0.5, size) - local textsize = ui.addStyledText(textcenter, ui.anchor.left, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) + -- local distance = ui.Format.Distance(current_radar_size) + -- local textcenter = cntr + Vector2((halfsize + twothirdsize) * 0.5, size) + -- local textsize = ui.addStyledText(textcenter, ui.anchor.left, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) end local function drawTarget(target, scale, center, color) @@ -111,7 +113,7 @@ local function drawTarget(target, scale, center, color) end local radar = require 'PiGui.Modules.RadarWidget'() -local currentZoomDist = MIN_RADAR_SIZE +--local currentZoomDist = MIN_RADAR_SIZE radar.minZoom = MIN_RADAR_SIZE radar.maxZoom = MAX_RADAR_SIZE @@ -125,9 +127,9 @@ local function display3DRadar(center, size) local maxCargoDist = 0.0 radar.size = size - radar.zoom = currentZoomDist + radar.zoom = current_radar_size or DEFAULT_RADAR_SIZE local radius = radar.radius - local scale = radar.radius / currentZoomDist + local scale = radar.radius / radar.zoom ui.setCursorPos(center - size / 2.0) -- draw targets below the plane @@ -140,7 +142,7 @@ local function display3DRadar(center, size) -- only snap to cargo containers if they're less than 25km away (arbitrary) if v.body:IsCargoContainer() and v.distance < 25000 then maxCargoDist = math.max(maxCargoDist, v.distance) end - if v.distance < currentZoomDist and v.rel_position.y < 0.0 then + if v.distance < current_radar_size and v.rel_position.y < 0.0 then local color = (v.body == navTarget and colors.navTarget) or (v.body == combatTarget and colors.combatTarget) or getColorFor(v) drawTarget(v, scale, center, color) end @@ -157,27 +159,33 @@ local function display3DRadar(center, size) -- draw targets above the plane for k, v in pairs(targets) do - if v.distance < currentZoomDist and v.rel_position.y >= 0.0 then + if v.distance < current_radar_size and v.rel_position.y >= 0.0 then local color = (v.body == navTarget and colors.navTarget) or (v.body == combatTarget and colors.combatTarget) or getColorFor(v) drawTarget(v, scale, center, color) end end -- handle automatic radar zoom based on player surroundings - local maxDist = maxBodyDist - if combatTarget then - maxDist = combatTarget:GetPositionRelTo(player):length() * 1.4 - elseif maxShipDist > 0 then - maxDist = maxShipDist * 1.4 - elseif maxCargoDist > 0 then + if not manual_zoom then + local maxDist = maxBodyDist + if combatTarget then + maxDist = combatTarget:GetPositionRelTo(player):length() * 1.4 + elseif maxShipDist > 0 then + maxDist = maxShipDist * 1.4 + elseif maxCargoDist > 0 then maxDist = maxCargoDist * 1.4 - elseif navTarget then - local dist = navTarget:GetPositionRelTo(player):length() - maxDist = dist > MAX_RADAR_SIZE and maxBodyDist or dist * 1.4 + elseif navTarget then + local dist = navTarget:GetPositionRelTo(player):length() + maxDist = dist > MAX_RADAR_SIZE and maxBodyDist or dist * 1.4 + end + current_radar_size = math.clamp(radar.zoom + (maxDist - radar.zoom) * 0.03, + MIN_RADAR_SIZE, MAX_RADAR_SIZE) end - currentZoomDist = math.clamp(currentZoomDist + (maxDist - currentZoomDist) * 0.03, - MIN_RADAR_SIZE, MAX_RADAR_SIZE) + -- local distance = ui.Format.Distance(current_radar_size) + -- local textwidth = ui.calcTextSize(distance).x + -- local textpos = center + Vector2(textwidth / -2, size.y * 0.42) + -- local textsize = ui.addStyledText(textpos, ui.anchor.left, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) end local click_on_radar = false @@ -191,25 +199,61 @@ local function displayRadar() if #equipped_radar > 0 then local size = ui.reticuleCircleRadius * 0.66 - local cntr = Vector2(ui.screenWidth / 2, ui.screenHeight - size - 4) + local center = Vector2(ui.screenWidth / 2, ui.screenHeight - size - 4) + local zoom = 0 + local toggle_radar = false + + -- Handle keyboard + -- TODO: figure out how to map the keys instead of hard-coding them + if ui.isKeyReleased(ui.keys.left) then + zoom = 1 -- zoom in + elseif ui.isKeyReleased(ui.keys.right) then + zoom = -1 -- zoom out + end + if ui.isKeyReleased(ui.keys.up) then + zoom = 0 + manual_zoom = false + current_radar_size = DEFAULT_RADAR_SIZE + end + if ui.isKeyReleased(ui.keys.down) then + toggle_radar = true + end + -- Handle mouse if it is in the radar area local mp = ui.getMousePos() - if (mp - cntr):length() > size then + local mouse_dist = shouldDisplay2DRadar and size or size * 1.8 + if (mp - center):length() > mouse_dist then click_on_radar = false end - if (mp - cntr):length() < size then + if (mp - center):length() < mouse_dist then if ui.isMouseClicked(1) then click_on_radar = true end - if click_on_radar and ui.isMouseReleased(1) then + if not toggle_radar and click_on_radar and ui.isMouseReleased(1) then ui.openPopup("radarselector") end - local wheel = ui.getMouseWheel() - if wheel > 0 then + -- TODO: figure out how to "capture" the mouse wheel to prevent + -- the game engine from using it to also zoom the viewport + if zoom == 0 then + zoom = ui.getMouseWheel() + end + end + if zoom > 0 then + -- Zoom in (decrease scanned area) + if not manual_zoom then + current_radar_size = 10 ^ math.floor(math.log(current_radar_size, 10)) + else current_radar_size = math.max(current_radar_size / 10, MIN_RADAR_SIZE) - elseif wheel < 0 then + end + manual_zoom = true + elseif zoom < 0 then + -- Zoom out (increase scanned area) + if not manual_zoom then + current_radar_size = 10 ^ math.ceil(math.log(current_radar_size, 10)) + else current_radar_size = math.min(current_radar_size * 10, MAX_RADAR_SIZE) end + manual_zoom = true end ui.popup("radarselector", function() if ui.selectable(lui.HUD_2D_RADAR, shouldDisplay2DRadar, {}) then @@ -219,11 +263,26 @@ local function displayRadar() Event.Queue('onChangeMFD', 'scanner') end end) + + if toggle_radar then + shouldDisplay2DRadar = not shouldDisplay2DRadar + Event.Queue('onChangeMFD', shouldDisplay2DRadar and 'radar' or 'scanner') + end + -- Draw the actual radar if shouldDisplay2DRadar then - display2DRadar(cntr, size) + display2DRadar(center, size) else - display3DRadar(cntr, Vector2(ui.reticuleCircleRadius * 1.8, size * 2)) + display3DRadar(center, Vector2(ui.reticuleCircleRadius * 1.8, size * 2)) end + -- Draw the range indicator + local distance = ui.Format.Distance(current_radar_size) + local textpos = Vector2(center.x + size, center.y + size) + local textsize = ui.addStyledText(textpos, ui.anchor.right, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) + -- Draw the radar mode in bottom-left corner + -- TODO: use an icon? + local mode = manual_zoom and '[M]' or '[A]' + textpos = Vector2(center.x - size, center.y + size) + ui.addStyledText(textpos, ui.anchor.left, ui.anchor.bottom, mode, colors.alertRed, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) end end diff --git a/src/pigui/Radar.cpp b/src/pigui/Radar.cpp index 8d3b4ea4b57..a54cf01f182 100644 --- a/src/pigui/Radar.cpp +++ b/src/pigui/Radar.cpp @@ -26,7 +26,7 @@ void RadarWidget::DrawPiGui() ImDrawList *drawList = ImGui::GetWindowDrawList(); ImVec2 pos = ImGui::GetCursorScreenPos(); m_center = ImVec2(pos.x + m_size.x / 2.f, pos.y + m_size.y / 2.f); - ImVec2 zoomPos = ImVec2(m_center.x, m_center.y + (m_size.y / 2.f - 4.f) - m_radius.y); + ImVec2 zoomPos = ImVec2(m_center.x, m_center.y + (m_size.y / 2.6f) - m_radius.y); static const float circle = float(2 * M_PI); static const float step = circle / RADAR_STEPS; From 9df947b5802f05c0dc4230143ff7648af4d0f02e Mon Sep 17 00:00:00 2001 From: Michael Werle Date: Mon, 11 Nov 2024 11:26:10 +0900 Subject: [PATCH 2/8] feat(radar): convert hard-coded keys to use bind-manager Create key bindings to use for controlling the radar. The key bindings are specified in the C++ side and the accessed from Lua. The user can modify the binds using the options page. --- data/lang/input-core/en.json | 20 ++++++++++++++++++++ data/pigui/modules/radar.lua | 23 ++++++++++++++++------- src/ship/PlayerShipController.cpp | 13 +++++++++++++ 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/data/lang/input-core/en.json b/data/lang/input-core/en.json index 857b2768247..bcc20e4ba0f 100644 --- a/data/lang/input-core/en.json +++ b/data/lang/input-core/en.json @@ -131,6 +131,22 @@ "description": "Descriptive name for the PrimaryFire action.", "message": "Primary Fire" }, + "BIND_RADAR_TOGGLE_MODE": { + "description": "Descriptive name for the RadarToggle action.", + "message": "Toggle Radar Display Mode" + }, + "BIND_RADAR_ZOOM_IN": { + "description": "Descriptive name for the RadarZoomIn action.", + "message": "Manual Zoom Radar In" + }, + "BIND_RADAR_ZOOM_OUT": { + "description": "Descriptive name for the RadarZoomOut action.", + "message": "Manual Zoom Radar Out" + }, + "BIND_RADAR_ZOOM_RESET": { + "description": "Descriptive name for the RadarZoomReset action.", + "message": "Reset Radar Zoom" + }, "BIND_RADIAL_HORIZONTAL_SELECTION": { "description": "Input axis name to select in the radial menu.", "message": "Radial Menu Left/Right" @@ -231,6 +247,10 @@ "description": "Header for the GeneralViewControls input group.", "message": "General View Controls" }, + "GROUP_RADAR_CONTROL": { + "description": "Group label for radar-related inputs", + "message": "Radar Control" + }, "GROUP_LANDING_CONTROL": { "description": "Group label for landing-related inputs", "message": "Landing Control" diff --git a/data/pigui/modules/radar.lua b/data/pigui/modules/radar.lua index 6cf54bccb20..efe233bc69d 100644 --- a/data/pigui/modules/radar.lua +++ b/data/pigui/modules/radar.lua @@ -5,6 +5,7 @@ local Engine = require 'Engine' local Game = require 'Game' local utils = require 'utils' local Event = require 'Event' +local Input = require 'Input' local Lang = require 'Lang' local lc = Lang.GetResource("core"); @@ -26,6 +27,14 @@ local current_radar_size = DEFAULT_RADAR_SIZE local manual_zoom = false local blobSize = 6.0 +local keys = { + radar_toggle_mode = Input.GetActionBinding('BindRadarToggleMode'), + radar_reset = Input.GetActionBinding('BindRadarZoomReset'), + -- TODO: Convert to Axis? + radar_zoom_in = Input.GetActionBinding('BindRadarZoomIn'), + radar_zoom_out = Input.GetActionBinding('BindRadarZoomOut'), +} + local function getColorFor(item) local body = item.body if body == player:GetNavTarget() then @@ -204,18 +213,18 @@ local function displayRadar() local toggle_radar = false -- Handle keyboard - -- TODO: figure out how to map the keys instead of hard-coding them - if ui.isKeyReleased(ui.keys.left) then - zoom = 1 -- zoom in - elseif ui.isKeyReleased(ui.keys.right) then - zoom = -1 -- zoom out + -- TODO: Convert to axis? + if keys.radar_zoom_in:IsJustActive() then + zoom = 1 + elseif keys.radar_zoom_out:IsJustActive() then + zoom = -1 end - if ui.isKeyReleased(ui.keys.up) then + if keys.radar_reset:IsJustActive() then zoom = 0 manual_zoom = false current_radar_size = DEFAULT_RADAR_SIZE end - if ui.isKeyReleased(ui.keys.down) then + if keys.radar_toggle_mode:IsJustActive() then toggle_radar = true end diff --git a/src/ship/PlayerShipController.cpp b/src/ship/PlayerShipController.cpp index d35fa3abc50..ca5d684a02c 100644 --- a/src/ship/PlayerShipController.cpp +++ b/src/ship/PlayerShipController.cpp @@ -166,6 +166,13 @@ REGISTER_INPUT_BINDING(PlayerShipController) auto landingGroup = controlsPage->GetBindingGroup("LandingControl"); input->AddActionBinding("BindToggleLandingGear", landingGroup, Action({ SDLK_n })); input->AddAxisBinding("BindControlLandingGear", landingGroup, Axis()); + + auto radarGroup = controlsPage->GetBindingGroup("RadarControl"); + input->AddActionBinding("BindRadarZoomReset", radarGroup, Action({ SDLK_DOWN })); + input->AddActionBinding("BindRadarToggleMode", radarGroup, Action({ SDLK_UP })); + input->AddActionBinding("BindRadarZoomIn", radarGroup, Action({ SDLK_LEFT })); + input->AddActionBinding("BindRadarZoomOut", radarGroup, Action({ SDLK_RIGHT })); + input->AddAxisBinding("BindRadarZoom", radarGroup, Axis()); } PlayerShipController::PlayerShipController() : @@ -243,6 +250,12 @@ void PlayerShipController::InputBinding::RegisterBindings() toggleLandingGear = AddAction("BindToggleLandingGear"); controlLandingGear = AddAxis("BindControlLandingGear"); + + AddAction("BindRadarToggleMode"); + AddAction("BindRadarZoomReset"); + // TODO: Convert to axis? + AddAction("BindRadarZoomIn"); + AddAction("BindRadarZoomOut"); } PlayerShipController::~PlayerShipController() From 6764af4ddc0b8d215fcc699fc96738bd6443a21f Mon Sep 17 00:00:00 2001 From: Michael Werle Date: Thu, 7 Nov 2024 09:39:34 +0900 Subject: [PATCH 3/8] feat(radar): add tooltip for targets to scanner --- data/pigui/modules/radar.lua | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/data/pigui/modules/radar.lua b/data/pigui/modules/radar.lua index efe233bc69d..449e9b49823 100644 --- a/data/pigui/modules/radar.lua +++ b/data/pigui/modules/radar.lua @@ -111,14 +111,21 @@ local function display2DRadar(cntr, size) -- local textsize = ui.addStyledText(textcenter, ui.anchor.left, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) end +-- Return tooltip for target local function drawTarget(target, scale, center, color) local pos = target.rel_position local basePos = Vector2(pos.x * scale.x + center.x, pos.z * scale.y + center.y) local blobPos = Vector2(basePos.x, basePos.y - pos.y * scale.y); local blobHalfSize = Vector2(blobSize / 2) + local tooltip = {} ui.addLine(basePos, blobPos, color:shade(0.1), 2) ui.addRectFilled(blobPos - blobHalfSize, blobPos + blobHalfSize, color, 0, 0) + local mouse_position = ui.getMousePos() + if (mouse_position - blobPos):length() < 4 then + table.insert(tooltip, target.label) + end + return tooltip end local radar = require 'PiGui.Modules.RadarWidget'() @@ -128,6 +135,7 @@ radar.maxZoom = MAX_RADAR_SIZE local function display3DRadar(center, size) local targets = ui.getTargetsNearby(MAX_RADAR_SIZE) + local tooltip = {} local combatTarget = player:GetCombatTarget() local navTarget = player:GetNavTarget() @@ -153,7 +161,7 @@ local function display3DRadar(center, size) if v.distance < current_radar_size and v.rel_position.y < 0.0 then local color = (v.body == navTarget and colors.navTarget) or (v.body == combatTarget and colors.combatTarget) or getColorFor(v) - drawTarget(v, scale, center, color) + table.append(tooltip, drawTarget(v, scale, center, color)) end end @@ -170,10 +178,14 @@ local function display3DRadar(center, size) for k, v in pairs(targets) do if v.distance < current_radar_size and v.rel_position.y >= 0.0 then local color = (v.body == navTarget and colors.navTarget) or (v.body == combatTarget and colors.combatTarget) or getColorFor(v) - drawTarget(v, scale, center, color) + table.append(tooltip, drawTarget(v, scale, center, color)) end end + if #tooltip > 0 then + ui.setTooltip(table.concat(tooltip, "\n")) + end + -- handle automatic radar zoom based on player surroundings if not manual_zoom then local maxDist = maxBodyDist From 88a1735f1435abd3c2e416e1826a7979b583d961 Mon Sep 17 00:00:00 2001 From: Michael Werle Date: Sat, 9 Nov 2024 08:39:09 +0900 Subject: [PATCH 4/8] feat(radar): draw radar in UI colors The radar ("azimuthal mode") is drawn using the reticule colours (white), which clashes with the rest of the dashboard icons/controls as well as the scanner ("3d mode"). This commit changes the radar colours to (mostly) match the scanner colours. It also tweaks the line-width of the scanner and radar backgrounds: - rader inner lines are made thinner - scanner border is made thicker --- data/pigui/modules/radar.lua | 26 +++++++++++++++++++------- src/pigui/Radar.cpp | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/data/pigui/modules/radar.lua b/data/pigui/modules/radar.lua index 449e9b49823..eead59e9e42 100644 --- a/data/pigui/modules/radar.lua +++ b/data/pigui/modules/radar.lua @@ -61,21 +61,33 @@ local function display2DRadar(cntr, size) local halfsize = size * 0.5 local thirdsize = size * 0.3 local twothirdsize = size * 0.7 + local fgColor = colors.uiPrimary + local bgColor = colors.uiBackground:opacity(0.54) + local lineThickness = 1.5 local function line(x,y) - -- ui.addLine(cntr + Vector2(x, y) * halfsize, cntr + Vector2(x,y) * size, colors.reticuleCircle, ui.reticuleCircleThickness) - ui.addLine(cntr + Vector2(x, y) * thirdsize, cntr + Vector2(x,y) * twothirdsize, colors.reticuleCircle, ui.reticuleCircleThickness) + -- Uncomment to extend the radial line all the way to the outer circle + -- ui.addLine(cntr + Vector2(x, y) * halfsize, center + Vector2(x,y) * size, colors.uiPrimaryDark, lineThickness) + ui.addLine(cntr + Vector2(x, y) * thirdsize, cntr + Vector2(x,y) * twothirdsize, fgColor, lineThickness) end - ui.addCircleFilled(cntr, size, colors.lightBlueBackground, ui.circleSegments(size), 1) - ui.addCircle(cntr, size, colors.reticuleCircle, ui.circleSegments(size), ui.reticuleCircleThickness) - -- ui.addCircle(cntr, halfsize, colors.reticuleCircle, ui.circleSegments(halfsize), ui.reticuleCircleThickness) - ui.addCircle(cntr, thirdsize, colors.reticuleCircle, ui.circleSegments(thirdsize), ui.reticuleCircleThickness) - ui.addCircle(cntr, twothirdsize, colors.reticuleCircle, ui.circleSegments(twothirdsize), ui.reticuleCircleThickness) + + -- radar background and border + ui.addCircleFilled(cntr, size, bgColor, ui.circleSegments(size), 1) + ui.addCircle(cntr, size, fgColor, ui.circleSegments(size), lineThickness * 2) + + -- inner circles + -- Uncomment to add an additional circle dividing the 2D radar display + -- ui.addCircle(cntr, halfsize, fgColor, ui.circleSegments(halfsize), lineThickness) + ui.addCircle(cntr, thirdsize, fgColor, ui.circleSegments(thirdsize), lineThickness) + ui.addCircle(cntr, twothirdsize, fgColor, ui.circleSegments(twothirdsize), lineThickness) local l = ui.oneOverSqrtTwo + -- cross-lines line(-l, l) line(-l, -l) line(l, -l) line(l, l) + + -- Draw target markers local combatTarget = player:GetCombatTarget() local navTarget = player:GetNavTarget() local tooltip = {} diff --git a/src/pigui/Radar.cpp b/src/pigui/Radar.cpp index a54cf01f182..3c55f0d9cc6 100644 --- a/src/pigui/Radar.cpp +++ b/src/pigui/Radar.cpp @@ -66,7 +66,7 @@ void RadarWidget::DrawPiGui() for (float ang = 0; ang < circle; ang += step) { drawList->PathLineTo(circlePos(ang, m_center, m_radius)); } - drawList->PathStroke(ImGui::GetColorU32(ImGuiCol_FrameBgActive), true); + drawList->PathStroke(ImGui::GetColorU32(ImGuiCol_FrameBgActive), true, 2.0); // inner ring for (float ang = 0; ang < circle; ang += circle / 20.f) { From f1b0b8228e9bf22244a40f20874f6a08f1a97ef7 Mon Sep 17 00:00:00 2001 From: Szlrd Date: Tue, 12 Nov 2024 17:01:40 +0900 Subject: [PATCH 5/8] feat(radar): add icons for the new radar buttons Szlrd created icons both for the scanner/radar toggle button as well as for the manual/automatic zoom mode indicator button. Two of the new icons are on the 21st row (starting on index 320) for the radar's automatic and manual zoom mode indicator. This necessitated modifying several other files to reflect the increased grid size of the icons.svg file. Co-authored-by: Szlrd --- data/fonts/UIFont.json | 2 +- data/fonts/UIHeadingFont.json | 2 +- data/fonts/UIIconFont.json | 2 +- data/fonts/UIMonoFont.json | 2 +- data/icons/icons.svg | 24904 ++++++++++++++++---------------- data/pigui/libs/icons.lua | 2 +- data/pigui/themes/default.lua | 9 +- 7 files changed, 12448 insertions(+), 12475 deletions(-) diff --git a/data/fonts/UIFont.json b/data/fonts/UIFont.json index c8ae80ebe8c..554d20755f0 100644 --- a/data/fonts/UIFont.json +++ b/data/fonts/UIFont.json @@ -17,7 +17,7 @@ { "svgFile": "icons/icons.svg", "rangeBase": "0xF000", - "grid": [ 16, 20 ] + "grid": [ 16, 21 ] } ] } diff --git a/data/fonts/UIHeadingFont.json b/data/fonts/UIHeadingFont.json index f79fce78c67..4850f0cf9c0 100644 --- a/data/fonts/UIHeadingFont.json +++ b/data/fonts/UIHeadingFont.json @@ -17,7 +17,7 @@ { "svgFile": "icons/icons.svg", "rangeBase": "0xF000", - "grid": [ 16, 20 ] + "grid": [ 16, 21 ] } ] } diff --git a/data/fonts/UIIconFont.json b/data/fonts/UIIconFont.json index f16bcaf4f32..ccd693b2281 100644 --- a/data/fonts/UIIconFont.json +++ b/data/fonts/UIIconFont.json @@ -9,7 +9,7 @@ { "svgFile": "icons/icons.svg", "rangeBase": "0xF000", - "grid": [ 16, 20 ] + "grid": [ 16, 21 ] } ] } diff --git a/data/fonts/UIMonoFont.json b/data/fonts/UIMonoFont.json index 13675eae378..bd3bf684266 100644 --- a/data/fonts/UIMonoFont.json +++ b/data/fonts/UIMonoFont.json @@ -17,7 +17,7 @@ { "svgFile": "icons/icons.svg", "rangeBase": "0xF000", - "grid": [ 16, 20 ] + "grid": [ 16, 21 ] } ] } diff --git a/data/icons/icons.svg b/data/icons/icons.svg index 2a6b7ee18ba..b7f3bf51317 100644 --- a/data/icons/icons.svg +++ b/data/icons/icons.svg @@ -1,12 +1,12 @@ - - - - + - - + id="rect4058" + style="stroke-width:0.165359" /> + id="g4066" + transform="matrix(0.16535947,0,0,0.16535947,-0.05840186,-2150.0924)"> + + + + + + fill-rule="evenodd" + stroke-linejoin="round" + stroke-miterlimit="2" + id="g4070"> + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-225.04649,-1812.6103)" + id="g4080"> - - - - - - - - - + id="rect4076" /> + - + - + - + + + + id="rect4088" /> + - - + transform="matrix(0.16535947,0,0,0.16535947,412.43079,-1850.0973)" + id="g4549"> - + id="rect4543" /> + + id="rect4547" /> - + - + - + + + + + id="rect4559" /> - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="g4607"> - + fill="none" + id="g4597"> - + - - - + stroke-width="7.0868" + style="paint-order:markers fill stroke" + id="ellipse4593" /> + stroke-width="7.0871" + style="paint-order:markers fill stroke" + id="path4595" /> - - - - - - + - + - + - - - - + style="paint-order:markers fill stroke" + id="circle4603" /> - - - - + - - - - - - + - - - - + opacity="1" + id="rect4611" /> + - - - - + transform="matrix(0.16535947,0,0,0.16535947,262.43322,-1850.1138)" + id="g4621"> + id="rect4617" /> + id="path4619" /> + + + + id="rect4625" + x="0" /> - - + + - - - - - - + + + + - - - - + opacity="1" + id="rect4637" /> + + + + + + + + + + + - - + id="rect4661" + style="stroke-width:0.165359" /> + - + - + - + + + + id="rect4671" /> + - - - - + + - + + + - + - - - - + opacity="1" + id="rect4685" /> - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-412.54759,-1812.6103)" + id="g4693"> + + - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-375.04406,-1812.6103)" + id="g4699"> + + - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-262.55002,-1850.0973)" + id="g4705"> - + d="m 3968.5,-2268.9 c -6.0849,0 -11.023,4.9383 -11.023,11.023 0,6.0847 4.9382,11.023 11.023,11.023 h 11.023 v 11.023 c 0,6.0848 4.9383,11.023 11.023,11.023 6.0847,0 11.023,-4.9382 11.023,-11.023 v -11.023 h 11.023 c 6.0846,0 11.023,-4.9384 11.023,-11.023 0,-6.0846 -4.9384,-11.023 -11.023,-11.023 h -11.023 v -11.023 c 0,-6.0847 -4.9382,-11.023 -11.023,-11.023 -6.0848,0 -11.023,4.9384 -11.023,11.023 v 11.023 z m -94.092,102.38 c -6.8385,6.8342 -6.8385,17.945 0,24.78 6.8343,6.8343 17.946,6.8343 24.731,0 l 50.662,-50.618 c 11.817,7.3635 25.75,11.64 40.741,11.64 42.637,0 77.161,-34.524 77.161,-77.161 0,-42.637 -34.524,-77.161 -77.161,-77.161 -42.637,0 -77.161,34.524 -77.161,77.161 0,14.947 4.2771,28.924 11.64,40.741 z m 61.024,-91.359 c 0,-30.424 24.691,-55.115 55.115,-55.115 30.423,0 55.115,24.691 55.115,55.115 0,30.424 -24.692,55.115 -55.115,55.115 -30.424,0 -55.115,-24.692 -55.115,-55.115 z" + fill="#ffffff" + opacity="1" + id="path4701" /> + - - - + transform="matrix(0.16535947,0,0,0.16535947,-225.04649,-1850.0973)" + id="g4711"> - + d="m 4222.4,-2282.1 c 9.5238,2.2046 17.103,10.318 19.308,19.18 0.754,4.1447 4.3651,7.2752 8.6905,7.2752 4.8501,0 8.8184,-3.9682 8.8184,-8.8184 0,-6.3492 -5.3351,-16.005 -12.61,-23.236 -7.1428,-7.0546 -15.652,-12.037 -22.663,-12.037 -4.8502,0 -8.8184,4.1005 -8.8184,8.9506 0,4.3211 3.1305,7.9365 7.2752,8.6861 z m -121.21,115.61 c -6.8342,6.8342 -6.8342,17.945 0,24.78 6.8342,6.835 17.945,6.8342 24.736,0 l 50.661,-50.617 c 11.817,7.3634 25.75,11.64 40.741,11.64 42.637,0 77.161,-34.524 77.161,-77.161 0,-42.637 -34.524,-77.161 -77.161,-77.161 -42.637,0 -77.161,34.524 -77.161,77.161 0,14.947 4.2767,28.924 11.64,40.741 z m 61.023,-91.358 c 0,-30.423 24.691,-55.115 55.115,-55.115 30.424,0 55.115,24.691 55.115,55.115 0,30.424 -24.691,55.115 -55.115,55.115 -30.424,0 -55.115,-24.691 -55.115,-55.115 z" + fill="#ffffff" + opacity="1" + id="path4707" /> + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-300.05355,-1850.0973)" + id="g4717"> + + - - - + transform="matrix(0.16535947,0,0,0.16535947,-487.53811,-1887.6008)" + id="g4723"> + + d="m 4825.5,-1967.7 52.541,51.342 c 1.4881,1.4883 3.555,2.3977 5.8286,2.3977 4.5472,0 8.2676,-3.6791 8.2676,-8.185 v -173.79 c 0,-4.5058 -3.7204,-8.1849 -8.2676,-8.1849 -2.3191,0 -4.4232,0.9508 -5.9154,2.4802 l -52.417,51.259 h -32.616 c -9.1358,0 -16.535,7.3996 -16.535,16.535 v 49.606 c 0,9.1358 7.3995,16.535 16.535,16.535 z m 113.14,-92.101 c -3.9685,3.9271 -3.9685,10.335 0,14.303 9.8385,9.8797 15.952,23.48 15.952,38.527 0,15.047 -6.1552,28.647 -15.994,38.527 -3.9725,3.9684 -3.9725,10.376 0,14.303 3.923,3.9685 10.335,3.9685 14.303,0 13.518,-13.522 21.909,-32.202 21.909,-52.83 0,-20.586 -8.3089,-39.23 -21.785,-52.747 l -0.083,-0.083 c -3.9643,-3.9684 -10.33,-3.9684 -14.299,0 z m -8.557,82.8 c 7.6475,-7.6889 12.36,-18.272 12.36,-29.97 0,-11.699 -4.7167,-22.281 -12.36,-29.97 -3.9684,-3.9684 -10.376,-3.9684 -14.303,0 -3.9684,3.9271 -3.9684,10.334 0,14.303 3.9685,4.0099 6.4488,9.5492 6.4488,15.667 0,6.1181 -2.4803,11.657 -6.4488,15.667 -3.9684,3.9685 -3.9684,10.334 0,14.303 3.9272,3.9271 10.335,3.9685 14.303,0 z" + fill="#ffffff" + opacity="1" + id="path4721" /> - - + transform="matrix(0.16535947,0,0,0.16535947,-487.53811,-1887.6008)" + id="g4729"> + + d="m 5062.7,-1985.1 c -5.2916,-2.6015 -11.288,-4.1008 -17.638,-4.1008 -21.915,0 -39.685,17.77 -39.685,39.685 0,21.915 17.77,39.685 39.685,39.685 21.915,0 39.685,-17.77 39.685,-39.685 v -88.189 c 0,-4.8504 3.9686,-8.819 8.819,-8.819 h 74.961 c 4.8504,0 8.8188,3.9686 8.8188,8.819 v 52.605 c -5.2915,-2.6015 -11.288,-4.1008 -17.638,-4.1008 -21.915,0 -39.685,17.77 -39.685,39.685 0,21.915 17.77,39.685 39.685,39.685 21.915,0 39.685,-17.77 39.685,-39.685 v -149.04 c 0,-5.3795 -4.3213,-9.7008 -9.701,-9.7008 h -117.29 c -5.3794,0 -9.7009,4.3213 -9.7009,9.7008 v 113.46 z" + fill="#ffffff" + opacity="1" + id="path4727" /> - - - - + - + + + + + + + + + + id="rect4745" /> - - - - + - + + + + + + + + + + + + id="rect4765" /> - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,562.42836,-2150.0924)" + id="g4787"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + opacity="1" + id="g4821"> + id="rect4813" /> + id="rect4815" /> + stroke-width="2.978" + id="path4817" /> + id="rect4819" /> + - + + + + + + + - - - - - - - - - + stroke-width="3" + id="g4841"> + d="m 480.39,1480.3 a 12.501,12.501 0 0 1 -15.09,-1.9867 12.501,12.501 0 0 1 -1.9867,-15.09 12.501,12.501 0 0 1 14.062,-5.8247 12.501,12.501 0 0 1 9.2658,12.075" + opacity="1" + stroke-opacity="0.32549" + id="path4835" /> + d="m 463.31,1475.7 a 12.501,12.501 0 0 1 1.2499,-14.286 12.501,12.501 0 0 1 13.852,-3.7117 12.501,12.501 0 0 1 8.2256,11.747" + opacity="1" + id="path4837" /> + d="m 467.89,1480.3 a 12.501,12.501 0 0 1 -5.4968,-15.102 12.501,12.501 0 0 1 13.918,-8.0357 12.501,12.501 0 0 1 10.331,12.311" + opacity="1" + stroke-opacity="0.54546" + id="path4839" /> - + id="rect4845" + x="0" /> - - - + transform="matrix(0.16535947,0,0,0.16535947,712.42593,-2187.591)" + id="g4859"> + transform="matrix(8.0515,0,0,8.0515,-2365.4,-12162)" + id="g4855"> - + id="circle4849" /> - - - - - - - - + + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="2.1816" + id="path4853" /> + - - - - + transform="matrix(0.16535947,0,0,0.16535947,712.42593,-2187.591)" + id="g4877"> + transform="matrix(8.0515,0,0,8.0515,-2592.2,-12162)" + id="g4873"> - + + id="circle4863" /> + + + + + - + + + + + + + - + + + + - - - - - - - + id="circle4891" /> + - - - - - + transform="matrix(0.16535947,0,0,0.16535947,374.92726,-2412.5841)" + id="g4909"> + transform="matrix(13.087,0,0,13.237,-12075,-16914)" + id="g4905"> - + transform="matrix(0,-0.71903,-0.71191,0,1070.3,1892.7)" + id="g4899"> + d="m 915.46,388.08 7.9375,-7.9375 7.9375,7.9375 z" + fill="none" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="1.6899" + id="path4897" /> + + + d="m 915.46,388.08 7.9375,-7.9375 7.9375,7.9375 z" + fill="none" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="1.6899" + id="path4901" /> - - - - - - - + - - - - + transform="matrix(0.16535947,0,0,0.16535947,449.93431,-2412.5841)" + id="g4923"> + transform="matrix(13.087,0,0,13.237,-12302,-16677)" + id="g4919"> - + transform="matrix(0,-0.71903,0.71191,0,523.44,1874.9)" + id="g4913"> + d="m 915.46,388.08 7.9375,-7.9375 7.9375,7.9375 z" + fill="none" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="1.6899" + id="path4911" /> + + + d="m 915.46,388.08 7.9375,-7.9375 7.9375,7.9375 z" + fill="none" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="1.6899" + id="path4915" /> - - - - - - - + - - - - - + + + + - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + id="g4939-6-3"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - + + + + + + id="rect4955" /> - - - - + + + + + - + + + + + + + + id="rect4975" /> - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,599.86574,-2225.0896)" + id="g4985"> + - + + id="rect4983" /> - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,824.91998,-2187.591)" + id="g5005"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="rect5081" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="rect5115-9" /> + + + + id="rect5121" /> - - + transform="matrix(0.16535947,0,0,0.16535947,787.41645,-2075.0953)" + id="g5129"> + + id="rect5127" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-1050.0249,-1700.0997)" + id="g5301"> + id="path5297" /> + + + + + id="rect5305" /> + + + + id="rect5311" /> + + + + id="rect5317" /> + + + + id="rect5323" /> - - - - - - - - - - - - - + + - - - + opacity="1" + id="rect5329" /> - - - - + - - - - - - + id="path5333" /> + + + + id="path5339" /> + - - - + transform="matrix(0.16535947,0,0,0.16535947,-975.03435,-1775.1068)" + id="g5349"> - + - - - - - - - - - - - - - + opacity="1" + id="rect5347" /> + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - Icon - - - - - - - Icon - + fill="none" + id="g5403" + transform="matrix(0.16535947,0,0,0.16535947,-0.05840186,-2150.0924)"> + + stroke-width="14.173" + id="g5401"> + id="path5391" /> - - - - - Icon - - - - Icon - - - + id="path5393" /> + id="path5395" /> + id="path5397" /> + id="path5399" /> - - - Icon - + transform="matrix(0.16535947,0,0,0.16535947,-712.54274,-2225.0896)" + id="g5409"> + + + + - + transform="matrix(-3.5486,0.95084,0.95926,3.58,-2692.7,-6956.9)" + opacity="1" + id="g5425"> - + transform="matrix(0.96593,-0.25655,-0.26111,-0.96593,402.29,2995.7)" + id="g5413"> + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="5.3843" + id="path5411" /> + + + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="1.4943" + id="path5415" /> - - - - - Icon - - - - - - + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="3.841" + id="g5423"> + id="path5419" /> + id="path5421" /> + - - - - - - - - Icon - - - - Icon - + transform="matrix(0.16535947,0,0,0.16535947,937.41402,-2225.0896)" + id="g5447"> - - + + id="g5439"> + + + + + + + id="path5441" /> + - - - Icon - + transform="matrix(0.16535947,0,0,0.16535947,750.12789,-2187.591)" + id="g5479"> + + + + + + + + + + + + + + + + + + + + - - - + stroke-width="7.0866" + style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;white-space:normal;isolation:auto;mix-blend-mode:normal" + id="path5481" /> - - - Icon - - - - - - - - - Icon - - - - Icon + id="path5485" + style="stroke-width:0.165359" /> + id="rect5487" + style="stroke-width:0.165359" /> - + Icon + + - - - + stroke-width="69.35" + id="path5493" /> - - - Icon + + id="rect5499" + style="stroke-width:0.165359" /> - + Icon + - - - + opacity="1" + id="rect5503" /> + + + + + - - ! - - - - + Icon + ! - + + + Icon + ! + id="rect5523" /> + + + + + + + - - - ! - - ! - ! - - - + transform="matrix(0,0.16535947,0.16535947,0,725.90273,-2876.0536)" + id="g5555"> + Icon + - + transform="translate(0,-29.101)" + id="g5553"> + + + + + + + + + + + + Icon + + + + + + + + + + + - - - - + + + + opacity="1" + id="rect5583" /> - - + transform="matrix(0,0.16535947,0.16535947,0,725.90273,-2838.55)" + id="g5591"> + Icon - + x="2948" + y="-2349.2" + width="226.77" + height="226.77" + fill="none" + opacity="1" + id="rect5589" /> - - - - - - - - - - + transform="matrix(0,0.16535947,0.16535947,0,763.38972,-2838.55)" + id="g5607"> + Icon + - + transform="translate(0,-14.158)" + id="g5605"> + + + + + - - - - - - - - - - + transform="matrix(0,0.16535947,0.16535947,0,725.90273,-2838.55)" + id="g5621"> + Icon + - - - + transform="translate(0,0.78473)" + id="g5619"> + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + Icon + + id="rect5625" /> + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="69.35" + id="path5627" /> + transform="matrix(0.16535947,0,0,0.16535947,112.4373,-2112.5939)" + fill="none" + id="g5635"> + + id="rect5633" /> + + + Icon + id="rect5639" /> + + + Icon + + id="rect5647" /> + + + + + + + + + Icon + + + + + + + + - - + style="font-weight:bold;font-size:48.8375px;line-height:1.25;font-family:Orbiteer-Bold, Orbiteer;-inkscape-font-specification:'Orbiteer-Bold, Orbiteer, Bold';fill:#ffffff;stroke-width:57.6813;stroke-linecap:round;stroke-linejoin:round" + d="m 171.748,-2277.5298 h -6.39771 v -6.3977 h 6.39771 z m -6.39771,-9.621 v -25.542 h 6.39771 v 25.542 z" + id="text5677" + aria-label="!" /> - - - - - - + id="rect5679" + style="stroke-width:0.165359" /> + + + + + + + + + + + + + + + transform="matrix(1.1718364,0,0,1.1718364,412.43079,-2163.5686)" + id="g5737"> + transform="matrix(1.7796,0,0,1.7796,-1530.1,-399.47)" + id="g5733"> + x="860.78003" + y="228.25999" + width="16.034" + height="10.409" + fill="#ffffff" + id="rect5729" /> + + + + + + - + - - - - - - - - - - - - - - - - + id="rect5739" /> + + + + + + + + - - - + transform="matrix(1.1718364,0,0,1.1718364,74.938731,-2163.5686)" + id="g5765"> + d="m 21.098,6.3066 c -0.24548,5.2869 2.4454,9.7825 4.3145,13.031 0.93452,1.6244 1.6484,3.0011 1.7832,3.6641 0.06739,0.3315 0.01952,0.38019 0.02148,0.37695 0.002,-0.0032 -0.05909,0.1145 -0.52344,0.25195 -0.75492,0.22347 -1.1276,0.11622 -1.6094,-0.18359 -0.48182,-0.29982 -1.0131,-0.89475 -1.5254,-1.6211 -0.5123,-0.72635 -0.99808,-1.5571 -1.5859,-2.3008 -0.58782,-0.7437 -1.4006,-1.5859 -2.666,-1.5859 a 1.3784,1.3784 0 0 0 -0.07617,0.002 l -0.83789,0.04687 0.15234,2.752 0.76367,-0.04297 c -0.09763,1.84e-4 0.09661,0.02429 0.50195,0.53711 0.40687,0.51474 0.90092,1.3358 1.4961,2.1797 0.59518,0.84393 1.2988,1.7374 2.3203,2.373 1.0215,0.63563 2.4202,0.90888 3.8477,0.48633 0.86537,-0.25617 1.6451,-0.71488 2.0996,-1.4648 0.4545,-0.74996 0.47241,-1.6169 0.32226,-2.3555 -0.3003,-1.4772 -1.1554,-2.8592 -2.0938,-4.4902 -1.8767,-3.2622 -4.1508,-7.269 -3.9531,-11.527 z" + color="#000000" + color-rendering="auto" + fill="#ffffff" + image-rendering="auto" + opacity="1" + shape-rendering="auto" + solid-color="#000000" + style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;white-space:normal;isolation:auto;mix-blend-mode:normal" + id="path5759" /> + + transform="translate(2274,-1626.3)" + d="m -2267.7,1628.3 c -1.0946,0 -1.957,0.8604 -1.957,1.955 v 24.031 c 0,1.0946 0.8624,1.9551 1.957,1.9551 h 12.201 c 1.0946,0 1.955,-0.8605 1.955,-1.9551 v -24.031 c 0,-1.0946 -0.8604,-1.955 -1.955,-1.955 z m 3.166,2.9453 h 5.8672 c 1.0946,0 2.0039,0.9073 2.0039,2.0019 v 3.8203 c 0,1.0946 -0.9093,2.002 -2.0039,2.002 h -5.8672 c -1.0946,0 -2.0019,-0.9074 -2.0019,-2.002 v -3.8203 c 0,-1.0946 0.9073,-2.0019 2.0019,-2.0019 z m 0.9121,11.768 0.9414,1.6094 0.1446,0.2539 0.1933,0.3535 c -0.4438,0.2564 -0.7461,0.7241 -0.7461,1.2735 v 0.016 l -0.3886,-0.014 h -2.1524 c 0.1415,-1.4144 0.636,-2.6595 2.0078,-3.4922 z m 4.0156,0 c 1.0323,0.7523 1.9933,1.5929 2.0079,3.4922 h -2.1524 l -0.3711,0.014 c 1e-4,-0.01 0,-0.01 0,-0.016 0,-0.557 -0.3057,-1.0355 -0.7597,-1.2891 l 0.1914,-0.3379 0.1445,-0.2539 0.9394,-1.6094 z m -1.998,2.6504 c 0.4546,0 0.8223,0.3677 0.8223,0.8223 0,0.4546 -0.3677,0.8242 -0.8223,0.8242 -0.4546,0 -0.8242,-0.3696 -0.8242,-0.8242 0,-0.4546 0.3696,-0.8223 0.8242,-0.8223 z m -0.7383,2.1133 c 0.218,0.1259 0.4763,0.2168 0.7461,0.2168 0.2699,0 0.5125,-0.091 0.7305,-0.2168 l 0.1933,0.3203 0.1446,0.252 0.9414,1.6113 c -1.3807,0.7743 -2.7226,0.6915 -4.0352,0 l 0.9219,-1.6113 0.1641,-0.252 z" + fill="#ffffff" + id="path5763" /> - - + transform="matrix(1.1718364,0,0,1.1718364,487.42131,-2163.5686)" + id="g5781"> + - - + transform="matrix(0.63903,0,0,0.63903,-259.59,51.976)" + fill="#ffffff" + id="g5779"> + d="m 419.84,-70.354 h 33.941 l -7.4246,15.203 h -23.865 z" + id="path5769" /> + + + + + - - - - - - + transform="matrix(1.1718364,0,0,1.1718364,299.93674,-2163.5686)" + id="g5787"> + + + + + + d="m 22.955,4.5026 c -2.42,-0.77941 -5.1719,-0.21984 -7.0932,1.7015 -2.1283,2.1283 -2.5999,5.2823 -1.4142,7.8666 l -10.253,10.253 3.5134,3.5134 10.297,-10.297 c 2.5649,1.1271 5.6557,0.66402 7.7561,-1.4363 1.8865,-1.8865 2.4629,-4.5727 1.7457,-6.9606 l -4.331,4.331 -4.2647,-0.33146 -0.33146,-4.2647 z" + fill="#ffffff" + id="path5791" /> + + + + d="M 5,3 V 28 H 26.031 V 3 Z m 3.0312,2 h 2 v 2 h -2 z M 11,5 h 3 v 2 h -3 z m 4.0312,0 H 21 V 7 H 15.0312 Z M 22,5 h 2.0312 V 7 H 22 Z M 7,8 h 6.0625 v 2 H 7 Z m 7,0 h 2.0312 v 2 H 14 Z m 4,0 h 5.9688 V 18.062 H 18 Z M 7.031,11 h 2 v 2 h -2 z m 3.5312,0 h 6.4062 v 2 h -6.4062 z m -3.5625,5 h 3 v 2 h -3 z m 4,0 h 3 v 2 h -3 z m 4,0 h 2 v 2 h -2 z m -7.9688,3 h 5.9688 v 2 H 7.0309 Z m 7.7188,0 h 3.75 v 2 h -3.75 z m 5.2188,0 h 4.0312 v 2 h -4.0312 z m -11.969,3 h 7.0312 v 2 H 7.9995 Z m 9,0 h 4 v 2 h -4 z m 5.0312,0 h 1.9688 v 2 h -1.9688 z" + fill="#ffffff" + id="path5797" /> + + + + + + + + d="M 14.281,5.6562 V 9.0937 C 13.5871,9.26551 12.9404,9.54766 12.3435,9.9062 L 9.906,7.4687 7.4685,9.9062 9.906,12.3437 C 9.54746,12.9406 9.26531,13.5873 9.0935,14.2812 H 5.656 v 3.4375 h 3.4375 c 0.17181,0.6939 0.45396,1.3406 0.8125,1.9375 l -2.4375,2.4375 2.4375,2.4375 2.4375,-2.4375 c 0.5969,0.35854 1.2436,0.64069 1.9375,0.8125 v 3.4375 h 3.4375 v -3.4375 c 0.6939,-0.17181 1.3406,-0.45396 1.9375,-0.8125 l 2.4375,2.4375 2.4375,-2.4375 -2.4375,-2.4375 c 0.35854,-0.5969 0.64069,-1.2436 0.8125,-1.9375 h 3.4375 V 14.2812 H 22.906 C 22.73419,13.5873 22.45204,12.9406 22.0935,12.3437 L 24.531,9.9062 22.0935,7.4687 19.656,9.9062 C 19.0591,9.54766 18.4124,9.26551 17.7185,9.0937 V 5.6562 Z" + fill="#ffffff" + id="path5809" /> + + + + + + + + + + + + + - - - + transform="matrix(0.88371406,0,0,0.88371406,20.851303,-2173.2295)" + fill="#ffffff" + id="g5837"> + shape-rendering="auto" + solid-color="#000000" + style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;white-space:normal;isolation:auto;mix-blend-mode:normal" + id="path5833" /> + id="rect5835" /> - - - - - - - - - - - - ! - - ! - - - - - - - - - - + + id="rect5839" /> + id="path5841" /> - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="rect5883" /> + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-76.227933,-2111.4215)" + id="g5903"> + + + + + + + - - - - - - - - - - - - Icon Medium Courier - + transform="matrix(0.16535947,0,0,0.16535947,-637.53568,-2000.0965)" + id="g5909"> + - + + + + + + + + + id="rect5919" /> + + + + + + + id="path5929" /> + - - - Icon Light courier - + transform="matrix(0.20165587,0,0,0.19929123,-120.21355,-2109.7282)" + id="g5943"> + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="11.691" + id="path5935" /> + + + id="rect5941" + rx="7.0560999" /> - - - Icon Medium Passegner Shuttle - - - - - Icon Light Passegner Shuttle - - - - - - - - - Icon Heavy Courier + id="rect5945" + style="stroke-width:0.165359" /> - + - ! + - + + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + style="line-height:0%" + xml:space="preserve" + id="text5955">! - - - Icon Heavy Passegner Shuttle - - - - - Icon Medium Passegner Transport - - - - - Icon Heavy Passegner Transport - - - - - Icon Light Passegner Transport - - - - - Icon Medium Cargo Shuttle + transform="matrix(0.16535947,0,0,0.16535947,-1350.02,-2187.591)" + id="g5963"> + + + + + + stroke-width="10" + id="g5975"> + + + + + + + - + + stroke-width="10" + id="g5989"> + + + + + - - - Icon Light Cargo Shuttle + id="g5997"> + + stroke-width="10" + id="path5995" + sodipodi:nodetypes="cccc" /> + + + id="rect5999" /> + stroke-width="10" + id="path6001" /> - - - Icon Heavy Cargo Shuttle - - - - - - Icon Medium Cargo Transport + id="g6009"> + + stroke-width="10" + id="path6007" /> + + + + id="rect6011" /> + stroke-width="10" + id="path6013" /> - - - Icon Light Cargo Transport + id="g6021"> + stroke-width="16.948" + id="path6017" /> + id="rect6019" /> + + + + id="rect6025" /> - - - Icon Heavy Cargo Transport - - - - - - - - - + - - - - - - - - - - - - - - - + transform="matrix(0.33519,0,0,0.33519,1556.5,-2113.3)" + fill="#ffffff" + id="g6035"> + + + + - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-1762.4596,-2112.5939)" + fill="none" + id="g6045"> + + - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-1724.923,-2112.5939)" + fill="none" + id="g6051"> + + - - - + transform="matrix(0.16535947,0,0,0.16535947,-1762.4596,-2075.0953)" + id="g6065"> + Icon Medium Courier + - - - - - - - - - - - - - - - - - - + transform="translate(0,12.04)" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="g6063"> + + + - - - - - - - Icon - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-1723.6001,-2071.6691)" + id="g6077"> + Icon Light courier + - - - - - - + transform="translate(0,12.04)" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="g6075"> + + - - - - - - - - - + transform="matrix(0.16535947,0,0,-0.16535947,-1762.4596,-2777.0198)" + id="g6085"> + Icon Medium Passegner Shuttle + d="m 10998,-2285.4 49.607,77.982 c -35.433,28.318 -63.78,28.318 -99.213,-2e-4 z" + fill="none" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6081" /> + - - - - - - - - + + Icon Light Passegner Shuttle + + - - - + transform="matrix(0.16535947,0,0,0.16535947,-1799.9962,-2112.5939)" + id="g6099"> + d="m 10998,-2285.4 49.607,77.982 -49.606,21.231 -49.607,-21.232 z" + fill="#ffffff" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6095" /> + + + + Icon Heavy Courier + + transform="translate(0,12.04)" + fill="#ffffff" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="g6111"> + d="m 10998,-2311.6 21.261,70.867 -42.522,-2e-4 z" + opacity="1" + id="path6105" /> + d="m 10977,-2211.5 h 43.47" + opacity="1" + id="path6107" /> + d="m 10990,-2183.8 h 16.45" + opacity="1" + id="path6109" /> - - - - - - - - - - - + + Icon Heavy Passegner Shuttle + + + + id="g6129" + transform="matrix(0.16535947,0,0,0.16535947,-0.05840186,-2150.0924)"> + Icon Medium Passegner Transport + + x="226.77" + y="-1442.1" + width="226.77" + height="226.77" + fill="none" + opacity="1" + id="rect6127" /> + + + Icon Heavy Passegner Transport + + + + + Icon Light Passegner Transport + + + + + Icon Medium Cargo Shuttle - - + + stroke-width="14.173" + id="path6149" /> + + transform="rotate(90)" + d="m -1377.5,-304.72 -28.125,-35.433 28.125,-35.433" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6153" /> - - - - + transform="matrix(0.16535947,0,0,-0.16535947,37.440164,-2552.0317)" + id="g6169"> + Icon Light Cargo Shuttle + fill="none" + id="g6167"> + d="m 361.42,-1335.8 v 56.693 H 318.9 v -56.693 z" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6161" /> + - + d="m 318.9,-1360.1 21.26,-18.209 21.26,18.209" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6165" /> - - - - - - - - - - - - - - - - - - - - - - - - Icon - - - - - Icon - - - - - - - - - - + id="g6179"> + Icon Heavy Cargo Shuttle + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6173" /> + + - - - + id="g6191"> + Icon Medium Cargo Transport + + + + + + - + transform="matrix(0,0.16535947,-0.16535947,0,-126.0309,-2351.0621)" + id="g6203"> + Icon Light Cargo Transport + + + + + - + transform="matrix(0,0.16535947,-0.16535947,0,-201.03629,-2351.0703)" + fill="none" + id="g6213"> + Icon Heavy Cargo Transport - - - + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6207" /> + + transform="rotate(90)" + d="m -1377.5,-304.72 -28.125,-35.433 28.125,-35.433" + fill="none" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="14.173" + id="path6211" /> - - + stroke-miterlimit="1.4142" + id="g6311" + transform="matrix(0.16535947,0,0,0.16535947,-0.05840186,-2150.0924)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + transform="matrix(0,0.16535947,0.16535947,0,988.39435,-2613.562)" + id="g6317"> - - - - - - - - - - - - - - - - - - - - - - - - - + id="path6313" /> - - - - - - - - - - - - - - - - - - - - - - - + fill="none" + opacity="1" + id="rect6315" /> + + + Icon + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + stroke-width="0.628564" + id="path6345" /> - + id="rect6347" + style="stroke-width:0.165359" /> - - + id="path6349" + style="stroke-width:0.165359" /> + + + + + + + + + id="g6375"> - + + id="g6373"> + + + + + + + + + + + + + + + + + + + + + + + + + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="2" + id="path6403" /> + + + + + stroke-linecap="round" + id="g6415"> + + + d="m 16,3.6342 v 24.731" + stroke="#ffffeb" + stroke-width="2" + id="path6413" /> + + + + + + + + + d="M 6.6372,8.1852 C 8.9543,5.4091 12.384,3.8043 16,3.8043" + id="path6425" /> + d="m 25.363,23.815 c -2.3171,2.7761 -5.7468,4.3809 -9.3628,4.3809" + id="path6427" /> + - + d="m 16,4.1797 v 23.641" + stroke="#ffffeb" + stroke-linecap="round" + stroke-width="1.9554" + id="path6433" /> + + - + + - + + + + + + + + + stroke-linejoin="round" + stroke-width="2.5" + id="path6457" /> + + + d="M 16,16 H 28" + fill="none" + stroke="#ffffff" + stroke-linejoin="round" + stroke-width="2.5" + id="path6463" /> + + + + + + + Icon + + transform="matrix(0.20646,0,0,0.20231,2406,-1764.5)" + d="m 3174.8,-2122.4 -196.39,-340.16 h 392.78 z" + fill="none" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="69.35" + id="path6477" /> + + + Icon + + transform="matrix(0.20646,0,0,0.20231,2406,-1764.5)" + d="m 3174.8,-2122.4 -196.39,-340.16 h 392.78 z" + fill="none" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="69.35" + id="path6485" /> - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-150.24614,-2037.5951)" + id="g6495"> - - - - - - - - - - + id="rect6489" /> + + - - + transform="matrix(0.16535947,0,0,0.16535947,75.244646,-2112.5939)" + id="g6503"> - - + transform="matrix(3.4622,0,0,3.4593,1949.6,299.07)" + clip-rule="evenodd" + fill="#ffffff" + fill-rule="evenodd" + stroke-linejoin="round" + stroke-miterlimit="2" + id="g6499"> + d="m 6.2396,-20.045 v 28.68 c 0,1.3145 -1.0755,2.39 -2.39,2.39 -1.3145,0 -2.39,-1.0755 -2.39,-2.39 v -28.68 c 0,-1.3145 1.0755,-2.39 2.39,-2.39 1.3145,0 2.39,1.0755 2.39,2.39 m -10.755,0 v 28.68 c 0,1.3145 -1.0755,2.39 -2.39,2.39 -1.3145,0 -2.39,-1.0755 -2.39,-2.39 v -28.68 c 0,-1.3145 1.0755,-2.39 2.39,-2.39 1.3145,0 2.39,1.0755 2.39,2.39 m -10.755,0 v 28.68 c 0,1.3145 -1.0755,2.39 -2.39,2.39 -1.3145,0 -2.39,-1.0755 -2.39,-2.39 v -28.68 c 0,-1.3145 1.0755,-2.39 2.39,-2.39 1.3145,0 2.39,1.0755 2.39,2.39 m 16.73,-8.3649 h -16.73 v -3.346 c 0,-1.4579 1.1711,-2.629 2.629,-2.629 h 11.472 c 1.4579,0 2.629,1.1711 2.629,2.629 z m 13.742,0 H 7.4342 v -7.1699 c 0,-2.6409 -2.139,-4.7799 -4.7799,-4.7799 h -19.12 c -2.6409,0 -4.7799,2.139 -4.7799,4.7799 v 7.1699 h -7.7674 c -1.6491,0 -2.9875,1.3384 -2.9875,2.9875 0,1.6491 1.3384,2.9875 2.9875,2.9875 h 1.7925 v 34.655 c 0,2.6409 2.139,4.7799 4.7799,4.7799 h 31.07 c 2.6409,0 4.7799,-2.139 4.7799,-4.7799 v -34.655 h 1.7925 c 1.6491,0 2.9875,-1.3384 2.9875,-2.9875 0,-1.6491 -1.3384,-2.9875 -2.9875,-2.9875" + fill="#ffffff" + stroke-width="1.195" + id="path6497" /> + - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,112.44391,-1662.6127)" + id="g6535"> - + transform="matrix(4.1369,0,0,4.1335,2153.9,-2526.1)" + clip-rule="evenodd" + fill="#ffffff" + fill-rule="evenodd" + stroke-linejoin="round" + stroke-miterlimit="2" + id="g6507"> + d="M 0,30.81 -9.34,32.6 -17.08,24.85 -15.3,15.5 -1.39,1.57 c 0.77,-0.77 2.01,-0.77 2.78,0 0.77,0.77 0.77,2.02 0,2.79 l -12.86,12.88 c -0.96,0.96 -0.96,2.52 0,3.48 0.96,0.96 2.51,0.96 3.47,0 L 4.87,7.84 c 0.77,-0.77 2.01,-0.77 2.78,0 0.77,0.77 0.77,2.01 0,2.78 L -5.21,23.5 c -0.96,0.96 -0.96,2.52 0,3.48 0.96,0.96 2.51,0.96 3.47,0 L 11.13,14.1 c 0.76,-0.76 2.01,-0.76 2.78,0 0.77,0.77 0.77,2.02 0,2.79 z M -18.34,11.58 c -0.98,0.98 -1.45,2.38 -1.69,3.8 l -3.81,18.02 c -0.54,3.2 2.67,6.42 5.91,5.92 L 0.11,35.56 C 1.43,35.32 2.86,34.91 3.84,33.93 L 22.95,14.8 c 1.53,-1.54 1.53,-4.03 0,-5.57 L 6.26,-7.48 c -1.54,-1.53 -4.03,-1.53 -5.56,0 z" + fill="#ffffff" + id="path6505" /> + - + + id="path6511" /> + + + + d="m 0,-11.64 3.72,-3.77 c 0.36,-0.36 0.58,-0.86 0.58,-1.41 0,-1.1 -0.89,-2 -1.98,-2 h -5.95 c 0.49,-3.39 3.399,-6 6.93,-6 3.87,0 7,3.13 7,7 0,3.87 -3.13,7 -7,7 -1.19,0 -2.32,-0.3 -3.3,-0.82 M -16.7,0.18 v 11 c 0,1.1 -0.9,2 -2,2 h -5.5 c -1.38,0 -2.5,1.12 -2.5,2.5 0,1.38 1.12,2.5 2.5,2.5 h 20 c 1.38,0 2.5,-1.12 2.5,-2.5 0,-1.38 -1.12,-2.5 -2.5,-2.5 h -5.5 c -1.1,0 -2,-0.9 -2,-2 v -11 l 8.09,-8.19 c 1.96,1.38 4.34,2.19 6.91,2.19 6.63,0 12,-5.37 12,-12 0,-6.63 -5.37,-12 -12,-12 -6.29,0 -11.45,4.84 -11.96,11 h -22.06 c -1.09,0 -1.98,0.9 -1.98,2 0,0.56 0.23,1.07 0.6,1.43 z" + fill="#ffffff" + id="path6517" /> + - + + id="path6523" /> + + + + + d="M 0,-40 V 0 C 0,2.21 1.79,4 4,4 H 37.5 C 38.88,4 40,2.88 40,1.5 40,0.12 38.88,-1 37.5,-1 H 7 C 5.9,-1 5,-1.9 5,-3 5,-4.1 5.9,-5 7,-5 h 29 c 2.21,0 4,-1.79 4,-4 v -31 c 0,-2.21 -1.79,-4 -4,-4 H 22 v 17.99 c 0,0.26 -0.1,0.52 -0.29,0.72 -0.39,0.39 -1.03,0.39 -1.42,0 -0.26,-0.27 -4.29,-3.62 -4.29,-3.62 0,0 -4.03,3.35 -4.29,3.62 -0.39,0.39 -1.03,0.39 -1.42,0 C 10.1,-25.49 10,-25.75 10,-26.01 V -44 H 4 c -2.21,0 -4,1.79 -4,4" + fill="#ffffff" + id="path6531" /> + transform="matrix(0.16535947,0,0,0.16535947,-300.03701,-1625.1257)" + id="g6545"> + + opacity="1" + id="path6539" /> + + + transform="matrix(0.16535947,0,0,0.16535947,-1350.02,-2187.591)" + id="g6551"> + opacity="1" + id="path6547" /> + - - + transform="matrix(0.16535947,0,0,0.16535947,-1612.5116,-2187.591)" + id="g6557"> + + d="m 10155,-2299.5 -127.44,127.44 m 127.44,-3e-4 -127.44,-127.44" + fill="#535b4f" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="10" + id="path6555" /> - - - - - - - - - - - - - - - - - - + id="g6563" + transform="matrix(0.16535947,0,0,0.16535947,-0.05840186,-2150.0924)"> + + + + transform="matrix(0.16535947,0,0,0.16535947,262.43322,-2412.5841)" + id="g6573"> - - - - + transform="translate(681.69,1812.1)" + id="g6571"> + transform="matrix(4.1373,0,0,4.1339,-114.76,-1021.3)" + clip-rule="evenodd" + fill="#ffffff" + fill-rule="evenodd" + stroke-linejoin="round" + stroke-miterlimit="2" + id="g6567"> + id="path6565" /> - - - - - - - - + + + + style="font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;stroke-width:0.165359" + id="path6575" /> + id="g6579"> + id="path6577" /> - - + id="rect6581" + rx="1.6544214" + style="stroke-width:0.165359" /> - - - - - - - - + d="m 431.06473,-2308.8892 a 14.016695,14.016695 0 0 0 -14.01669,14.0167 14.016695,14.016695 0 0 0 14.01669,14.0167 14.016695,14.016695 0 0 0 14.0167,-14.0167 14.016695,14.016695 0 0 0 -14.0167,-14.0167 z m -4.96931,5.8032 h 3.37489 l -0.11416,10.0327 h -3.14654 z m 6.87565,0 h 3.37457 l -0.11385,10.0327 h -3.14653 z m -6.82992,12.1761 h 3.28342 v 3.785 h -3.28342 z m 6.87565,0 h 3.28342 v 3.785 h -3.28342 z" + fill="#ffffff" + fill-opacity="0.84706" + opacity="1" + id="path6583" + style="stroke-width:0.155024" /> + d="m 431.06473,-2306.5948 a 11.718457,11.718457 0 0 0 -11.7183,11.7183 11.718457,11.718457 0 0 0 11.7183,11.7186 11.718457,11.718457 0 0 0 11.7183,-11.7186 11.718457,11.718457 0 0 0 -11.7183,-11.7183 z m -4.96931,3.5048 h 3.37489 l -0.11416,10.0327 h -3.14654 z m 6.87565,0 h 3.37457 l -0.11385,10.0327 h -3.14653 z m -6.82992,12.176 h 3.28342 v 3.7851 h -3.28342 z m 6.87565,0 h 3.28342 v 3.7851 h -3.28342 z" + fill="#ffffff" + opacity="1" + id="path6585" + style="stroke-width:0.155024" /> + id="rect6587" + rx="1.6544214" + style="stroke-width:0.165359" /> - - - + transform="matrix(0.11446844,0,0,0.11446844,761.62037,-2123.3455)" + id="g6593"> + + - - - - - - - - - - - - - - - + transform="matrix(0.11446844,0,0,0.11446844,770.89704,-2112.5873)" + id="g6599"> + + opacity="1" + id="rect6597" /> - + - - - - - - - + opacity="1" + id="path6603" + style="stroke-width:0.165359" /> + id="rect6605" + style="stroke-width:0.165359" /> - - - + transform="matrix(0.16535947,0,0,0.16535947,-112.55079,-1850.1138)" + id="g6611"> + x="1814.1" + y="-2575.8999" + width="226.77" + height="226.77" + fill="none" + opacity="1" + id="rect6607" /> + opacity="1" + id="path6609" /> + + + d="m 396.85,159.45 c -3.5441,0 -3.5441,14.173 0,14.174 h 15.535 l -19.079,17.716 v 10.629 h 10.629 l 21.261,-19.606 v 19.607 c -0.001,3.5423 14.172,3.5423 14.172,0 v -42.521 h -10.629 z" + id="path6613" /> - + d="m 302.19,300.98 -0.15976,26.16 h -13.376 c -6.6878,1e-4 -6.6878,13.112 0,13.112 h 13.376 v 13.112 c -3e-5,6.5562 13.376,6.5562 13.376,-10e-6 v -13.112 h 13.376 c 6.6877,9e-5 6.6877,-13.112 -0.079,-13.213 l -13.297,0.10076 -0.16905,-26.228 z m 6.0798,-123.01 a 66.885,64.704 0 0 0 -66.885,64.703 66.885,64.704 0 0 0 66.885,64.705 66.885,64.704 0 0 0 66.885,-64.705 66.885,64.704 0 0 0 -66.885,-64.703 z m 0,13.37 a 53.065,51.334 0 0 1 53.064,51.333 53.065,51.334 0 0 1 -53.064,51.335 53.065,51.334 0 0 1 -53.066,-51.335 53.065,51.334 0 0 1 53.066,-51.333 z" + stroke="#ffffff" + stroke-width="0.87598px" + id="path6615" /> + - - - + + stroke="#c2c2c2" + stroke-width="0.155024px" + id="path6623" /> - + - - - - - - - - - + stroke="#c2c2c2" + stroke-width="0.152503" + id="path6627" /> - + - - - - - - - - - - - - - + id="path6631" + style="stroke-width:0.165359" /> + id="rect6633" + style="stroke-width:0.165359" /> + + - - - + stroke-width="0.681149" + id="path6639" /> + + + + id="path6645" /> - + opacity="1" + id="path6647" /> - + transform="matrix(0.16535947,0,0,0.16535947,-1125.0154,-1625.1092)" + id="g6683"> - - + fill="none" + id="g6669"> + + + stroke="#ffffff" + stroke-width="7.0866" + id="g6667"> + stroke-dasharray="7.08661, 7.08661" + id="g6661"> - + d="m 8307.4,-2507.8 -103.21,60.623" + id="path6655" /> + d="m 8304.4,-2520 -78.532,-5.4549" + id="path6657" /> + d="m 8331.2,-2497.4 19.748,68.569" + id="path6659" /> + d="m 8343.4,-2504.4 c 25.929,32.621 23.808,70.911 -8.8419,109" + id="path6663" /> + + + + + + + + + transform="matrix(0.16535947,0,0,0.16535947,-1237.526,-1625.1092)" + id="g6689"> + + d="m 8227.4,-2553.9 -22.329,16.617 c 0,0 21.32,22.801 25.456,59.108 h -15.574 v 31.151 h 15.574 c -4.1361,36.307 -25.456,59.106 -25.456,59.106 l 22.329,16.619 c 0,0 40.508,-45.917 106.85,-79.355 l 13.806,-11.946 -13.806,-11.944 c -66.344,-33.438 -106.85,-79.355 -106.85,-79.355 z m 19.47,62.028 h 9.0105 c 2.1271,0 3.8393,1.7122 3.8393,3.8392 0,2.127 -1.7122,3.8393 -3.8393,3.8393 h -9.0105 c -2.1271,0 -3.8394,-1.7123 -3.8394,-3.8393 0,-2.127 1.7123,-3.8392 3.8394,-3.8392 z m 25.43,0 h 9.0086 c 2.1271,0 3.8394,1.7122 3.8394,3.8392 0,2.127 -1.7123,3.8393 -3.8394,3.8393 H 8272.3 c -2.127,0 -3.8393,-1.7123 -3.8393,-3.8393 0,-2.127 1.7123,-3.8392 3.8393,-3.8392 z m 27.463,15.55 8.0427,0.3441 c 2.6845,4.1003 5.7744,6.3606 11.176,8.56 4.3952,1.7896 4.9984,4.8172 4.9984,4.8172 0,0 -0.6032,3.0297 -4.9984,4.8192 -5.4014,2.1995 -8.4913,4.4598 -11.176,8.5599 l -8.0427,0.3442 c 0,0 -4.9148,-8.3087 -5.9723,-13.723 -0.021,0.1074 -0.05,0.221 -0.068,0.326 v -0.65 c 0.018,0.1046 0.048,0.2172 0.068,0.324 1.058,-5.4146 5.9723,-13.721 5.9723,-13.721 z m -52.893,35.316 h 9.0105 c 2.1271,0 3.8393,1.7123 3.8393,3.8393 0,2.1271 -1.7122,3.8393 -3.8393,3.8393 h -9.0105 c -2.1271,0 -3.8394,-1.7122 -3.8394,-3.8393 0,-2.127 1.7123,-3.8393 3.8394,-3.8393 z m 25.43,0 h 9.0086 c 2.1271,0 3.8394,1.7123 3.8394,3.8393 0,2.1271 -1.7123,3.8393 -3.8394,3.8393 H 8272.3 c -2.127,0 -3.8393,-1.7122 -3.8393,-3.8393 0,-2.127 1.7123,-3.8393 3.8393,-3.8393 z" + fill="#ffffff" + id="path6687" /> + + - - + + + + id="g6707"> + + + + + + + + + + + + + fill-opacity="0.28788" + id="g6721"> + d="m 8219.5,-2382 q -9.2338,0 -9.2338,-5.8874 v -38.634 h 8.615 v 36.788 q 0,1.3935 0.2857,1.7418 0.5711,0.5574 2.3322,0.5574 h 16.183 v 5.4346 z" + id="path6715" /> + d="m 8266.9,-2407.9 q 0,-2.9263 -3.8554,-2.9263 h -8.6626 q -1.4279,0 -2.2372,0.6619 -0.7615,0.627 -0.8091,1.6373 h -8.1867 q 0.096,-3.1701 2.7131,-5.2952 2.7605,-2.2644 6.9967,-2.2644 h 12.708 q 4.0934,0 6.7588,2.2296 2.5703,2.1251 2.5703,5.1907 v 26.615 h -7.9488 v -1.3586 q -2.5702,1.4631 -5.0452,1.4631 h -7.8059 q -4.3314,0 -7.7108,-1.9509 -3.665,-2.125 -3.665,-5.1558 v -6.619 q 0,-3.0657 3.665,-5.1907 3.427,-1.9858 7.7108,-1.9858 h 9.2338 q 1.9039,0 3.5698,0.7665 z m -0.1429,17.697 v -4.3198 q 0,-1.3237 -1.0471,-2.2295 -0.9995,-0.9406 -2.951,-0.9406 h -8.0915 q -1.999,0 -2.9034,0.9406 -0.9043,0.9058 -0.9043,2.2295 v 4.3198 q 0,1.3238 0.9043,2.2645 0.9044,0.9057 2.9034,0.9057 h 8.0915 q 1.9515,0 2.951,-0.9057 1.0471,-0.9407 1.0471,-2.2645 z" + id="path6717" /> + d="m 8296.2,-2415.9 q 3.8077,0 6.9015,1.6373 v -1.6373 h 7.4728 l 0.048,40.341 q 0,3.2747 -2.0942,5.8178 -2.4275,2.8566 -6.7589,2.8566 h -10.471 q -3.3794,0 -5.9973,-1.5329 -2.7605,-1.6721 -2.7605,-4.0758 v -2.2296 h 7.2347 q -0.048,1.1148 0.9519,1.8464 1.0472,0.7315 2.5703,0.7315 h 4.2361 q 3.0938,0 4.4265,-1.498 0.4284,-0.4877 0.4284,-1.1844 v -8.9531 q -3.189,1.707 -5.2356,1.707 h -5.2358 q -6.2351,0 -9.4718,-2.9263 -2.8558,-2.6476 -2.8558,-7.3855 v -13.935 q 0,-4.4592 3.5698,-7.0023 3.6174,-2.5779 9.7098,-2.5779 z m 6.1876,25.222 v -17.523 q 0,-1.6026 -3.3794,-2.369 -0.8092,-0.209 -1.4756,-0.209 h -4.0933 q -4.9025,0 -5.5213,3.1353 -0.1903,0.9755 -0.1903,2.16 v 12.646 q 0,2.6128 0.8091,3.6579 1.5232,1.9508 4.9025,1.9508 h 4.0933 q 1.3804,0 2.6179,-0.836 2.2371,-1.5677 2.2371,-2.6128 z" + id="path6719" /> - - - + transform="matrix(0.16535947,0,0,0.16535947,-0.05838948,-2150.0925)" + id="g6735"> + fill="none" + opacity="1" + id="rect6727" /> + + stroke-width="10.63" + id="path6731" /> + stroke-width="10.63" + id="path6733" /> - - - - + id="g6773"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d="m 2366.9,-950.45 c 6.4108,-11.104 22.441,-11.102 28.853,0.002 l 77.417,134.09 c 6.41,11.105 -1.6045,24.987 -14.427,24.988 l -154.83,-0.002 c -12.822,-9.1e-4 -20.837,-13.882 -14.428,-24.987 z m -51.595,120.14 15.551,24.444 31.677,0.0231 -30.766,-53.288 z m 59.6,-29.628 -13.735,-23.79 -14.503,50.772 51.722,13.694 -13.589,-23.536 35.488,-20.489 -9.8957,-17.14 z" + color="#000000" + color-rendering="auto" + dominant-baseline="auto" + fill="#ffffff" + fill-opacity="0.78431" + image-rendering="auto" + opacity="1" + shape-rendering="auto" + solid-color="#000000" + style="font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal" + id="path6819" /> + + + + - - - - - + - - - + stroke-width="21.26" + style="paint-order:normal" + id="path6829" /> + + - - + transform="matrix(0.73021,0,0,0.74715,825.95,-554.2)" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="19.189" + id="g5509-4"> + d="m 3061.7,-2258.5953 -55.97,-81.624 h 111.33 z" + fill="#ffffff" + opacity="1" + id="path5505-2" /> - - + + + stroke-width="21.26" + style="paint-order:normal" + id="path6829-3" /> + + + + + + - - - - - - - + + id="rect6891" + style="stroke-width:0.165359" /> - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-300.15276,-1587.3742)" + opacity="0.999" + stroke-width="22.968" + id="g6895"> + - - - - + id="rect6897" + style="stroke-width:0.165359" /> - - - + + + + id="path6903" /> + id="path6905" /> - - - - - - - - - - - - + - + - + + + + id="rect6915" /> + + + + + + + + + + + + + + + + + + + - - - - - + - - + + + id="rect6954" /> - - - - - - - + fill="#ffffff" + id="g6968"> + + + + + transform="matrix(0.9375,0,0,0.9375,0,-2576)" + d="m 3940.9,3524.4 c -3.5596,0 -6.4258,2.8642 -6.4258,6.4238 v 8.9551 c 0,3.5595 2.8662,6.4257 6.4258,6.4257 h 97.457 l -38.023,-21.805 z m 95.301,0 6.7442,3.8671 c 2.7234,1.5618 4.916,2.7678 4.916,6.3274 v -3.7707 c 0,-3.5596 -2.8663,-6.4238 -6.4258,-6.4238 z" + style="paint-order:markers fill stroke" + id="path6964" /> + - - - - - + + id="rect6972" /> + transform="matrix(0.63158,0,-0.24617,0.63158,1584.6,262.39)" + fill="#ffffff" + stroke-width="1.5833" + id="g6994"> + + + + - - - - - + d="m 3694.7,676.98 33.624,19.283 h 60.516 c 3.337,0 6.0242,-2.6871 6.0242,-6.0241 v -7.2364 c 0,-3.3371 -2.6872,-6.0223 -6.0242,-6.0223 z m -6.1358,9.7412 v 3.5175 c 0,3.337 2.687,6.0241 6.0242,6.0241 l 6.2435,0.3315 -8.819,-4.9357 c -1.3011,-0.72806 -3.4487,-1.6003 -3.4487,-4.9374 z" + style="paint-order:markers fill stroke" + id="path6982" /> + + d="m 3694.6,728.15 c -3.3372,0 -6.0242,2.6852 -6.0242,6.0223 v 8.3954 c 0,3.337 2.687,6.0241 6.0242,6.0241 h 91.366 l -35.647,-20.442 z m 89.344,0 6.3226,3.6254 c 2.5532,1.4642 4.6088,2.5948 4.6088,5.9319 v -3.535 c 0,-3.3371 -2.6872,-6.0223 -6.0242,-6.0223 z" + style="paint-order:markers fill stroke" + id="path6986" /> + + + - - - - + transform="matrix(0.16535947,0,0,0.16535947,-1200.0224,-2037.5951)" + id="g7002"> + + + + + id="g7010"> + d="m 491.38,1481.7 h -29" + fill="#ffffff" + opacity="1" + stroke-width="1.0719" + id="path7004" /> + + id="rect7008" /> - + id="g7034"> + x="-680.32001" + y="-988.58002" + width="226.77" + height="226.77" + id="rect7012" /> - - + stroke="#ffffff" + stroke-linejoin="round" + id="g7032"> + d="m -485.91,-889.86 v 89.475 m -36.46,-41.25 v -48.225" + stroke-linecap="round" + stroke-width="7.0866" + style="paint-order:markers fill stroke" + id="path7014" /> + d="m -529.66,-935.59 h 51.03 c 2.7584,0 4.979,2.3694 4.979,5.3126 v 26.746 c 0,2.9432 -9.7523,12.344 -11.776,12.344 h -37.436 c -2.0236,0 -11.776,-9.4006 -11.776,-12.344 v -26.746 c 0,-2.9432 2.2207,-5.3126 4.979,-5.3126 z" + stroke-linecap="round" + stroke-width="7.0866" + style="paint-order:markers fill stroke" + id="path7016" /> + + + + + + + + + + stroke="#ffffff" + stroke-linejoin="round" + id="g7052"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + stroke-linecap="round" + stroke-width="7.0866" + id="path7036" /> + + + + + + + + + + - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,224.92969,-1850.0973)" + opacity="0.999" + id="g7077"> + d="M -471.07,-795.17 H -662.79" + fill="#ffffff" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="7.0866" + id="path7055" /> + fill="none" + id="g7063"> + x="-680.32001" + y="-988.58002" + width="226.77" + height="226.77" + id="rect7057" /> + d="m -599.78,-900.01 34.408,102.13" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="7.0866" + style="paint-order:markers fill stroke" + id="path7059" /> + d="m -584.04,-900.01 -34.408,102.13" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="7.0866" + style="paint-order:markers fill stroke" + id="path7061" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + d="m -566.93,-797.82 -24.88,-79.123 -26.637,79.064 12.879,0.0146 12.879,-39.595 12.879,39.624 z" + fill="#ffffff" + style="paint-order:markers fill stroke" + id="path7065" /> + transform="matrix(1.2275,0,0,1.2275,105.36,181.79)" + fill="none" + stroke="#ffffff" + stroke-linejoin="round" + id="g7075"> + d="m -522.99,-814.96 h 12.757" + stroke-width="5.773" + style="paint-order:markers fill stroke" + id="path7067" /> + d="m -507.63,-861.68 v 36.622" + stroke-width="5.773" + style="paint-order:markers fill stroke" + id="path7069" /> + d="m -516.6,-848.81 v 19.884" + stroke-width="2.8865" + style="paint-order:markers fill stroke" + id="path7071" /> + d="m -554.71,-794.41 a 30.234,30.234 0 0 1 12.735,-28.789 30.234,30.234 0 0 1 31.425,-1.8629 30.234,30.234 0 0 1 16.047,27.082" + opacity="0.999" + stroke-width="5.773" + style="paint-order:markers fill stroke" + id="path7073" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + id="g7107"> + d="M -471.07,-795.17 H -662.79" + fill="#ffffff" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="7.0866" + id="path7079" /> + + + + + + + + + + + + + + + + - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,299.93674,-1850.0973)" + opacity="0.999" + id="g7131"> + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="7.0866" + id="path7109" /> + + + + - + id="path7117" /> + + + + + + + - - + transform="matrix(0.16535947,0,0,0.16535947,337.42373,-1850.0973)" + opacity="0.999" + id="g7179"> + + + id="path7137" /> - + - + - + + id="rect7143" /> + id="path7145" /> + id="path7149" /> + + + + + + + + + + + + + + + - + + stroke="#ffffff" + stroke-linejoin="round" + stroke-width="14.173" + style="paint-order:markers fill stroke" + id="circle7181" /> + - + stroke="#ffffff" + id="g7207"> + - - - + d="m 1626.2,983.14 54.504,-31.468 m 42.361,-24.457 54.504,-31.468" + stroke-width="14.173" + id="path7187" /> + + + + + + + + + + d="m 1777.5,895.75 -12.764,7.3695 m -125.84,72.654 -12.764,7.3695" + stroke-width="35.433" + id="path7203" /> - - - - - - follow-ori - - - - - - - follow-pos - - - - - - - follow-icon-circle - + id="g7235"> - - - - - follow-icon-circle - - + stroke-width="12.756" + style="paint-order:markers fill stroke" + id="circle7211" /> + + stroke="#ffffff" + id="g7233"> + - + id="g7229"> + + + + + + + + + + + + transform="matrix(0.43634,0.43634,-0.43634,0.43634,1359.1,-204.07)" + stroke="#ffffff" + stroke-width="1.6205" + id="g7277"> + stroke-linejoin="round" + stroke-width="11.484" + id="g7243"> + transform="scale(-1,1)" + d="m -1686.4,936.33 a 30.005,17.198 0 0 1 13.944,19.615 30.005,17.198 0 0 1 -29.84,12.494 30.005,17.198 0 0 1 -28.361,-13.579 30.005,17.198 0 0 1 16.138,-19.054" + fill="none" + opacity="0.999" + style="paint-order:markers fill stroke" + id="path7239" /> + - - - + transform="rotate(-45,1633,891.7)" + fill="none" + id="g7259"> + - - - - - - + transform="matrix(-0.70711,0.70711,0.70711,0.70711,0,0)" + x="-509.60001" + y="1750.3" + width="40.880001" + height="61.578999" + opacity="0.999" + stroke-linejoin="round" + stroke-width="11.484" + style="paint-order:markers fill stroke" + id="rect7247" /> + stroke-width="5.7421" + id="g7257"> - - + d="m 1617.4,897.94 -27.56,27.56" + id="path7249" /> - - + d="m 1627.4,907.96 -27.56,27.56" + id="path7251" /> - - - + d="m 1607.4,887.91 -27.56,27.56" + id="path7253" /> + - - + transform="rotate(135,1687.3,954.27)" + fill="none" + id="g7275"> + d="m 1647.2,955.26 -22.251,-22.251" + stroke-width="17.226" + id="path7261" /> + + + + + + + - - - + transform="matrix(0.43634,0.43634,-0.43634,0.43634,1420.3,-265.29)" + stroke="#ffffff" + stroke-linejoin="round" + id="g7285"> + + + - - - + fill="none" + stroke="#000000" + stroke-width="14.173" + id="g7297"> + + + + + + + + + + - - - + fill="#ffffff" + id="g7315"> + + + + + + + + transform="translate(0,50.64)" + fill="#ffffff" + id="g7343"> + + + + + + + + id="g7341"> + + d="m 3737.3,606.32 c -8.7955,0 -15.923,6.9987 -15.923,15.621 0,5.5511 2.3656,12.77 6.7786,17.214 -0.03,0.028 4.2462,3.9135 4.2462,5.2112 0,1.7716 -1.3035,3.2635 -3.0322,3.6017 -9.5842,0.9301 -15.255,3.8235 -19.653,9.4189 -1.2587,1.5945 -1.9411,4.7986 -1.9867,6.5113 0.015,0.4428 0,7.3809 0,7.3809 0,3.2628 2.7131,5.8877 6.0644,5.907 l 44.933,0.25874 c 0,0 2.039,0.50811 5.8228,-3.7388 2.8361,-3.1832 1.5766,-10.997 1.1631,-14.11 -0.7349,-5.5325 -13.196,-10.306 -13.196,-10.306 -2.7329,-0.67932 -4.3789,-0.9973 -6.9818,-1.2633 -1.8805,-0.2215 -3.3362,-1.7838 -3.3362,-3.6603 0,-1.2963 4.2609,-5.1361 4.2609,-5.1361 4.4584,-4.444 6.7638,-11.708 6.7638,-17.289 0,-8.622 -7.1291,-15.621 -15.925,-15.621 z" + opacity="1" + id="path7337" /> + - - - - - - follow-icon-filled-circle + transform="matrix(0,0.16535947,-0.16535947,0,-13.535198,-3326.0463)" + id="g7353"> - - - - - manual-flight - - - + id="path7347" /> + id="rect7349" /> - + id="path7351" /> - - - manual-flight + style="stroke-width:0.165359;paint-order:markers fill stroke" + id="rect7355" /> - + + + + + + + id="path7365" /> + id="rect7367" /> + + + - + stroke-miterlimit="1.5" + stroke-width="14.173" + style="paint-order:markers fill stroke" + id="path7373" /> - - - follow-icon-circle - - + + + stroke-miterlimit="1.5" + stroke-width="10.63" + style="paint-order:markers fill stroke" + id="ellipse7379" /> + + + - - + transform="matrix(0.16535947,0,0,0.16535947,74.938731,-2150.0924)" + id="g7395"> + x="2721.3" + y="825.59003" + width="226.77" + height="226.77" + fill="none" + id="rect7389" /> - + + style="paint-order:markers fill stroke" + id="ellipse7393" /> - - - follow-icon-circle - - + + + id="rect7399" /> - - + id="g7415"> - + d="m 1764.3,-2409.5 c -5.6556,0 -10.241,4.5848 -10.241,10.24 0,5.656 4.5849,10.241 10.241,10.241 5.6557,0 10.24,-4.5849 10.24,-10.241 0,-5.6555 -4.5848,-10.24 -10.24,-10.24 z" + id="path7401" /> + + + + + + + + + + + + + + + + + + - - + id="rect7439" + style="stroke-width:0.165359" /> + - + + + + + + + + + + + + + id="rect7463" /> + + + + + + + + stroke-width="9.609" /> + stroke-width="14.062" /> - - + fill="#ffffff" + opacity="0.999" + shape-rendering="auto" + id="g7481"> + d="m 1696.9,-47.414 h 7.7214 l 5.625,146.53 h -18.971 z" + color="#000000" + color-rendering="auto" + dominant-baseline="auto" + image-rendering="auto" + solid-color="#000000" + stop-color="#000000" + style="font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;isolation:auto;mix-blend-mode:normal" + id="path7477" /> + + + + - - - - - + transform="matrix(1.1718364,0,0,1.1718364,262.43322,-2163.5686)" + id="g7495"> + + + + + id="g7503"> + + + + + + stroke-width="7.0325" + style="paint-order:markers fill stroke" + id="path7507" /> + fill="none" + stroke="#ffffff" + stroke-linejoin="round" + id="g7523"> + + stroke-width="7.0866" + id="g7519"> + d="m -527.17,-917.7 h 12.757" + style="paint-order:markers fill stroke" + id="path7511" /> + d="m -510.44,-917.7 h 12.757" + style="paint-order:markers fill stroke" + id="path7513" /> + d="m -494.03,-917.7 h 12.757" + style="paint-order:markers fill stroke" + id="path7515" /> + + - - - - - - - - - - - - - - - - - + transform="matrix(1.1291,0,0,1.3524,60.147,286.2)" + fill="none" + stroke="#ffffff" + stroke-linejoin="round" + id="g7541"> + + id="g7539"> - - + d="m -623.8,-852.25 h 16.904 l 10.607,10.607" + stroke-width="7.0866" + id="path7527" /> - - - + d="m -623.21,-861.38 0.23565,-14.833 h 17.083 l 10.607,10.607" + stroke-width="7.0866" + id="path7529" /> + + + + + + fill="#ffffff" + opacity="0.999" + shape-rendering="auto" + id="g7547"> + d="m -484.51,-858.55 0.0193,76.14 -9.0915,0.029 v -76.168 z" + color="#000000" + color-rendering="auto" + dominant-baseline="auto" + image-rendering="auto" + solid-color="#000000" + stop-color="#000000" + style="font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;isolation:auto;mix-blend-mode:normal;paint-order:markers fill stroke" + id="path7543" /> + + + + follow-ori + transform="matrix(8.0515,0,0,8.0515,-2365.4,-12162)" + id="g7735"> - - - + id="circle7731" + style="opacity:1;fill:none;stroke:#ffffff;stroke-width:18.7362;stroke-linecap:round;stroke-linejoin:round" + d="m 120.51172,3894.5098 c -53.104043,0.2344 -96.031576,43.3453 -96.039064,96.4492 m 0,0 c 0.007,0.2351 0.01477,0.4701 0.02344,0.7051 m 0,0 v 0 m 96.033204,95.7441 v 0 m 0,0 c 0.13606,0 0.27212,0.01 0.4082,0.014 m 0,0 c 52.99853,-0.011 96.06218,-42.777 96.44141,-95.7735 m 0,0 v 0 m 0,0 c 0.009,-0.2298 0.0164,-0.4596 0.0234,-0.6894 m -96.46484,-96.4649 c -0.14194,0 -0.28387,0.01 -0.42578,0.016" + transform="matrix(0.11643753,0,0,0.11643753,12.134393,852.60262)" + sodipodi:nodetypes="cccccccccccccccccc" /> + + + + follow-pos + transform="matrix(8.0515,0,0,8.0515,-2365.4,-12162)" + id="g17232"> + id="ellipse17212" + style="opacity:1;fill:none;stroke:#ffffff;stroke-width:2.18157;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;paint-order:stroke markers fill" + d="m 21.83343,1306.9618 v 0 m 0,0 c -2.713007,1.1491 -4.865843,3.3183 -5.994476,6.0399 m 0,0 c -0.0099,0.025 -0.01977,0.051 -0.02952,0.077 m 0,0 v 0 m 0.04223,8.5411 v 0 m 0,0 c 1.135631,2.7263 3.299342,4.8956 6.022684,6.0383 m 0,0 v 0 m 0,0 c 0.01464,0.01 0.02883,0.013 0.04347,0.019 m 8.511257,0.032 v 0 m 0,0 c 2.764149,-1.1186 4.97005,-3.2904 6.13153,-6.0367 m 0,0 v 0 m 0,0 c 0.01099,-0.024 0.02182,-0.049 0.03261,-0.073 m 0.0083,-8.5763 v 0 m 0,0 c -1.137523,-2.7614 -3.327957,-4.9561 -6.087153,-6.099" + sodipodi:nodetypes="cccccccccccccccccccccccccccc" /> + - - + transform="matrix(0.16535947,0,0,0.16535947,449.93099,-1700.1013)" + id="g20700"> + follow-icon-circle - + transform="matrix(8.0515,0,0,8.0515,-2365.4,-12162)" + id="g20696"> + - - - - - - - - - - - - + + + + follow-icon-circle + + + transform="translate(-6037.4904,3531.3619)" + id="g7107-9" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="rect4088-6" + transform="matrix(0.642897,0,0,0.642897,2109.27,-177.09)"> + x="2494.5" + y="-2576" + width="226.23" + height="227.32001" + style="fill:none" + id="rect7104" /> - - - - - - - - - - - - + transform="translate(-6037.4904,3531.3619)" + id="g7117" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="rect69291" + serif:id="rect6929" + transform="matrix(0.740007,0,0,0.740007,944.105,-2339.35)"> + d="m 3855.07,598.82 c 0,0 0,0 0,0 H 3628.3 c 0,0 0,0 0,0 v 226.77 c 0,0 0,0 0,0 h 226.77 c 0,0 0,0 0,0 z" + style="fill:none" + id="path7114" /> - - - + transform="translate(-6037.4904,3531.3619)" + id="g7140" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="g28661" + serif:id="g2866" + transform="matrix(0.470409,0,0,0.495153,1953.09,-2130.81)"> - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + transform="translate(-6037.4904,3531.3619)" + id="g7146" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + transform="matrix(0.693754,0,0,0.693754,3629.07,-1875.41)" + id="g7144"> + d="m 48.826,130.202 -20.547,-9.246 13,-79.623 h 56.378" + style="fill:none;stroke:#ffffff;stroke-width:21.62px" + id="path7142" /> - - - - - - - - - - - - + transform="translate(-6037.4904,3531.3619)" + id="g7152" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + transform="matrix(0.693754,0,0,0.693754,3629.07,-1875.41)" + id="g7150"> + d="m 144.313,52.144 h 47.108 c 0,0 10.182,62.345 10.182,62.345 0,0 -12.986,5.858 -12.986,5.858 -5.439,2.454 -7.862,8.862 -5.409,14.3 2.454,5.439 8.862,7.863 14.3,5.409 l 20.547,-9.27 c 4.46,-2.012 7.012,-6.768 6.224,-11.596 l -13,-79.599 c -0.854,-5.229 -5.371,-9.068 -10.669,-9.068 h -56.297 c -5.966,0 -10.811,4.844 -10.811,10.81 0,5.967 4.845,10.811 10.811,10.811 z" + style="fill:#ffffff" + id="path7148" /> - - - + transform="translate(-6037.4904,3531.3619)" + id="g7157" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="path40901" + serif:id="path4090" + transform="matrix(0.937497,0,0,0.937497,3174.89,-1895.69)"> + d="m 647.886,76.57 h 14.998 c 6.265,0 11.339,5.074 11.339,11.339 v 34.018 h 4.252 c 10.177,0 18.426,8.249 18.426,18.426 v 39.687 c 0,2.353 1.899,4.252 4.252,4.252 2.353,0 4.252,-1.899 4.252,-4.252 v -63.814 l -8.136,0.029 c -1.559,0.025 -3.121,-0.57 -4.28,-1.814 -2.353,-2.41 -2.353,-6.294 0,-8.703 l 7.2,-7.512 -9.752,-9.781 c -2.721,-2.718 -2.721,-7.112 0,-9.833 2.722,-2.725 7.118,-2.725 9.837,0 l 15.027,14.939 c 2.636,2.579 4.281,6.18 4.281,10.177 v 76.311 c 0,10.177 -8.249,18.426 -18.426,18.426 -10.177,0 -18.426,-8.249 -18.426,-18.426 v -39.687 c 0,-2.353 -1.899,-4.252 -4.252,-4.252 h -4.252 v 62.366 l -0.002,0.001 h 1.417 c 3.912,0 7.087,3.175 7.087,7.087 0,3.912 -3.175,7.087 -7.087,7.087 H 590.6 c -3.912,0 -7.087,-3.175 -7.087,-7.087 0,-3.912 3.175,-7.087 7.087,-7.087 h 1.415 v -32.118 h 30.223 v -33.081 h 31.578 c 3.458,0 6.236,-2.778 6.236,-6.236 V 96.983 c 0,-3.459 -2.778,-6.237 -6.236,-6.237 h -3.589 z m -20.664,14.176 h -4.984 v -5.65 h -29.872 c 1.25,-4.903 5.694,-8.526 10.988,-8.526 h 21.527 z" + style="fill:#ffffff;fill-rule:nonzero" + id="path7154" /> - - - - + transform="translate(-6037.4904,3531.3619)" + id="g7163" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + + + - + transform="translate(-6037.4904,3531.3619)" + id="g7169" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,524.92698,-1700.1416)" + id="g21006" + style="stroke:#ffffff"> + + + + follow-icon-filled-circle + transform="matrix(8.0515,0,0,8.0515,-2365.4,-12162)" + id="g30321"> + style="color:#000000;fill:#ffffff;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 26.216797,1304.9766 c -6.792768,0 -12.324219,5.5314 -12.324219,12.3242 0,6.7927 5.531451,12.3222 12.324219,12.3222 6.792768,0 12.322265,-5.5295 12.322265,-12.3222 0,-6.7928 -5.529497,-12.3242 -12.322265,-12.3242 z" + id="circle30319" + sodipodi:nodetypes="sssss" /> + + + + manual-flight + + transform="matrix(5.5783973,0,0,5.5634019,-4792.3655,-9719.4292)" + fill="#ffffff" + opacity="1" + id="g4833-1-4-38"> + + - - + d="m 424.87,1464.5 7.3779,-8.8015 7.3779,8.8015" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="5.7271" + id="path4829-6-3-4" + sodipodi:nodetypes="ccc" + style="fill:none" /> + x="423.39999" + y="1469.1" + width="17.68" + height="5.6332002" + rx="1.8766935" + ry="1.8766935" + fill-opacity="0.32727" + opacity="1" + id="rect4831-2-9-1" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,599.92362,-1700.1014)" + id="g32197-8"> + manual-flight + + transform="matrix(5.5783973,0,0,5.5634019,-4792.3655,-9719.4292)" + fill="#ffffff" + opacity="1" + id="g4833-1-4-38-1"> + + - - + d="m 424.87,1464.5 7.3779,-8.8015 7.3779,8.8015 z" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="5.7271" + id="path4829-6-3-4-2" + sodipodi:nodetypes="cccc" + style="fill:#ffffff" /> + x="423.39999" + y="1469.1" + width="17.68" + height="5.6332002" + rx="1.8766935" + ry="1.8766935" + fill-opacity="0.32727" + opacity="1" + id="rect4831-2-9-1-2" /> - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,637.41225,-1700.1063)" + id="g34055"> + follow-icon-circle + transform="matrix(8.0515,0,0,8.0515,-2365.4,-12162)" + id="g34051"> - - - - - - - - - - - - - - - - - - + cx="26.216" + cy="1317.3" + r="11.232" + fill="none" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="2.1816" + id="circle34049" + style="stroke:#ffffff;stroke-opacity:0.286275" /> + + transform="matrix(3.716872,0,0,3.7068806,-3760.932,-6995.354)" + fill="#ffffff" + opacity="1" + id="g4833-1-4-3"> + + + d="m 424.87,1464.5 7.3779,-8.8015 7.3779,8.8015" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="5.7271" + id="path4829-6-3-3" + sodipodi:nodetypes="ccc" + style="fill:none" /> + + + + follow-icon-circle - + transform="matrix(8.0515,0,0,8.0515,-2365.4,-12162)" + id="g38358"> + + + + + + + + + + + transform="matrix(8.0515,0,0,8.0515,1489.6599,-9440.7399)" + id="g39307"> + - - + d="m 23.132874,1314.5184 -0.05083,-4.0522 6.862653,4.0522 z" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="2.64029" + id="path4829-6-1" + sodipodi:nodetypes="cccc" + style="fill:#ffffff" /> + d="m 21.46796,1324.1169 h 9.769901 z" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="2.14552" + id="path4829-6-1-5" + sodipodi:nodetypes="ccc" + style="fill:#ffffff" /> + + + + + + + + + + + id="g13694" + transform="matrix(1.4833142,0,0,1.4833142,-1076.3987,-545.74737)"> - - + d="m 2152.1787,1132.5042 -0.4092,-32.6263 55.2546,32.6263 z" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="21.2583" + id="path4829-6-1-0" + sodipodi:nodetypes="cccc" + style="fill:#ffffff" /> + d="m 2138.7737,1209.7865 h 78.6623 z" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="17.2747" + id="path4829-6-1-5-1" + sodipodi:nodetypes="ccc" + style="fill:#ffffff" /> + + + + + + + + + + + id="g6948-3" + transform="translate(-226.77,2.6416e-5)"> - - - + id="rect6929-7" + d="m 3855.07,598.82 c 0,0 0,0 0,0 H 3628.3 c 0,0 0,0 0,0 v 226.77 c 0,0 0,0 0,0 h 226.77 c 0,0 0,0 0,0 z" + style="fill:none" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,145.77322,-1927.2344)" + id="g6003-3" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> - + id="Guided-4" + transform="matrix(7.08499,0,0,7.08499,-1328.89,-3421.38)"> + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Naval-9" + transform="matrix(7.08499,0,0,7.08499,-891.109,-4323.9)"> + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Dumb-0" + transform="matrix(7.08499,0,0,7.08499,-1558.06,-3066.57)"> + + + + + + + + + + + + + + + - + id="Smart-0" + transform="matrix(7.08499,0,0,7.08499,-1117.89,-3898.28)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Laser"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.15502397,0,0,0.32351953,112.43729,-1976.0733)" + id="g6199" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> - + id="Plasma" + transform="translate(241.9)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Cannon" + transform="translate(483.8)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Cannon-rapid" + serif:id="Cannon rapid" + transform="translate(725.7)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Cannon-rapud-dual" + serif:id="Cannon rapud dual" + transform="translate(1935.19)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Mining-Cannon" + serif:id="Mining Cannon" + transform="translate(967.589,-1.05647)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="Laser-dual" + serif:id="Laser dual" + transform="translate(1209.5)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.15502397,0,0,0.32351953,112.43729,-1976.0733)" + id="g6705" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="Plasma-dual" + serif:id="Plasma dual" + transform="translate(1451.41)"> + transform="matrix(1,-7.98104e-4,0,0.47918,0,-19.1522)" + id="g6606"> + d="M 18.766,362.85 H 124.317" + style="fill:none;stroke:#ffffff;stroke-width:27.02px;stroke-opacity:0.35" + id="path6604" /> + transform="matrix(1,-7.98104e-4,0,0.47918,0,-19.1522)" + id="g6610"> + d="M 18.766,362.85 H 124.317" + style="fill:none;stroke:#ffffff;stroke-width:17.01px;stroke-opacity:0.35" + id="path6608" /> + transform="matrix(1,-7.98104e-4,0,0.47918,0,-19.1522)" + id="g6614"> + d="M 18.766,362.85 H 124.317" + style="fill:none;stroke:#ffffff;stroke-width:8.01px;stroke-linecap:butt;stroke-dasharray:40.03, 16.01, 0, 0" + id="path6612" /> + + + + transform="matrix(2.95633,-0.00235946,0,1.41662,-656.897,-404.967)" + id="g6622"> + d="m 268.774,387.588 c 2.087,-2.087 4.917,-3.259 7.868,-3.259" + style="fill:none;stroke:#ffffff;stroke-width:5.08px;stroke-opacity:0.8" + id="path6620" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + transform="matrix(0.15502397,0,0,0.32351953,112.43729,-1976.0733)" + id="g6808" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="Cannon-dual" + serif:id="Cannon dual" + transform="translate(1693.31)"> + transform="matrix(1,-7.98104e-4,0,0.47918,0,-19.1522)" + id="g6709-5"> + d="M 18.766,362.85 H 124.317" + style="fill:none;stroke:#ffffff;stroke-width:11.01px;stroke-opacity:0.35" + id="path6707" /> + + + + + + + transform="matrix(1.17867,-9.40703e-4,0,0.564797,-165.121,-68.5024)" + id="g6721-4"> + id="circle6719" /> + transform="matrix(2.95633,-0.00235946,0,1.41662,-656.897,-404.967)" + id="g6725-1"> + d="m 268.774,387.588 c 2.087,-2.087 4.917,-3.259 7.868,-3.259" + style="fill:none;stroke:#ffffff;stroke-width:4.06px;stroke-opacity:0.8" + id="path6723" /> + transform="matrix(2.95633,-0.00235946,0,1.41662,-656.897,-404.967)" + id="g6729"> + d="m 285.569,388.815 c 1.382,1.855 2.201,4.153 2.201,6.641 0,2.013 -0.536,3.902 -1.472,5.532" + style="fill:none;stroke:#ffffff;stroke-width:4.06px;stroke-opacity:0.8" + id="path6727" /> + transform="matrix(4.65571,-0.00371574,0,2.23092,-1127.02,-726.615)" + id="g6733"> + d="m 271.113,385.8 c 1.669,-0.956 3.573,-1.471 5.529,-1.471 1.374,0 2.69,0.249 3.906,0.706" + style="fill:none;stroke:#ffffff;stroke-width:1.07px;stroke-opacity:0.46" + id="path6731-0" /> + transform="matrix(4.65571,-0.00371574,0,2.23092,-1127.02,-726.615)" + id="g6737"> + d="m 287.098,391.642 c 0.435,1.19 0.672,2.475 0.672,3.814 0,1.759 -0.409,3.422 -1.136,4.901" + style="fill:none;stroke:#ffffff;stroke-width:1.07px;stroke-opacity:0.46" + id="path6735" /> + transform="matrix(6.13867,-0.0048993,0,2.94153,-1537.27,-1007.3)" + id="g6741-4"> + d="m 268.774,387.588 c 0.352,-0.352 0.725,-0.677 1.116,-0.976" + style="fill:none;stroke:#ffffff;stroke-width:0.82px;stroke-opacity:0.33" + id="path6739-7" /> + transform="matrix(6.13867,-0.0048993,0,2.94153,-1537.27,-1007.3)" + id="g6745"> + d="m 274.608,384.516 c 0.666,-0.123 1.347,-0.187 2.034,-0.187 1.206,0 2.366,0.192 3.454,0.547 0.516,0.169 1.016,0.374 1.497,0.614" + style="fill:none;stroke:#ffffff;stroke-width:0.82px;stroke-opacity:0.33" + id="path6743" /> + transform="matrix(6.13867,-0.0048993,0,2.94153,-1537.27,-1007.3)" + id="g6749"> + d="m 284.572,387.653 c 0.718,0.729 1.336,1.557 1.832,2.461" + style="fill:none;stroke:#ffffff;stroke-width:0.82px;stroke-opacity:0.33" + id="path6747" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="rect73031" + serif:id="rect7303" + transform="matrix(1.06667,0,0,0.511127,-6289.17,1085.92)"> + - + transform="matrix(0.74995,-0.266075,0.555272,0.359361,527.236,1156.25)" + id="g6897"> + + + + + + + + + + + + + + - - - + id="Shield" + transform="matrix(1.06667,0,0,0.511127,-2902.62,1084.84)"> - + id="g5927-0" + transform="matrix(0.75529,0,0,0.75529,-2389.37,359.964)"> + + + + + + + + id="path5929-0" + transform="matrix(0.75529,0,0,0.75529,693.651,-325.152)"> + d="m 2834.7,-1394.4 c -18.52,0 -41.34,1.45 -56.88,6.86 -2.98,1.08 -5.13,3.97 -5.13,7.32 v 0.58 c 1.32,36.38 8.1,68.91 11.2,72.09 7.2,9.59 29.48,25.39 42.05,33.32 3.1,1.99 5.74,2.36 8.72,2.44 2.98,-0.08 5.62,-0.58 8.72,-2.44 12.82,-7.56 35.39,-23.73 42.54,-33.32 3.14,-3.18 9.42,-35.71 10.75,-72.09 l 0.04,-0.58 c 0,-3.35 -2.15,-6.24 -5.13,-7.32 -15.58,-5.41 -38.4,-6.86 -56.88,-6.86 z m -14.19,63.47 h 30 v 28.5 h -30 z" + style="fill:#ffffff;fill-rule:nonzero" + id="path6910" /> - + id="rect5931-1" + transform="translate(-0.0140235,4.77529e-4)"> + + + + + - + id="g59271" + serif:id="g5927" + transform="matrix(0.534071,-0.534071,0.534071,0.534071,333.351,3561.45)"> + + + + + + + + + + id="path59291" + serif:id="path5929" + transform="matrix(0.534071,-0.534071,0.534071,0.534071,2028.92,896.98)"> + d="m 2834.7,-1394.4 c -18.52,0 -41.34,1.45 -56.88,6.86 -2.98,1.08 -5.13,3.97 -5.13,7.32 v 0.58 c 1.32,36.38 8.1,68.91 11.2,72.09 7.2,9.59 29.48,25.39 42.05,33.32 3.1,1.99 5.74,2.36 8.72,2.44 2.98,-0.08 5.62,-0.58 8.72,-2.44 12.82,-7.56 35.39,-23.73 42.54,-33.32 3.14,-3.18 9.42,-35.71 10.75,-72.09 l 0.04,-0.58 c 0,-3.35 -2.15,-6.24 -5.13,-7.32 -15.58,-5.41 -38.4,-6.86 -56.88,-6.86 z m -14.19,63.47 h 30 v 28.5 h -30 z" + style="fill:#ffffff;fill-rule:nonzero" + id="path6929" /> - + id="rect59311" + serif:id="rect5931" + transform="translate(-0.0140235,4.77529e-4)"> + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.16535947,0,0,0.16535947,-222.14582,-1587.6173)" + id="g6941" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="g5295-2" + transform="translate(-3645.88,1133.9)"> - - + id="path5291-8" + d="m 6472.5,-2946.2 -12.61,12.53 -50.51,-50.52 c -1.49,-1.49 -3.52,-2.4 -5.79,-2.4 -3.68,0 -6.82,2.44 -7.86,5.75 l -0.45,1.49 c -3.02,9.5 -4.67,19.63 -4.67,30.17 0,24.6 8.93,47.09 23.73,64.41 l -1.57,2.07 c -7.28,7.23 -11.45,16.41 -12.49,25.87 -13.93,3.64 -25.01,13.98 -29.39,27.29 0,0 -0.95,2.52 -0.95,4.38 0,4.55 3.8,8.27 8.47,8.27 h 65.73 c 4.67,0 8.48,-3.72 8.48,-8.27 0,-2.6 -1.16,-4.96 -1.16,-4.96 -4.63,-13.35 -16,-23.6 -30.18,-26.95 0.91,-4.05 2.94,-7.9 6.08,-11.04 l 1.9,-2.48 c 16.74,12.94 37.74,20.63 60.56,20.63 10.38,0 20.38,-1.57 29.77,-4.55 0.45,-0.12 2.1,-0.83 2.1,-0.83 3.15,-1.15 5.42,-4.17 5.42,-7.73 0,-2.31 -0.95,-4.42 -2.52,-5.91 l -1.28,-1.24 -49.03,-49.07 12.56,-12.56 c 3.97,-3.97 3.97,-10.38 0,-14.35 -3.96,-3.97 -10.37,-3.97 -14.34,0 z m 29.72,7.36 c 0,5.7 4.63,10.33 10.34,10.33 5.7,0 10.33,-4.63 10.33,-10.33 l -0.04,-2.07 c -0.49,-10.42 -4.71,-20.67 -12.69,-28.6 -7.94,-7.98 -18.19,-12.2 -28.61,-12.7 l -2.06,-0.04 c -5.71,0 -10.34,4.63 -10.34,10.34 0,5.7 4.63,10.33 10.34,10.33 0.7,0 2.06,0.09 2.06,0.09 5.13,0.49 10.09,2.64 14.02,6.57 3.92,3.93 6.08,8.89 6.53,14.01 0,0 0.12,1.37 0.12,2.07 z m 33.07,0 c 0,5.7 4.63,10.33 10.34,10.33 5.7,0 10.33,-4.63 10.33,-10.33 l -0.04,-2.07 c -0.49,-18.89 -7.93,-37.62 -22.36,-52 -14.39,-14.43 -33.11,-21.87 -52,-22.37 l -2.07,-0.04 c -5.71,0 -10.34,4.63 -10.34,10.34 0,5.7 4.63,10.33 10.34,10.33 l 2.07,0.04 c 13.6,0.5 27.03,5.96 37.41,16.29 10.33,10.38 15.79,23.81 16.28,37.41 z" + style="fill:#ffffff;fill-rule:nonzero" /> + id="rect5293-7" + x="6349.6001" + y="-3029.5" + width="226.77" + height="226.77" + style="fill:none" /> - - + transform="matrix(0.15502397,0,0,0.32351953,374.91327,-2088.6002)" + id="g6977" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="Cabin---empty" + serif:id="Cabin - empty" + transform="matrix(1.06667,0,0,0.511127,-2883.96,1432.55)"> + transform="matrix(0.937497,0,0,0.937497,2703.71,-2802.72)" + id="g6946"> + d="M 25.496,1330.45 H 216.378" + style="fill:none;stroke:#ffffff;stroke-width:15px;stroke-linecap:butt" + id="path6944" /> + transform="matrix(0.937497,0,0,0.937497,2703.71,-2802.72)" + id="g6950"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:10px;stroke-linecap:butt" + id="path6948" /> + transform="matrix(0.937497,0,0,0.937507,2747.3,-2802.74)" + id="g6954"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:10px;stroke-linecap:butt" + id="path6952" /> + transform="matrix(0,-0.937497,0.409432,0,2276.87,-1420.23)" + id="g6958"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:12.96px;stroke-linecap:butt" + id="path6956" /> + transform="matrix(0,-0.937497,0.409432,0,2276.87,-1397.31)" + id="g6962"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:12.96px;stroke-linecap:butt" + id="path6960-1" /> + transform="matrix(0,-0.937497,0.409432,0,2276.87,-1374.41)" + id="g6966"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:12.96px;stroke-linecap:butt" + id="path6964-4" /> + transform="matrix(0.937497,0,0,0.937497,2703.71,-2813.9)" + id="g6970-9"> + d="m 216.378,1294.66 c 0,-26.33 -21.383,-47.72 -47.72,-47.72 H 73.217 c -26.338,0 -47.721,21.39 -47.721,47.72 v 95.45 c 0,26.33 21.383,47.72 47.721,47.72 h 95.441 c 26.337,0 47.72,-21.39 47.72,-47.72 z" + style="fill:none;stroke:#ffffff;stroke-width:15px;stroke-linecap:butt" + id="path6968" /> + + + + + + id="Cabin---occupied" + serif:id="Cabin - occupied" + transform="matrix(1.06667,0,0,0.511127,-2642.07,1432.55)"> + transform="matrix(0.937497,0,0,0.937497,2703.71,-2802.72)" + id="g6981"> + d="M 25.496,1330.45 H 216.378" + style="fill:none;stroke:#ffffff;stroke-width:15px;stroke-linecap:butt" + id="path6979" /> + transform="matrix(0.937497,0,0,0.937497,2703.71,-2802.72)" + id="g6985"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:10px;stroke-linecap:butt" + id="path6983" /> + transform="matrix(0.937497,0,0,0.937507,2747.3,-2802.74)" + id="g6989"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:10px;stroke-linecap:butt" + id="path6987" /> + transform="matrix(0,-0.937497,0.409432,0,2276.87,-1420.23)" + id="g6993"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:12.96px;stroke-linecap:butt" + id="path6991" /> + transform="matrix(0,-0.937497,0.409432,0,2276.87,-1397.31)" + id="g6997"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:12.96px;stroke-linecap:butt" + id="path6995" /> + transform="matrix(0,-0.937497,0.409432,0,2276.87,-1374.41)" + id="g7001"> + d="m 120.937,1330.45 v 95.45" + style="fill:none;stroke:#ffffff;stroke-width:12.96px;stroke-linecap:butt" + id="path6999" /> + transform="matrix(0.937497,0,0,0.937497,2703.71,-2813.9)" + id="g7005"> + d="m 216.378,1294.66 c 0,-26.33 -21.383,-47.72 -47.72,-47.72 H 73.217 c -26.338,0 -47.721,21.39 -47.721,47.72 v 95.45 c 0,26.33 21.383,47.72 47.721,47.72 h 95.441 c 26.337,0 47.72,-21.39 47.72,-47.72 z" + style="fill:none;stroke:#ffffff;stroke-width:15px;stroke-linecap:butt" + id="path7003" /> + + + + transform="matrix(0.91168,0,0,0.610494,2493.54,-2367.67)" + id="g7013"> + d="m 453.033,1296.11 c 0,-6.32 -3.434,-11.45 -7.664,-11.45 H 343.75 c -4.231,0 -7.665,5.13 -7.665,11.45 V 1319 c 0,6.32 3.434,11.44 7.665,11.44 h 101.619 c 4.23,0 7.664,-5.12 7.664,-11.44 z" + style="fill:#ffffff" + id="path7011" /> + transform="matrix(0.160814,0,0,0.286088,2715.41,-1881.77)" + id="g7017"> + d="m 453.033,1290.16 c 0,-3.04 -4.379,-5.5 -9.773,-5.5 h -97.401 c -5.394,0 -9.774,2.46 -9.774,5.5 v 34.79 c 0,3.03 4.38,5.49 9.774,5.49 h 97.401 c 5.394,0 9.773,-2.46 9.773,-5.49 z" + style="fill:none;stroke:#ffffff;stroke-width:20.2px;stroke-linecap:butt" + id="path7015" /> + transform="matrix(0.937497,0,0,0.937497,2476.94,-2802.73)" + id="g7021"> + d="m 351.886,1386.19 c 0,-2.75 -2.234,-4.98 -4.986,-4.98 h -49.7 c -2.753,0 -4.987,2.23 -4.987,4.98 v 31.59 c 0,2.75 2.234,4.98 4.987,4.98 h 49.7 c 2.752,0 4.986,-2.23 4.986,-4.98 z m -43.048,-0.17 h -2.77 v 32.45 h 2.77 z m 30.474,0 h -2.77 v 32.45 h 2.77 z" + style="fill:#ffffff" + id="path7019" /> - - - - - + transform="matrix(0.91168,0,0,-0.407417,2493.54,-1065.19)" + id="g7025"> + d="m 453.033,1296.11 c 0,-6.32 -2.291,-11.45 -5.114,-11.45 H 341.2 c -2.823,0 -5.115,5.13 -5.115,11.45 V 1319 c 0,6.32 2.292,11.44 5.115,11.44 h 106.719 c 2.823,0 5.114,-5.12 5.114,-11.44 z" + style="fill:#ffffff" + id="path7023" /> + transform="matrix(-0.505544,0,0,0.610494,2956.64,-2367.67)" + id="g7029"> + d="m 453.033,1296.11 c 0,-6.32 -6.193,-11.45 -13.821,-11.45 h -89.305 c -7.629,0 -13.822,5.13 -13.822,11.45 V 1319 c 0,6.32 6.193,11.44 13.822,11.44 h 89.305 c 7.628,0 13.821,-5.12 13.821,-11.44 z" + style="fill:#ffffff" + id="path7027" /> + + + + + + + + transform="matrix(0.801224,0,0,0.383931,72.126,100.555)" + id="g7040"> + d="m 306.842,998.788 c -35.118,20.092 -56.787,57.452 -56.787,97.902 H 362.85 Z" + style="fill:url(#_Linear1)" + id="path7038-7" /> + + + + + + + + + + + + transform="matrix(-0.866025,0.23959,-0.5,-0.414982,1221.23,886.165)" + id="g7058"> + d="m 362.85,1088.28 v 90.94" + style="fill:none;stroke:#ffffff;stroke-width:2px;stroke-linecap:butt" + id="path7056" /> - - + transform="matrix(0.16535947,0,0,0.16535947,224.93498,-1812.6053)" + id="g7071" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="g5265-4" + transform="translate(-3855.1,3174.8)"> + id="path5261-6" + transform="matrix(0.716449,0,0,0.716449,1282,-991.66)"> + d="m 4322.8,-3596.5 c 0,54.82 44.4,99.21 99.21,99.21 54.82,0 99.22,-44.39 99.22,-99.21 0,-54.82 -44.4,-99.21 -99.22,-99.21 -54.81,0 -99.21,44.39 -99.21,99.21 z m 20.67,0 c 0,-6.37 0.74,-12.57 2.19,-18.48 l 18.48,18.48 -4.14,24.8 16.54,16.54 v 22.69 c -20.01,-14.22 -33.07,-37.61 -33.07,-64.03 z m 60.48,-76.43 c 5.78,-1.41 11.82,-2.11 18.06,-2.11 6.91,0 13.6,0.91 19.97,2.56 l -3.43,5.7 4.13,4.14 h 12.4 l 3.43,-3.43 c 2.9,1.53 5.63,3.18 8.27,5.04 l -7.56,2.52 -8.27,8.27 8.27,4.13 v 4.14 h -8.27 v 8.27 c 0,0 5.7,4.13 12.4,4.13 6.57,0 3.64,-9.05 8.27,-12.4 4.67,-3.35 10.33,-2.61 10.33,-2.61 l 2.69,0.71 c 5.04,6.65 9.05,14.09 11.78,22.15 v 0.42 c 0,0 -5.83,-4.14 -16.53,-4.14 -10.71,0 -20.67,4.14 -20.67,4.14 0,0 -11.66,3.39 -12.4,12.4 -1.29,15.5 4.13,20.67 4.13,20.67 l 20.67,12.4 v 40.22 c -13.52,11.04 -30.8,17.65 -49.61,17.65 -8.89,0 -17.4,-1.44 -25.38,-4.17 l 21.25,-49.57 -4.14,-20.67 c 0,0 -16.41,-20.66 -24.8,-20.66 -8.39,0 -12.4,12.4 -12.4,12.4 l -8.27,-16.54 24.8,-16.53 12.41,-33.07 z" + style="fill:#ffffff;fill-rule:nonzero" + id="path7063" /> + id="path52911" + serif:id="path5291" + transform="matrix(0,0.438011,-0.438011,0,3084.45,-6494.11)"> + d="m 6472.5,-2946.2 -12.61,12.53 -50.51,-50.52 c -1.49,-1.49 -3.52,-2.4 -5.79,-2.4 -3.68,0 -6.82,2.44 -7.86,5.75 l -0.45,1.49 c -3.02,9.5 -4.67,19.63 -4.67,30.17 0,24.6 8.93,47.09 23.73,64.41 l 14.92,14.18 c 16.74,12.94 37.74,20.63 60.56,20.63 10.38,0 20.38,-1.57 29.77,-4.55 0.45,-0.12 2.1,-0.83 2.1,-0.83 3.15,-1.15 5.42,-4.17 5.42,-7.73 0,-2.31 -0.95,-4.42 -2.52,-5.91 l -1.28,-1.24 -49.03,-49.07 12.56,-12.56 c 3.97,-3.97 3.97,-10.38 0,-14.35 -3.96,-3.97 -10.37,-3.97 -14.34,0 z m 29.72,7.36 c 0,5.7 4.63,10.33 10.34,10.33 5.7,0 10.33,-4.63 10.33,-10.33 l -0.04,-2.07 c -0.49,-10.42 -4.71,-20.67 -12.69,-28.6 -7.94,-7.98 -18.19,-12.2 -28.61,-12.7 l -2.06,-0.04 c -5.71,0 -10.34,4.63 -10.34,10.34 0,5.7 4.63,10.33 10.34,10.33 0.7,0 2.06,0.09 2.06,0.09 5.13,0.49 10.09,2.64 14.02,6.57 3.92,3.93 6.08,8.89 6.53,14.01 0,0 0.12,1.37 0.12,2.07 z m 33.07,0 c 0,5.7 4.63,10.33 10.34,10.33 5.7,0 10.33,-4.63 10.33,-10.33 l -0.04,-2.07 c -0.49,-18.89 -7.93,-37.62 -22.36,-52 -14.39,-14.43 -33.11,-21.87 -52,-22.37 l -2.07,-0.04 c -5.71,0 -10.34,4.63 -10.34,10.34 0,5.7 4.63,10.33 10.34,10.33 l 2.07,0.04 c 13.6,0.5 27.03,5.96 37.41,16.29 10.33,10.38 15.79,23.81 16.28,37.41 z" + style="fill:#ffffff;fill-rule:nonzero" + id="path7066" /> + + - - - + id="g4675-0" + transform="translate(-2725.8,2040.9)"> + style="fill:none" /> + - - + transform="matrix(0.16535947,0,0,0.16535947,374.92132,-1622.6983)" + id="g7089" + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"> + id="g4847-4" + transform="translate(226.738,-14.6866)"> + id="g4821-2" + transform="matrix(-7.145,0,0,7.1312,3428.5,-12025)"> + + + + + + + id="rect4819-5" + d="m 441.08,1471.86 c 0,-1.52 -1.235,-2.76 -2.755,-2.76 h -12.17 c -1.52,0 -2.755,1.24 -2.755,2.76 v 0.11 c 0,1.53 1.235,2.76 2.755,2.76 h 12.17 c 1.52,0 2.755,-1.23 2.755,-2.76 z" + style="fill:#ffffff;fill-opacity:0.33" /> + + + + + - + id="g5375-3" + transform="translate(-5442.5,1814.2)"> + + + + + + - + id="g5727-2" + transform="matrix(7.0866,0,0,7.0866,901.856,-180.947)"> + + + + + + + id="g4092-0" + transform="translate(907.09,680.31)"> + + id="path4090-8" + d="m 2640.7,-2383.8 v -90.94 h 6.2 c 3.43,0 6.2,2.77 6.2,6.2 v 57.87 c 0,14.84 12.03,26.87 26.87,26.87 14.84,0 26.87,-12.03 26.87,-26.87 v -111.28 c 0,-5.83 -2.4,-11.08 -6.24,-14.84 l -21.92,-21.79 c -3.96,-3.97 -10.37,-3.97 -14.34,0 -3.97,3.97 -3.97,10.38 0,14.34 l 14.22,14.27 -10.5,10.95 c -3.43,3.51 -3.43,9.18 0,12.69 1.69,1.82 3.97,2.68 6.24,2.65 l 11.87,-0.04 v 93.05 c 0,3.43 -2.77,6.2 -6.2,6.2 -3.44,0 -6.21,-2.77 -6.21,-6.2 v -57.87 c 0,-14.84 -12.02,-26.87 -26.86,-26.87 h -6.2 v -49.61 c 0,-9.13 -7.4,-16.53 -16.54,-16.53 h -86.81 c -9.13,0 -16.53,7.4 -16.53,16.53 v 161.22 h -2.07 c -5.7,0 -10.33,4.63 -10.33,10.34 0,5.7 4.63,10.33 10.33,10.33 h 124.01 c 5.71,0 10.34,-4.63 10.34,-10.33 0,-5.71 -4.63,-10.34 -10.34,-10.34 z m -90.12,-157.08 h 60.36 c 5.04,0 9.09,4.05 9.09,9.09 v 43.82 c 0,5.05 -4.05,9.1 -9.09,9.1 h -60.36 c -5.04,0 -9.09,-4.05 -9.09,-9.1 v -43.82 c 0,-5.04 4.05,-9.09 9.09,-9.09 z" + style="fill:#ffffff;fill-rule:nonzero" /> + + + id="g48471" + serif:id="g4847" + transform="translate(809.467,-129.834)"> + + + + + + + + + + + + + + style="fill:none" /> - - - + transform="matrix(0.16535958,0,0,-0.16535958,-37.566909,-2327.0567)" + id="g6487-2"> + Icon - - - - - - - - - - - - - - - - - - - + fill="none" + opacity="1" + id="rect6483-2" /> + id="g4308" + transform="matrix(0.87875123,0,0,0.87875123,369.59784,-277.12016)"> - - + d="m 3015.0257,-2182.1532 -52.6513,-89.0855 h 105.3026 z" + fill="none" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="18.3762" + id="path6485-6" /> - - - + d="m 3162.7392,-2186.6664 -52.6513,-89.0855 -52.6513,89.0855" + fill="none" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="18.3762" + id="path6485-6-4" + sodipodi:nodetypes="ccc" /> - - + transform="matrix(0.16535947,0,0,0.16535947,-1312.526,-2150.1089)" + fill="none" + id="g5434" + style="opacity:0.215054" + inkscape:label="trgt-horizon"> + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + transform="matrix(0.775205,0,0,1,-63.8158,0)" + id="g3-04"> + + + + + + + transform="matrix(1.2008,0,0,1.43539,-1315.7,-2285.56)" + id="g4-9"> - - - - - - - - - - - - - - - - - - - - - - - - - + id="rect3" /> + transform="translate(-7.33555)" + id="g9-6"> + transform="matrix(1.02537,0,0,1.02537,-1497.22,-2433.57)" + id="g5-97"> - - - + cx="1190.47" + cy="1279.55" + r="48.185001" + style="fill:#ffffff;stroke:#000000;stroke-width:9.75px" + id="circle4" /> - + transform="matrix(0.192559,0,0,0.243232,-608.009,-1462.95)" + id="g8-4"> + + + + + + - - - - - - - - - - - + id="g31" + transform="matrix(0.16535947,0,0,0.16535947,-75.090003,-2150.0924)"> + x="1149.175" + y="1746.8467" + width="195.56422" + height="195.56422" + rx="6.8236547" + ry="5.4215784" + fill="#ffffff" + opacity="1" + id="rect5497-3" + style="stroke-width:2.05192" /> + - - + transform="matrix(0,0.16535947,0.16535947,0,538.37491,-2351.0508)" + id="g49"> + Icon + fill="none" + opacity="1" + id="rect48" /> + d="m 3061.385,-2168.2918 -79.6294,-135.1509 h 159.2588 z" + fill="#ffffff" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="27.835" + id="path49" /> - - + transform="matrix(0,0.16535947,0.16535947,0,575.87843,-2351.0508)" + id="g53"> + Icon + - - - + transform="matrix(2.0831259,0,0,2.0831259,-3315.9101,2423.3501)" + id="g52"> + transform="matrix(0.73021,0,0,0.74715,825.95,-554.2)" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="19.189" + id="g51"> + d="m 3061.678,-2234.9032 -53.1335,-77.4873 h 105.6879 z" + fill="#ffffff" + opacity="1" + id="path50" + style="stroke-width:18.2165" /> + - + + + fill="none" + opacity="1" + id="rect53" + transform="rotate(90)" /> + + + + + - - + transform="matrix(0,0.16535947,-0.16535947,0,-276.03283,-2351.0521)" + id="g11"> + Icon + + + + + Icon + + transform="matrix(2.0831259,0,0,2.0831259,-3315.9101,2423.3501)" + id="g13"> + transform="matrix(0.73021,0,0,0.74715,825.95,-554.2)" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="19.189" + id="g12"> + d="m 3061.678,-2234.9032 -53.1335,-77.4873 h 105.6879 z" + fill="#ffffff" + opacity="1" + id="path11" + style="stroke-width:18.2165" /> + - + id="g17" + transform="matrix(-0.16535947,0,0,0.16535947,262.44499,-2150.0924)"> + - + transform="matrix(0,2.0831259,-2.0831259,0,-4545.8092,-4531.1922)" + id="g16"> - - + transform="matrix(0.73021,0,0,0.74715,825.95,-554.2)" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="19.189" + id="g15" /> + + - - + id="g18" + transform="matrix(0.16535947,0,0,0.16535947,187.4789,-2150.1332)"> + + + + + + + + + + + + Icon + + d="m 3061.385,-2168.2918 -79.6294,-135.1509 h 159.2588 z" + fill="#ffffff" + opacity="1" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="27.835" + id="path27" + style="fill:none;stroke-width:27.837;stroke-dasharray:none" /> - - + transform="matrix(0,0.16535947,-0.16535947,0,-50.967444,-2351.0929)" + id="g32"> + Icon + - - - - - - + transform="matrix(2.0831259,0,0,2.0831259,-3315.9101,2423.3501)" + id="g30"> - + transform="matrix(0.73021,0,0,0.74715,825.95,-554.2)" + stroke="#ffffff" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="19.189" + id="g29"> + d="m 3061.678,-2234.9032 -53.1335,-77.4873 h 105.6879 z" + fill="#ffffff" + opacity="1" + id="path28" + style="fill:none;stroke-width:18.2165" /> + d="m 3114.2703,-2270.3129 -52.5591,78.1272 -53.1335,-78.1272" + fill="none" + opacity="1" + id="path29" + style="stroke-width:18.2165" /> + + - - - - Icon - - - + id="rect35" + transform="rotate(90)" /> + + + + + stroke-width="27.835" + id="path37" + style="fill:none" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - + Icon + + + stroke-width="27.835" + id="path38" + style="fill:none;stroke-width:27.837;stroke-dasharray:none" /> - - - - - Icon - - - - - Icon - + transform="matrix(0,0.16535947,0.16535947,0,838.39586,-2351.0929)" + id="g42"> + Icon + - - + transform="matrix(2.0831259,0,0,2.0831259,-3315.9101,2423.3501)" + id="g41"> + + + + - - - + transform="matrix(1.171871,0,0,1.171871,-2443.9106,-4429.9803)" + id="g7-7"> - - - - - - Icon - - - - - Icon - - + transform="matrix(0.701556,0,0,0.705611,2012.48,2183.11)" + id="g1-14"> + + - + transform="matrix(1,0,0,0.623248,165.003,866.908)" + id="g2-69" /> + + d="m 2581.5005,2198.7556 c 6.5359,0 11.8396,3.3055 11.8396,7.3791 0,4.0735 -5.3037,7.379 -11.8396,7.379 -6.536,0 -11.8496,-3.3055 -11.8496,-7.379 0,-4.0736 5.3136,-7.3791 11.8496,-7.3791 z m 0,5.5359 c 1.6364,0 2.9574,0.8233 2.9574,1.8432 0,1.0199 -1.321,1.8494 -2.9574,1.8494 -1.6365,0 -2.9575,-0.8295 -2.9575,-1.8494 0,-1.0199 1.321,-1.8432 2.9575,-1.8432 z" + style="fill:none;stroke:#ffffff;stroke-width:1.27954;stroke-dasharray:none" + id="path1-9" /> + + + + + + + + + + + + - - - + transform="matrix(1.0150605,0,0,1.0150605,-191.92748,-2667.3005)" + id="g16-5" + style="stroke-width:1.84717;stroke-dasharray:none"> - - - - - - Icon - - - - - - + transform="matrix(0.78925,0,0,0.793812,84.6027,784.426)" + id="g8-6" + style="stroke-width:2.33368;stroke-dasharray:none"> + + + transform="matrix(1.3497255,0,0,1.3497255,-2826.8087,-2162.7858)" + id="g15-3" + style="stroke-width:1.36856;stroke-dasharray:none"> + + + + + + + + + + + + + + + + + + + - - - - Icon - - - - - - + d="M 8.7818065,-1823.3076 H 28.464984 q 2.588717,0 4.418673,1.8299 1.829955,1.7854 1.829955,4.3742 v 25.9317 h -5.936195 v -10.8012 H 8.4693755 v 10.8012 H 2.5778156 v -25.9317 q 0,-2.5888 1.7853222,-4.3742 1.8299551,-1.8299 4.4186687,-1.8299 z m -0.312431,15.443 H 28.777417 v -9.2389 q 0,-0.3126 -0.312433,-0.3126 H 8.7818065 q -0.312431,0 -0.312431,0.3126 z" + id="text1" + style="font-size:39.0624px;font-family:Orbiteer-Bold, Orbiteer;-inkscape-font-specification:'Orbiteer-Bold, Orbiteer, Normal';fill:#ffffff;stroke-width:3.7194" + aria-label="A" /> - - + d="m 56.139629,-1809.476 11.709348,-13.9974 h 6.505193 v 32.3016 h -5.966831 v -23.6879 l -12.24771,14.5807 -12.292573,-14.5807 v 23.6879 h -5.921967 v -32.3016 h 6.460329 z" + id="text3" + style="font-size:39.0624px;font-family:Orbiteer-Bold, Orbiteer;-inkscape-font-specification:'Orbiteer-Bold, Orbiteer, Normal';fill:#ffffff;stroke-width:3.7386" + aria-label="M" /> + style="font-weight:bold;font-size:48.8375px;line-height:1.25;font-family:Orbiteer-Bold, Orbiteer;-inkscape-font-specification:'Orbiteer-Bold, Orbiteer, Bold';text-align:center;text-anchor:middle;fill:#ffffff;stroke-width:57.6813;stroke-linecap:round;stroke-linejoin:round" + d="m 204.01146,-2277.5298 h -6.39771 v -6.3977 h 6.39771 z m -6.39771,-9.621 v -25.542 h 6.39771 v 25.542 z m 17.14193,9.621 h -6.39771 v -6.3977 h 6.39771 z m -6.39771,-9.621 v -25.542 h 6.39771 v 25.542 z" + id="text4" + aria-label="!!" /> + style="font-weight:bold;font-size:48.8375px;line-height:1.25;font-family:Orbiteer-Bold, Orbiteer;-inkscape-font-specification:'Orbiteer-Bold, Orbiteer, Bold';text-align:center;text-anchor:middle;fill:#ffffff;stroke-width:57.6813;stroke-linecap:round;stroke-linejoin:round" + d="m 236.25642,-2277.5298 h -6.39771 v -6.3977 h 6.39771 z m -6.39771,-9.621 v -25.542 h 6.39771 v 25.542 z m 17.14193,9.621 h -6.39772 v -6.3977 h 6.39772 z m -6.39772,-9.621 v -25.542 h 6.39772 v 25.542 z m 17.14193,9.621 h -6.39771 v -6.3977 h 6.39771 z m -6.39771,-9.621 v -25.542 h 6.39771 v 25.542 z" + id="text5" + aria-label="!!!" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.1098644,0,0,0.13877607,317.1115,423.94999)" + id="g6"> + id="g1"> + id="rect1" /> - + transform="matrix(1.43901,0,0,1.12673,1036.36,675.087)" + id="g2"> + d="m 548.994,585.036 c 7.639,0 13.832,6.261 13.832,13.985 0,11.683 0,28.26 0,39.943 0,7.724 -6.193,13.985 -13.832,13.985 -32.403,0 -112.924,0 -145.327,0 -7.639,0 -13.832,-6.261 -13.832,-13.985 0,-11.683 0,-28.26 0,-39.943 0,-7.724 6.193,-13.985 13.832,-13.985 32.403,0 112.924,0 145.327,0 z" + style="fill:#ffffff;stroke:#ffffff;stroke-width:9.25px" + id="path1" /> - - - - - - + transform="matrix(1.43901,0,0,0.615177,1036.36,1071.95)" + id="g3"> + + + + + + + - - + transform="matrix(0.1098644,0,0,0.13877607,354.56575,423.8915)" + id="g10"> + transform="matrix(1.41105,0,0,1.11708,818.28,-93.7654)" + id="g9"> + + - - + transform="matrix(1.43901,0,0,1.12663,1036.36,696.018)" + id="g2-3"> + + + + + + + + + + + + transform="matrix(0,-0.6353,0.802484,0,3535.63,6880.61)"> + + transform="matrix(0,-0.6353,0.802484,0,3535.1743,6828.8021)"> + style="fill:#ffffff;fill-rule:nonzero" + id="path7-8" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aa + - diff --git a/data/pigui/libs/icons.lua b/data/pigui/libs/icons.lua index c26d2468005..27ce58a54b5 100644 --- a/data/pigui/libs/icons.lua +++ b/data/pigui/libs/icons.lua @@ -17,7 +17,7 @@ local function encode_icon(idx) end local iconsX = 16 -local iconsY = 20 +local iconsY = 21 local icons_texture_small = pigui:LoadTextureFromSVG(pigui.DataDirPath({"icons", "icons.svg"}), iconsX * 24, iconsY * 24) local icons_texture_med = pigui:LoadTextureFromSVG(pigui.DataDirPath({"icons", "icons.svg"}), iconsX * 32, iconsY * 32) diff --git a/data/pigui/themes/default.lua b/data/pigui/themes/default.lua index 223e61e1685..0ce6cbda6d4 100644 --- a/data/pigui/themes/default.lua +++ b/data/pigui/themes/default.lua @@ -654,7 +654,7 @@ theme.icons = { equip_autopilot = 302, equip_hyperdrive = 303, - -- twentieth row + -- twentieth row : icons 304 to 319 plus = 304, minus = 305, cross = 306, @@ -669,6 +669,13 @@ theme.icons = { increase_1 = 315, increase_2 = 316, increase_max = 317, + radar_2d = 318, + radar_3d = 319, + + -- twenty-first row : icons 320 to 335 + radar_automatic = 320, + radar_manual = 321, + -- 322 - 335 : empty shipmarket_compare_better = 38, shipmarket_compare_worse = 40, From 66d168516d476d9981513d13acaa7b0937458839 Mon Sep 17 00:00:00 2001 From: Michael Werle Date: Thu, 7 Nov 2024 09:09:54 +0900 Subject: [PATCH 6/8] feat(radar): refactor radar code and improve UI layout This commit is a major refactor of the radar module code. The scanner and radar were each turned into a class (table) to make the main draw function more generic. TODO: there's probably a good way to refactor this further to have both instruments derive from a base class in order to ensure the same base functionality. The layout was also modified significantly with both the left and right button bars moved further away for an overall less cluttered look. This made room for a couple of new buttons, one to switch between the scanner and the radar, and the other to indicate the current scanner zoom mode - automatic or manual. In order to get the new buttons near the radar to actually work, they had to be rendered inside a window as otherwise they are completely unresponsive the mouse. HOWEVER, placing the entire randar into the window does not work as the 3D radar's background is not rendered when it's in the window (possibly due to coordinate issues? Alternatively because it's rendered in C++ instead of LUA?) although its "pips" are. The 2D radar is rendered properly even when inside a window. Additionally: * The 'onChangeMFD' event was removed * The scanner (3D) and radar (2D azimuth) now each have their own zoom level. This prevents the radar from ending up with an auto-zoom zoom level when switching from the scanner since it only ever has manual zoom. * The ship-internals window is moved to the left a bit to avoid it encroaching on the radar area. * The autopilot controls are moved to the right a little bit to make more room for the zoom-level display. * The new buttons for the radar are aligned to the left of the radar area. * The scanner was made marginally taller. * The zoom levels are reset for both the scanner and the radar at game-end. * Add a debugReload() function to the ship-internals window. --- data/lang/ui-core/en.json | 12 + data/pigui/modules/autopilot-window.lua | 3 +- data/pigui/modules/radar.lua | 320 +++++++++++-------- data/pigui/modules/ship-internals-window.lua | 10 +- 4 files changed, 207 insertions(+), 138 deletions(-) diff --git a/data/lang/ui-core/en.json b/data/lang/ui-core/en.json index 9847762efe4..f1c1a795895 100644 --- a/data/lang/ui-core/en.json +++ b/data/lang/ui-core/en.json @@ -1159,6 +1159,18 @@ "description": "Tooltip: Current distance of the radar.", "message": "Active radar distance" }, + "HUD_RADAR_ZOOM_MODE_AUTOMATIC": { + "description": "Tooltip: Current radar zoom mode.", + "message": "Automatic zoom" + }, + "HUD_RADAR_ZOOM_MODE_MANUAL": { + "description": "Tooltip: Current radar zoom mode.", + "message": "Manual zoom" + }, + "HUD_RADAR_TOGGLE_MODE": { + "description": "Tooltip: Toggle radar mode.", + "message": "Toggle radar between 2D and 3D modes" + }, "HUD_REQUEST_TIME_ACCEL": { "description": "Tooltip: Request time acceleration {time}", "message": "Request time acceleration: {time}" diff --git a/data/pigui/modules/autopilot-window.lua b/data/pigui/modules/autopilot-window.lua index 4c6c49384b9..9d99cd1cad6 100644 --- a/data/pigui/modules/autopilot-window.lua +++ b/data/pigui/modules/autopilot-window.lua @@ -252,7 +252,8 @@ local function displayAutoPilotWindow() local current_view = Game.CurrentView() local window_h = mainButtonSize.y + smallButtonSize.y + ui.getWindowPadding().y * 2 local shift = smallButtonSize.y - local window_posx = ui.screenWidth/2 + ui.reticuleCircleRadius / 4 * 3 + -- X starting position is the edge of the scanner display. + local window_posx = ui.screenWidth/2 + ui.reticuleCircleRadius local window_posy = ui.screenHeight - window_h ui.setNextWindowPos(Vector2(window_posx, window_posy) , "Always") ui.window("AutoPilot", {"NoTitleBar", "NoResize", "NoFocusOnAppearing", "NoBringToFrontOnFocus", "NoSavedSettings", "AlwaysAutoResize"}, diff --git a/data/pigui/modules/radar.lua b/data/pigui/modules/radar.lua index eead59e9e42..a6f9ef965b9 100644 --- a/data/pigui/modules/radar.lua +++ b/data/pigui/modules/radar.lua @@ -1,14 +1,11 @@ -- Copyright © 2008-2024 Pioneer Developers. See AUTHORS.txt for details -- Licensed under the terms of the GPL v3. See licenses/GPL-3.txt -local Engine = require 'Engine' local Game = require 'Game' -local utils = require 'utils' local Event = require 'Event' local Input = require 'Input' local Lang = require 'Lang' -local lc = Lang.GetResource("core"); local lui = Lang.GetResource("ui-core"); local ui = require 'pigui' @@ -18,13 +15,13 @@ local pionillium = ui.fonts.pionillium local colors = ui.theme.colors local icons = ui.theme.icons +local SCREEN_BORDER = 4 + local MAX_RADAR_SIZE = 1000000000 local MIN_RADAR_SIZE = 1000 local DEFAULT_RADAR_SIZE = 10000 -local shouldDisplay2DRadar -local current_radar_size = DEFAULT_RADAR_SIZE -local manual_zoom = false +local shouldDisplay2DRadar = false local blobSize = 6.0 local keys = { @@ -55,31 +52,82 @@ local function getColorFor(item) return colors.radarUnknown end +local radar2d = { + icon = icons.radar_2d, + zoom = DEFAULT_RADAR_SIZE, + size = ui.reticuleCircleRadius * 0.66, + getRadius = function(self) return self.size end, + zoomIn = function(self) + self.zoom = math.max(self.zoom / 10, MIN_RADAR_SIZE) + end, + zoomOut = function(self) + self.zoom = math.min(self.zoom * 10, MAX_RADAR_SIZE) + end, + resetZoom = function(self) + self.zoom = DEFAULT_RADAR_SIZE + end, + getZoom = function(self) return self.zoom end, + isAutoZoom = function(self) return false end, +} + +local radar = require 'PiGui.Modules.RadarWidget'() +radar.minZoom = MIN_RADAR_SIZE +radar.maxZoom = MAX_RADAR_SIZE +radar.zoom = DEFAULT_RADAR_SIZE +local radar3d = { + icon = icons.radar_3d, + auto_zoom = true, + size = Vector2(ui.reticuleCircleRadius * 1.8, ui.reticuleCircleRadius * 1.4), + getRadius = function(self) return self.size.x end, + zoomIn = function(self) + if self.auto_zoom then + radar.zoom = 10 ^ math.floor(math.log(radar.zoom, 10)) + else + radar.zoom = math.max(radar.zoom / 10, MIN_RADAR_SIZE) + end + self.auto_zoom = false + end, + zoomOut = function(self) + if self.auto_zoom then + radar.zoom = 10 ^ math.ceil(math.log(radar.zoom, 10)) + else + radar.zoom = math.min(radar.zoom * 10, MAX_RADAR_SIZE) + end + self.auto_zoom = false + end, + resetZoom = function(self) + radar.zoom = DEFAULT_RADAR_SIZE + self.auto_zoom = true + end, + getZoom = function(self) return radar.zoom end, + isAutoZoom = function(self) return self.auto_zoom end, +} + -- display the 2D radar -local function display2DRadar(cntr, size) - local targets = ui.getTargetsNearby(current_radar_size) - local halfsize = size * 0.5 - local thirdsize = size * 0.3 - local twothirdsize = size * 0.7 +radar2d.draw = function(self, center) + local targets = ui.getTargetsNearby(self.zoom) + local halfsize = self.size * 0.5 + local thirdsize = self.size * 0.3 + local twothirdsize = self.size * 0.7 local fgColor = colors.uiPrimary local bgColor = colors.uiBackground:opacity(0.54) local lineThickness = 1.5 local function line(x,y) -- Uncomment to extend the radial line all the way to the outer circle - -- ui.addLine(cntr + Vector2(x, y) * halfsize, center + Vector2(x,y) * size, colors.uiPrimaryDark, lineThickness) - ui.addLine(cntr + Vector2(x, y) * thirdsize, cntr + Vector2(x,y) * twothirdsize, fgColor, lineThickness) + -- ui.addLine(center + Vector2(x, y) * halfsize, center + Vector2(x,y) * size, colors.uiPrimaryDark, lineThickness) + ui.addLine(center + Vector2(x, y) * thirdsize, center + Vector2(x,y) * twothirdsize, fgColor, lineThickness) end -- radar background and border - ui.addCircleFilled(cntr, size, bgColor, ui.circleSegments(size), 1) - ui.addCircle(cntr, size, fgColor, ui.circleSegments(size), lineThickness * 2) + ui.addCircleFilled(center, self.size, bgColor, ui.circleSegments(self.size), 1) + ui.addCircle(center, self.size, fgColor, ui.circleSegments(self.size), lineThickness * 2) -- inner circles -- Uncomment to add an additional circle dividing the 2D radar display - -- ui.addCircle(cntr, halfsize, fgColor, ui.circleSegments(halfsize), lineThickness) - ui.addCircle(cntr, thirdsize, fgColor, ui.circleSegments(thirdsize), lineThickness) - ui.addCircle(cntr, twothirdsize, fgColor, ui.circleSegments(twothirdsize), lineThickness) + -- ui.addCircle(center, halfsize, fgColor, ui.circleSegments(halfsize), lineThickness) + ui.addCircle(center, thirdsize, fgColor, ui.circleSegments(thirdsize), lineThickness) + ui.addCircle(center, twothirdsize, fgColor, ui.circleSegments(twothirdsize), lineThickness) local l = ui.oneOverSqrtTwo -- cross-lines line(-l, l) @@ -92,13 +140,13 @@ local function display2DRadar(cntr, size) local navTarget = player:GetNavTarget() local tooltip = {} for k,v in pairs(targets) do - if v.distance < current_radar_size then - local halfRadarSize = current_radar_size / 2 + if v.distance < self.zoom then + local halfRadarSize = self.zoom / 2 local alpha = 255 if v.distance > halfRadarSize then alpha = 255 * (1 - (v.distance - halfRadarSize) / halfRadarSize) end - local position = cntr + v.aep * size * 2 + local position = center + v.aep * self.size * 2 if v.body == navTarget then local color = Color(colors.navTarget.r, colors.navTarget.g, colors.navTarget.b, alpha) ui.addIcon(position, icons.square, color, Vector2(12, 12), ui.anchor.center, ui.anchor.center) @@ -118,9 +166,6 @@ local function display2DRadar(cntr, size) if #tooltip > 0 then ui.setTooltip(table.concat(tooltip, "\n")) end - -- local distance = ui.Format.Distance(current_radar_size) - -- local textcenter = cntr + Vector2((halfsize + twothirdsize) * 0.5, size) - -- local textsize = ui.addStyledText(textcenter, ui.anchor.left, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) end -- Return tooltip for target @@ -140,12 +185,7 @@ local function drawTarget(target, scale, center, color) return tooltip end -local radar = require 'PiGui.Modules.RadarWidget'() ---local currentZoomDist = MIN_RADAR_SIZE -radar.minZoom = MIN_RADAR_SIZE -radar.maxZoom = MAX_RADAR_SIZE - -local function display3DRadar(center, size) +radar3d.draw = function(self, center) local targets = ui.getTargetsNearby(MAX_RADAR_SIZE) local tooltip = {} @@ -155,176 +195,187 @@ local function display3DRadar(center, size) local maxShipDist = 0.0 local maxCargoDist = 0.0 - radar.size = size - radar.zoom = current_radar_size or DEFAULT_RADAR_SIZE - local radius = radar.radius + radar.size = self.size + radar.zoom = radar.zoom or DEFAULT_RADAR_SIZE local scale = radar.radius / radar.zoom - ui.setCursorPos(center - size / 2.0) + ui.setCursorPos(center - self.size / 2.0) -- draw targets below the plane for k, v in pairs(targets) do -- collect some values for zoom updates later maxBodyDist = math.max(maxBodyDist, v.distance) -- only snap to ships if they're less than 50km away (arbitrary constant based on crime range) - if v.body:IsShip() and v.distance < 50000 then maxShipDist = math.max(maxShipDist, v.distance) end + if v.body:IsShip() and v.distance < 50000 then + maxShipDist = math.max(maxShipDist, v.distance) + end -- only snap to cargo containers if they're less than 25km away (arbitrary) - if v.body:IsCargoContainer() and v.distance < 25000 then maxCargoDist = math.max(maxCargoDist, v.distance) end + if v.body:IsCargoContainer() and v.distance < 25000 then + maxCargoDist = math.max(maxCargoDist, v.distance) + end - if v.distance < current_radar_size and v.rel_position.y < 0.0 then - local color = (v.body == navTarget and colors.navTarget) or (v.body == combatTarget and colors.combatTarget) or getColorFor(v) + if v.distance < radar.zoom and v.rel_position.y < 0.0 then + local color = (v.body == navTarget and colors.navTarget) or + (v.body == combatTarget and colors.combatTarget) or + getColorFor(v) table.append(tooltip, drawTarget(v, scale, center, color)) end end + -- draw the radar plane itself ui.withStyleColors({ FrameBg = colors.radarBackground, FrameBgActive = colors.radarFrame, }, function() - -- draw the radar plane itself radar:Draw() end) - -- draw targets above the plane for k, v in pairs(targets) do - if v.distance < current_radar_size and v.rel_position.y >= 0.0 then - local color = (v.body == navTarget and colors.navTarget) or (v.body == combatTarget and colors.combatTarget) or getColorFor(v) + if v.distance < radar.zoom and v.rel_position.y >= 0.0 then + local color = (v.body == navTarget and colors.navTarget) or + (v.body == combatTarget and colors.combatTarget) or + getColorFor(v) table.append(tooltip, drawTarget(v, scale, center, color)) end end + -- return tooltip if mouse is over a target if #tooltip > 0 then ui.setTooltip(table.concat(tooltip, "\n")) end -- handle automatic radar zoom based on player surroundings - if not manual_zoom then + if self.auto_zoom then local maxDist = maxBodyDist if combatTarget then maxDist = combatTarget:GetPositionRelTo(player):length() * 1.4 elseif maxShipDist > 0 then maxDist = maxShipDist * 1.4 elseif maxCargoDist > 0 then - maxDist = maxCargoDist * 1.4 + maxDist = maxCargoDist * 1.4 elseif navTarget then local dist = navTarget:GetPositionRelTo(player):length() maxDist = dist > MAX_RADAR_SIZE and maxBodyDist or dist * 1.4 end - current_radar_size = math.clamp(radar.zoom + (maxDist - radar.zoom) * 0.03, - MIN_RADAR_SIZE, MAX_RADAR_SIZE) + radar.zoom = math.clamp(radar.zoom + (maxDist - radar.zoom) * 0.03, MIN_RADAR_SIZE, MAX_RADAR_SIZE) end - - -- local distance = ui.Format.Distance(current_radar_size) - -- local textwidth = ui.calcTextSize(distance).x - -- local textpos = center + Vector2(textwidth / -2, size.y * 0.42) - -- local textsize = ui.addStyledText(textpos, ui.anchor.left, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) end +-- This variable needs to be outside the function in order to capture state +-- between frames. We are trying to ensure that a mouse right-click started and +-- finished inside the radar area in order to trigger the popup. local click_on_radar = false + -- display either the 3D or the 2D radar, show a popup on right click to select local function displayRadar() if ui.optionsWindow.isOpen or Game.CurrentView() ~= "world" then return end - player = Game.player + player = player or Game.player -- only display if there actually *is* a radar installed local equipped_radar = player:GetComponent("EquipSet"):GetInstalledOfType("sensor.radar") - if #equipped_radar > 0 then - - local size = ui.reticuleCircleRadius * 0.66 - local center = Vector2(ui.screenWidth / 2, ui.screenHeight - size - 4) - local zoom = 0 - local toggle_radar = false - - -- Handle keyboard - -- TODO: Convert to axis? - if keys.radar_zoom_in:IsJustActive() then - zoom = 1 - elseif keys.radar_zoom_out:IsJustActive() then - zoom = -1 - end - if keys.radar_reset:IsJustActive() then - zoom = 0 - manual_zoom = false - current_radar_size = DEFAULT_RADAR_SIZE - end - if keys.radar_toggle_mode:IsJustActive() then - toggle_radar = true - end + -- TODO: get ship radar capability and determine functionality based on level of radar installed + if #equipped_radar == 0 then return end + + local instrument = shouldDisplay2DRadar and radar2d or radar3d + local center = Vector2(ui.screenWidth / 2, ui.screenHeight - radar2d.size - SCREEN_BORDER) + local zoom = 0 + local toggle_radar = false + + -- Handle keyboard + -- TODO: Convert to axis? + if keys.radar_zoom_in:IsJustActive() then + zoom = 1 + elseif keys.radar_zoom_out:IsJustActive() then + zoom = -1 + end + if keys.radar_reset:IsJustActive() then + zoom = 0 + instrument:resetZoom() + end + if keys.radar_toggle_mode:IsJustActive() then + toggle_radar = true + end - -- Handle mouse if it is in the radar area - local mp = ui.getMousePos() - local mouse_dist = shouldDisplay2DRadar and size or size * 1.8 - if (mp - center):length() > mouse_dist then - click_on_radar = false - end - if (mp - center):length() < mouse_dist then - if ui.isMouseClicked(1) then - click_on_radar = true - end - if not toggle_radar and click_on_radar and ui.isMouseReleased(1) then - ui.openPopup("radarselector") - end - -- TODO: figure out how to "capture" the mouse wheel to prevent - -- the game engine from using it to also zoom the viewport - if zoom == 0 then - zoom = ui.getMouseWheel() - end - end - if zoom > 0 then - -- Zoom in (decrease scanned area) - if not manual_zoom then - current_radar_size = 10 ^ math.floor(math.log(current_radar_size, 10)) - else - current_radar_size = math.max(current_radar_size / 10, MIN_RADAR_SIZE) - end - manual_zoom = true - elseif zoom < 0 then - -- Zoom out (increase scanned area) - if not manual_zoom then - current_radar_size = 10 ^ math.ceil(math.log(current_radar_size, 10)) - else - current_radar_size = math.min(current_radar_size * 10, MAX_RADAR_SIZE) - end - manual_zoom = true - end + -- Handle mouse if it is in the radar area + local mp = ui.getMousePos() + -- TODO: adjust properly for 3D radar; bit more challenging as its an ellipse + if (mp - center):length() < radar2d.getRadius(radar2d) then ui.popup("radarselector", function() if ui.selectable(lui.HUD_2D_RADAR, shouldDisplay2DRadar, {}) then - Event.Queue('onChangeMFD', 'radar') + toggle_radar = true end if ui.selectable(lui.HUD_3D_RADAR, not shouldDisplay2DRadar, {}) then - Event.Queue('onChangeMFD', 'scanner') + toggle_radar = true end end) - if toggle_radar then - shouldDisplay2DRadar = not shouldDisplay2DRadar - Event.Queue('onChangeMFD', shouldDisplay2DRadar and 'radar' or 'scanner') + if ui.isMouseClicked(1) then + click_on_radar = true end - -- Draw the actual radar - if shouldDisplay2DRadar then - display2DRadar(center, size) - else - display3DRadar(center, Vector2(ui.reticuleCircleRadius * 1.8, size * 2)) + if not toggle_radar and click_on_radar and ui.isMouseReleased(1) then + ui.openPopup("radarselector") + end + -- TODO: figure out how to "capture" the mouse wheel to prevent + -- the game engine from using it to also zoom the viewport + if zoom == 0 then + zoom = ui.getMouseWheel() end - -- Draw the range indicator - local distance = ui.Format.Distance(current_radar_size) - local textpos = Vector2(center.x + size, center.y + size) - local textsize = ui.addStyledText(textpos, ui.anchor.right, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) - -- Draw the radar mode in bottom-left corner - -- TODO: use an icon? - local mode = manual_zoom and '[M]' or '[A]' - textpos = Vector2(center.x - size, center.y + size) - ui.addStyledText(textpos, ui.anchor.left, ui.anchor.bottom, mode, colors.alertRed, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) end -end -Event.Register('onChangeMFD', function(selected) - shouldDisplay2DRadar = selected == "radar"; -end) + -- Update the zoom level + if zoom > 0 then + instrument:zoomIn() + elseif zoom < 0 then + instrument:zoomOut() + end + + -- Draw the actual radar - this can't be in a window or the 3D scanner background doesn't render + instrument:draw(center) + + -- Draw the radar buttons and info - this needs to be in a window, otherwise the buttons don't work. + local window_width = ui.reticuleCircleRadius * 1.8 + local window_height = radar2d.size / 3.5 + local window_pos = Vector2(center.x - window_width / 2, center.y + radar2d.size - window_height - SCREEN_BORDER) + local windowFlags = ui.WindowFlags {"NoTitleBar", "NoResize", "NoFocusOnAppearing", "NoBringToFrontOnFocus", "NoSavedSettings"} + ui.setNextWindowPos(window_pos, "Always") + ui.setNextWindowPadding(Vector2(0)) + ui.setNextWindowSize(Vector2(window_width, window_height), "Always") + + ui.window("radar_buttons", windowFlags, function() + + -- Draw radar mode toggle button + local icon = shouldDisplay2DRadar and radar3d.icon or radar2d.icon + local clicked = ui.mainMenuButton(icon, lui.HUD_RADAR_TOGGLE_MODE, false, Vector2(window_height)) + if toggle_radar or clicked then + shouldDisplay2DRadar = not shouldDisplay2DRadar + end + + -- Draw zoom mode indicator + if not shouldDisplay2DRadar then + local button_size = window_height / 1.5 + local tt = radar3d.auto_zoom and lui.HUD_RADAR_ZOOM_MODE_AUTOMATIC or lui.HUD_RADAR_ZOOM_MODE_MANUAL + ui.sameLine() + ui.addCursorPos(Vector2(0, window_height - button_size)) + icon = instrument:isAutoZoom() and icons.radar_automatic or icons.radar_manual + ui.mainMenuButton(icon, tt, ui.theme.buttonColors.disabled, Vector2(button_size)) + end + + -- Draw radar range + local distance = ui.Format.Distance(instrument:getZoom()) + local textpos = ui.getWindowPos() + Vector2(window_width, window_height) + ui.addStyledText(textpos, ui.anchor.right, ui.anchor.bottom, distance, colors.frame, pionillium.small, lui.HUD_RADAR_DISTANCE, colors.lightBlackBackground) + + end) -- window + +end -- function displayRadar() -- reset radar to default at game end -Event.Register("onGameEnd", function() shouldDisplay2DRadar = false end) +Event.Register("onGameEnd", function() + shouldDisplay2DRadar = false + radar2d:resetZoom() + radar3d:resetZoom() +end) -- save/load preference require 'Serializer':Register("PiguiRadar", @@ -335,7 +386,6 @@ ui.registerModule("game", { id = "game-view-radar-module", draw = displayRadar, debugReload = function() - print("Radar module reloading..") package.reimport() end }) diff --git a/data/pigui/modules/ship-internals-window.lua b/data/pigui/modules/ship-internals-window.lua index 36d896ec8aa..fc3b57168df 100644 --- a/data/pigui/modules/ship-internals-window.lua +++ b/data/pigui/modules/ship-internals-window.lua @@ -106,7 +106,7 @@ local function displayShipFunctionWindow() assert(thrust_widget_size.y >= mainButtonSize.y) local window_width = ui.getWindowPadding().x * 2 + (mainButtonSize.x + ui.getItemSpacing().x) * buttons + thrust_widget_size.x local window_height = thrust_widget_size.y + ui.getWindowPadding().y * 2 - local window_posx = ui.screenWidth/2 - ui.reticuleCircleRadius - window_width + 12 -- manual move a little closer to the center + local window_posx = ui.screenWidth/2 - ui.reticuleCircleRadius - window_width local window_posy = ui.screenHeight - window_height ui.setNextWindowPos(Vector2(window_posx, window_posy), "Always") ui.window("ShipFunctions", windowFlags, function() @@ -128,6 +128,12 @@ local function displayShipFunctionWindow() end) end -ui.registerModule("game", { id = "ship-internals-window", draw = displayShipFunctionWindow }) +ui.registerModule("game", { + id = "ship-internals-window", + draw = displayShipFunctionWindow, + debugReload = function() + package.reimport() + end, +}) return {} From 064ba217ec2588b6bfc08e79cdce17a8165ab20b Mon Sep 17 00:00:00 2001 From: Micha WERLE Date: Fri, 15 Nov 2024 11:39:35 +0900 Subject: [PATCH 7/8] feat(radar): convert input to new Lua input system Move the input control registration from C++ to Lua. From a user-perspective, the move also includes moving the configuration into a new "Ship HUD" controls page, as well as changing the default key bindings away from the arrow-keys to avoid clashing with the radial menu popups. TODO: Add an axis to control the radar zoom level. --- data/lang/input-core/en.json | 4 ++++ data/pigui/modules/radar.lua | 25 ++++++++++++++++++++----- src/Pi.cpp | 1 + src/ship/PlayerShipController.cpp | 13 ------------- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/data/lang/input-core/en.json b/data/lang/input-core/en.json index bcc20e4ba0f..128f1073655 100644 --- a/data/lang/input-core/en.json +++ b/data/lang/input-core/en.json @@ -338,6 +338,10 @@ "description": "Header for the ShipControls input page.", "message": "Ship - Controls" }, + "PAGE_SHIP_HUD": { + "description": "Header for the ShipHUD input page.", + "message": "Ship - HUD" + }, "PAGE_SHIP_VIEW": { "description": "Header for the ShipView input page.", "message": "Ship - View" diff --git a/data/pigui/modules/radar.lua b/data/pigui/modules/radar.lua index a6f9ef965b9..d93669ad59b 100644 --- a/data/pigui/modules/radar.lua +++ b/data/pigui/modules/radar.lua @@ -24,13 +24,19 @@ local DEFAULT_RADAR_SIZE = 10000 local shouldDisplay2DRadar = false local blobSize = 6.0 +local input_group = 'ShipHUD.RadarControl' local keys = { - radar_toggle_mode = Input.GetActionBinding('BindRadarToggleMode'), - radar_reset = Input.GetActionBinding('BindRadarZoomReset'), - -- TODO: Convert to Axis? - radar_zoom_in = Input.GetActionBinding('BindRadarZoomIn'), - radar_zoom_out = Input.GetActionBinding('BindRadarZoomOut'), + radar_reset = Input.RegisterActionBinding('BindRadarZoomReset', input_group, { activator = { key = Input.keys.slash } } ), + radar_toggle_mode = Input.RegisterActionBinding('BindRadarToggleMode', input_group, { activator = { key = Input.keys.semicolon } } ), + -- TODO: Add axis + radar_zoom_in = Input.RegisterActionBinding('BindRadarZoomIn', input_group, { activator = { key = Input.keys.comma } } ), + radar_zoom_out = Input.RegisterActionBinding('BindRadarZoomOut', input_group, { activator = { key = Input.keys.period } } ), } +local input_frame = Input.CreateInputFrame("ShipHudRadar", false) +input_frame:AddAction(keys.radar_reset) +input_frame:AddAction(keys.radar_toggle_mode) +input_frame:AddAction(keys.radar_zoom_in) +input_frame:AddAction(keys.radar_zoom_out) local function getColorFor(item) local body = item.body @@ -370,6 +376,15 @@ local function displayRadar() end -- function displayRadar() +-- view has changed, update input frame +Event.Register("onViewChanged", function() + if Game.CurrentView() == "world" then + input_frame:AddToStack() + else + input_frame:RemoveFromStack() + end +end) + -- reset radar to default at game end Event.Register("onGameEnd", function() shouldDisplay2DRadar = false diff --git a/src/Pi.cpp b/src/Pi.cpp index a44c0d37e07..f3fbfc5deb3 100644 --- a/src/Pi.cpp +++ b/src/Pi.cpp @@ -1216,6 +1216,7 @@ void Pi::RequestQuit() void Pi::SetView(View *v) { + // TODO: Should it be an error or warning to switch the view to itself? if (currentView) currentView->Detach(); currentView = v; if (currentView) currentView->Attach(); diff --git a/src/ship/PlayerShipController.cpp b/src/ship/PlayerShipController.cpp index ca5d684a02c..d35fa3abc50 100644 --- a/src/ship/PlayerShipController.cpp +++ b/src/ship/PlayerShipController.cpp @@ -166,13 +166,6 @@ REGISTER_INPUT_BINDING(PlayerShipController) auto landingGroup = controlsPage->GetBindingGroup("LandingControl"); input->AddActionBinding("BindToggleLandingGear", landingGroup, Action({ SDLK_n })); input->AddAxisBinding("BindControlLandingGear", landingGroup, Axis()); - - auto radarGroup = controlsPage->GetBindingGroup("RadarControl"); - input->AddActionBinding("BindRadarZoomReset", radarGroup, Action({ SDLK_DOWN })); - input->AddActionBinding("BindRadarToggleMode", radarGroup, Action({ SDLK_UP })); - input->AddActionBinding("BindRadarZoomIn", radarGroup, Action({ SDLK_LEFT })); - input->AddActionBinding("BindRadarZoomOut", radarGroup, Action({ SDLK_RIGHT })); - input->AddAxisBinding("BindRadarZoom", radarGroup, Axis()); } PlayerShipController::PlayerShipController() : @@ -250,12 +243,6 @@ void PlayerShipController::InputBinding::RegisterBindings() toggleLandingGear = AddAction("BindToggleLandingGear"); controlLandingGear = AddAxis("BindControlLandingGear"); - - AddAction("BindRadarToggleMode"); - AddAction("BindRadarZoomReset"); - // TODO: Convert to axis? - AddAction("BindRadarZoomIn"); - AddAction("BindRadarZoomOut"); } PlayerShipController::~PlayerShipController() From 24bb8183e2a5642741c1621df76e52fee8e4bcc1 Mon Sep 17 00:00:00 2001 From: Micha WERLE Date: Sat, 16 Nov 2024 09:32:05 +0900 Subject: [PATCH 8/8] ui(hud): add translation for target radial key bind --- data/lang/input-core/en.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/lang/input-core/en.json b/data/lang/input-core/en.json index 128f1073655..93615bf1bae 100644 --- a/data/lang/input-core/en.json +++ b/data/lang/input-core/en.json @@ -179,6 +179,10 @@ "description": "Descriptive name for the SpeedControl axis.", "message": "Set Target Speed" }, + "BIND_TARGET_RADIAL": { + "description": "Descriptive name for opening the TargetRadial popup.", + "message": "Open Target Radial Menu" + }, "BIND_TARGET_OBJECT": { "description": "Descriptive name for the TargetObject action.", "message": "Target Object"