Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(radar): capture mouse wheel for zooming radar #5978

Merged
merged 3 commits into from
Nov 25, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 32 additions & 21 deletions data/pigui/modules/radar.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ local pionillium = ui.fonts.pionillium
local colors = ui.theme.colors
local icons = ui.theme.icons

local SCREEN_BORDER = 4
local SCREEN_BORDER = 6

local MAX_RADAR_SIZE = 1000000000
local MIN_RADAR_SIZE = 1000
Expand Down Expand Up @@ -112,12 +112,13 @@ local radar3d = {
-- display the 2D radar
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 lineThickness = 1.5
local size = self.size - lineThickness
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)
-- Uncomment to extend the radial line all the way to the outer circle
Expand All @@ -126,8 +127,8 @@ radar2d.draw = function(self, center)
end

-- radar background and border
ui.addCircleFilled(center, self.size, bgColor, ui.circleSegments(self.size), 1)
ui.addCircle(center, self.size, fgColor, ui.circleSegments(self.size), lineThickness * 2)
ui.addCircleFilled(center, size, bgColor, ui.circleSegments(size), 1)
ui.addCircle(center, size, fgColor, ui.circleSegments(size), lineThickness * 2)

-- inner circles
-- Uncomment to add an additional circle dividing the 2D radar display
Expand All @@ -152,7 +153,7 @@ radar2d.draw = function(self, center)
if v.distance > halfRadarSize then
alpha = 255 * (1 - (v.distance - halfRadarSize) / halfRadarSize)
end
local position = center + v.aep * self.size * 2
local position = center + v.aep * 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)
Expand Down Expand Up @@ -204,7 +205,7 @@ radar3d.draw = function(self, center)
radar.size = self.size
radar.zoom = radar.zoom or DEFAULT_RADAR_SIZE
local scale = radar.radius / radar.zoom
ui.setCursorPos(center - self.size / 2.0)
ui.setCursorScreenPos(center - self.size / 2.0)

-- draw targets below the plane
for k, v in pairs(targets) do
Expand Down Expand Up @@ -336,43 +337,53 @@ local function displayRadar()
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.
-- Draw the radar, radar buttons and info
-- This is in a window so the buttons work and the mouse-wheel is captured
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 window_height = radar2d.size * 2
local window_pos = Vector2(center.x - window_width / 2, center.y - window_height / 2)
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", windowFlags, function()

ui.window("radar_buttons", windowFlags, function()
-- Draw the actual radar
instrument:draw(center)

-- Draw radar mode toggle button
local toggle_button_size = radar2d.size / 3.5
ui.setCursorPos(Vector2(0, window_height - toggle_button_size))
local icon = shouldDisplay2DRadar and radar3d.icon or radar2d.icon
local clicked = ui.mainMenuButton(icon, lui.HUD_RADAR_TOGGLE_MODE, false, Vector2(window_height))
local clicked = ui.mainMenuButton(icon, lui.HUD_RADAR_TOGGLE_MODE, false, Vector2(toggle_button_size))
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 button_size = toggle_button_size / 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))
ui.addCursorPos(Vector2(0, toggle_button_size - button_size))
icon = instrument:isAutoZoom() and icons.radar_automatic or icons.radar_manual
ui.mainMenuButton(icon, tt, ui.theme.buttonColors.disabled, Vector2(button_size))
local theme = instrument:isAutoZoom() and ui.theme.buttonColors.disabled or ui.theme.buttonColors.default
local clicked = ui.mainMenuButton(icon, tt, theme, Vector2(button_size))
if clicked then
if instrument:isAutoZoom() then
instrument:zoomIn()
else
instrument:resetZoom()
end
end
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) -- radar window

end -- function displayRadar()

Expand Down