local M = {} local cbor = require("cbor"); -- Connection settings local ip = "127.0.0.1" local port = 4444 local udpSocket = nil -- Car settings local minOilTemp = 50 local maxOilTemp = 90 local coldOilRPMCoef = 0.5 local function sendPackage(ip, port, id) if not electrics.values.watertemp then -- vehicle not completly initialized, skip sending package return end local data = { app = "beamNG", car = { brand = "none", --FIXME: value model = "none" --FIXME: value }, gear = electrics.values.gearIndex, speed = electrics.values.wheelspeed or electrics.values.airspeed, axis = { t = electrics.values.throttle, b = electrics.values.brake, c = electrics.values.clutch } } if electrics.values.rpm then data.rpm = { cur = electrics.values.rpm } if electrics.values.maxrpm then data.rpm.max = electrics.values.maxrpm local currentTempRedlineCoef = linearScale(electrics.values.oiltemp or 0, minOilTemp, maxOilTemp, coldOilRPMCoef, 1) data.rpm.rl = electrics.values.maxrpm * currentTempRedlineCoef end end if electrics.values.oiltemp then data.oil = { p = 0, --FIXME: value t = electrics.values.oiltemp } end if electrics.values.fuel then data.fuel = electrics.values.fuel end --TODO: lights -- lights = { -- dash = 0, --FIXME: value -- on = 0 --FIXME: value -- }, --log("I", "ExtDash", "data: " .. tostring(data) ) local packet = cbor.encode( data ) udpSocket:sendto(packet, ip, port) end local function updateGFX(dt) if not playerInfo.firstPlayerSeated then return end sendPackage(ip, port, 0) end local function init(jbeamData) minOilTemp = jbeamData.minOilTemp or minOilTemp maxOilTemp = jbeamData.maxOilTemp or maxOilTemp coldOilRPMCoef = jbeamData.coldOilRPMCoef or coldOilRPMCoef end local function onExtensionLoaded() if not udpSocket then udpSocket = socket.udp() end ip = settings.getValue("outgaugeIP") port = tonumber(settings.getValue("outgaugePort")) log("I", "ExtDash", "Extension loaded, connecting to " .. tostring(ip) .. " (" .. tostring(port) .. ")" ) return true end local function onExtensionUnloaded() if udpSocket then udpSocket:close() end udpSocket = nil end -- public interface M.onExtensionLoaded = onExtensionLoaded M.onExtensionUnloaded = onExtensionUnloaded M.init = init M.updateGFX = updateGFX -- other functions M.sendPackage = sendPackage return M