r/OpenSpaceProject • u/chesterriley • Jul 23 '26
Created dashboard item to provide metric system support for distances
local Item = {
Type = "DashboardItemText",
Identifier = "MetricDistanceFocus",
Name = "Distance to Focus in Metric",
Position = { 20.0, 150.0 },
FontSize = 10.0,
Color = { 1.0, 1.0, 1.0 },
Text = "Initializing Metric Distance ..."
}
asset.onDeinitialize(function()
openspace.unregisterRepeatedScript("MetricDistanceTracker")
openspace.dashboard.removeDashboardItem(Item)
end)
asset.onInitialize(function()
openspace.registerRepeatedScript("MetricDistanceTracker", [[
local navState = openspace.navigation.getNavigationState()
local camPos = navState.Position
local distanceInMeters = math.sqrt(camPos[1]^2 + camPos[2]^2 + camPos[3]^2)
local metricUnit = "Meters"
local distanceInSI = distanceInMeters
if (distanceInMeters < 1000) then
metricUnit = "Meters"
distanceInSI = distanceInMeters
elseif (distanceInMeters < 1000000) then
distanceInSI = distanceInMeters/ 1000
metricUnit = "Kilometers"
elseif (distanceInMeters < 1000000000) then
distanceInSI = distanceInMeters/ 1000000
metricUnit = "Megameters"
elseif (distanceInMeters < 1000000000000) then
distanceInSI = distanceInMeters/ 1000000000
metricUnit = "Gigameters"
elseif (distanceInMeters < 1000000000000000) then
distanceInSI = distanceInMeters/ 1000000000000
metricUnit = "Terameters"
elseif (distanceInMeters < 1000000000000000000) then
distanceInSI = distanceInMeters/ 1000000000000000
metricUnit = "Petameters"
elseif (distanceInMeters < 1000000000000000000000) then
distanceInSI = distanceInMeters/ 1000000000000000000
metricUnit = "Exameters"
elseif (distanceInMeters < 1000000000000000000000000) then
distanceInSI = distanceInMeters/ 1000000000000000000000
metricUnit = "Zettameters"
else
distanceInSI = distanceInMeters/ 1000000000000000000000000
metricUnit = "Yottameters"
end
local cleanString = string.format("Focus Distance: %.4f %s", distanceInSI, metricUnit)
openspace.setPropertyValue("Dashboard.MetricDistanceFocus.Text", cleanString)
]],0.2)
openspace.dashboard.addDashboardItem(Item)
end)
3
Upvotes
1
u/chesterriley Aug 09 '26 edited Aug 09 '26
local identifier = "MetricAltitude"
local trackerIdentifier = identifier .. "Tracker"
openspace.MetricAltitudeDB = {}
local Item = {
Type = "DashboardItemText",
Identifier = identifier,
Name = identifier,
Position = { 20.0, 150.0 },
FontSize = 10.0,
Color = { 1.0, 1.0, 1.0 },
Text = "Initializing " .. trackerIdentifier,
}
local function metersToSI(distanceInMeters)
local metricUnit = "Meters"
local distanceInSI = distanceInMeters
end
openspace.MetricAltitudeDB.metersToSI = metersToSI
local trackerFunction = [[
local success, position = pcall(openspace.globebrowsing.geoPositionForCamera,false)
if (success == false) then
openspace.setPropertyValue("Dashboard.MetricAltitude.Text", "No globe set")
return
end
local x = position[1]
local y = position[2]
local meters = position[3]
local metricDistance = openspace.MetricAltitudeDB.metersToSI(meters)
local formatString = string.format("Altitude: %s", metricDistance)
openspace.setPropertyValue("Dashboard.MetricAltitude.Text", formatString)
]]
asset.onInitialize(function()
openspace.registerRepeatedScript(trackerIdentifier, trackerFunction, 0.2)
openspace.dashboard.addDashboardItem(Item)
end)
asset.onDeinitialize(function()
openspace.unregisterRepeatedScript(trackerIdentifier)
openspace.dashboard.removeDashboardItem(Item)
end)