From 17ef33a3fc62a31565193320f1f5583077403b19 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Fri, 15 Nov 2013 10:09:12 +0100 Subject: SliMax Manager 3.++ --- scripts/simracedlx.lua | 537 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 537 insertions(+) create mode 100644 scripts/simracedlx.lua (limited to 'scripts/simracedlx.lua') diff --git a/scripts/simracedlx.lua b/scripts/simracedlx.lua new file mode 100644 index 0000000..fe716ea --- /dev/null +++ b/scripts/simracedlx.lua @@ -0,0 +1,537 @@ +-- SIMRACE DELUXE Lua Script v1.5 +-- Copyright (c)2012-2013 by Zappadoc - All Rights Reserved. +-- this script builds all functions associated with +-- left and right panels of SIMRACE-DLX device +-- last change by Zappadoc - 2013-09 + +-- ============================================================ +-- Left and Right Panel functions +-- ============================================================ +function srdlxLeftDigitsEvent(swFunction) + return srdlxDigitsEvent(swFunction, 0) +end +function srdlxRightDigitsEvent(swFunction) + return srdlxDigitsEvent(swFunction, 1) +end +-- IN function of left panel +-- param: recieve from SLI Manager the current switch position +function srdlxDigitsEvent(swFunction, side) + swValue = swFunction + 1 + + -- call custom script + if side == 0 then + local result = custom_srdlxLeftDigitsEvent(swValue) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + + -- call global custom script + result = global_custom_srdlxLeftDigitsEvent(swValue) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + else + local result = custom_srdlxRightDigitsEvent(swValue) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + + -- call global custom script + result = global_custom_srdlxRightDigitsEvent(swValue) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + end + + local hr = 0 + local mn = 0 + local sc = 0 + local ms = 0 + local hd = 0 + local lpt = 0.0 + local diffTimeFlag = false + local timeFlag = false + local systemflag = false + local unit = false + local inf = "" + local spd = 0.0 + local isSlowUpdate = false + local srdlxPanel = "" + + -- get speed in kph or mph (use "rawspeed" to get value in meter/sec) + local spd = GetCarInfo("speed") + -- get current display unit metric or imperial + unit = GetContextInfo("speedmetric") + + -- lap finished, display lap time a few seconds + local dlt = false + dlt = GetContextInfo("displaylaptime") + if dlt == nil then dlt = false end + if dlt and side == 1 then + swValue = 11 + end + + -- check if quick info button is down + local qi = false + qi = GetContextInfo("quickinfobutton") + if qi == nil or qi == 0 then qi = false end + if qi then + -- get index for left and right panel + local qiInf = 1 + if side == 0 then + qiInf = GetContextInfo("f1quickinfoleft") + else + qiInf = GetContextInfo("f1quickinforight") + end + if qiInf == nil then qiInf = 1 end + -- force position to match QI preference + swValue = qiInf + end + + -- check if PIT Feedback ON + local pf = false + pf = GetContextInfo("pitfeedback") + if pf == nil or pf == 0 then pf = false end + if pf then + -- force position to PIT/SPEED function if car pits + local pit = GetCarInfo("inpits") + if pit > 0 then + if side == 0 then + swValue = 45 + else + swValue = 1 + end + end + end + + -- get current simulation name + local sim = GetContextInfo("simulation") + + --print ( "swValue: " .. swValue .. "\n") + + -- check postion and compute left panel string + if swValue == 1 then + -- speed only + srdlxPanel = string.format("%3.0f ", spd ) + + elseif swValue == 2 then + -- fuel + local fuel = GetCarInfo("fuel") + if fuel ~= nil then + fuel = GetFuel(fuel, unit) + if fuel >= 100 then + srdlxPanel = string.format("F%3d", round(fuel)) + elseif fuel >= 10 then + srdlxPanel = string.format("F%02d ", round(fuel)) + else + srdlxPanel = string.format("F%1.1f ", fuel) + end + end + elseif swValue == 3 then + -- position + inf = GetContextInfo("position") + if inf ~= nil then + if inf >= 100 then + srdlxPanel = string.format("P%3d", inf) + else + srdlxPanel = string.format("P%02d ", inf) + end + end + elseif swValue == 4 then + -- laps completed + inf = GetContextInfo("laps") + if inf ~= nil then + -- if more then 99 laps + if inf >= 100 then + srdlxPanel = string.format("L%3d", inf) + else + srdlxPanel = string.format("L%02d ", inf) + end + end + elseif swValue == 5 then + -- sector + inf = GetCarInfo("sector") + if inf ~= nil then + -- check if sector > 9 + if inf >9 then + srdlxPanel = string.format("S%02d ", inf) + else + srdlxPanel = string.format("S%01d ", inf) + end + end + elseif swValue == 6 then + -- total laps if available + local tl = GetContextInfo("lapscount") + if tl < 1 then tl = 0 end + -- if more then 99 laps + if tl >= 100 or tl >= 100 then + srdlxPanel = string.format("%03d ", tl) + else + srdlxPanel = string.format("t%02d ", tl) + end + + elseif swValue == 7 then + -- water temp + inf = GetCarInfo("watertemp") + if inf ~= nil then + inf = GetTemp(inf, unit) + srdlxPanel = string.format("%2.1f ", inf) + end + elseif swValue == 8 then + -- oil temp + inf = GetCarInfo("oiltemp") + if inf ~= nil then + inf = GetTemp(inf, unit) + srdlxPanel = string.format("%2.1f ", inf) + end + + elseif swValue == 9 then + -- best lap time + timeFlag = true + lpt = GetTimeInfo("laptime") + + elseif swValue == 10 then + -- best lap time + timeFlag = true + lpt = GetTimeInfo("bestlaptime") + + elseif swValue == 11 then + -- last lap time + timeFlag = true + lpt = GetTimeInfo("lastlaptime") + + elseif swValue >= 12 and swValue <= 18 and isAppIRacing(sim) then + timeFlag = true + diffTimeFlag = true + -- iRacing partials + local ts = GetContextInfo("partialcount") + local sector = GetCarInfo("sector") + if ts ~= nil and ts > 0 then + if swValue == 12 then + lpt = GetPartialTimeInfo("currentpartial", sector) + elseif swValue == 13 then + lpt = GetPartialTimeInfo("vsbestlap", sector) + elseif swValue == 14 then + lpt = GetPartialTimeInfo("vsoptimallap", sector) + elseif swValue == 15 then + lpt = GetPartialTimeInfo("vsoptimalsector", sector) + elseif swValue == 16 then + lpt = GetPartialTimeInfo("vssessionbestlap", sector) + elseif swValue == 17 then + lpt = GetPartialTimeInfo("vssessionoptimallap", sector) + elseif swValue == 18 then + lpt = GetPartialTimeInfo("vssessionoptimalsector", sector) + end + else + lpt = 0.0 + end + + elseif swValue == 19 then + -- real time diff vs your best + diffTimeFlag = true + timeFlag = true + lpt = GetTimeInfo("realdiffbest") + + elseif swValue == 20 then + -- real time diff vs your last + diffTimeFlag = true + timeFlag = true + lpt = GetTimeInfo("realdifflast") + + elseif swValue == 21 then + -- get an average consumption of fuel per lap and gives the remaining laps + local remainintank = GetCarInfo("remainlapsintank") + srdlxPanel = string.format("L%3.0f", math.floor(remainintank) ) + + elseif swValue == 22 then + -- rpm + isSlowUpdate = true + diffTimeFlag = true + local rpm = GetCarInfo("rpm") + local r = rpm / 10.0 + if r < 1000 then + srdlxPanel = string.format("%3.1f", r) + else + srdlxPanel = string.format("%4d.", round(r)) + end + elseif swValue == 23 then + -- track size + isSlowUpdate = true + diffTimeFlag = true + local trcksz = GetContextInfo("tracksize") + local r = trcksz / 10 + if r < 1000 then + srdlxPanel = string.format("%3.1f", r) + else + srdlxPanel = string.format("%4d.", round(r)) + end + + elseif swValue == 24 then + -- distance percent + local dist = GetContextInfo("lapdistance") + -- track size + local trcksz = GetContextInfo("tracksize") + local p = round(dist / (trcksz / 100)) + srdlxPanel = string.format("%3d ", p ) + + elseif swValue == 25 then + -- kers + local kers = GetCarInfo("kers") + srdlxPanel = string.format("%3d ", round(kers/1000)) + + elseif swValue == 26 then + -- kers max + local kmx = GetCarInfo("kersmax") + srdlxPanel = string.format("%3d ", round(kmx/1000)) + + elseif swValue == 27 then + -- drs + local drs = GetCarInfo("drs") + if drs == 1 then + srdlxPanel = "ON " + else + srdlxPanel = "OFF" + end + + elseif swValue == 28 then + -- kers percent + local kers = GetCarInfo("kers") + srdlxPanel = string.format("%3d ", round((kers/1000)/4)) + + elseif swValue == 29 then + -- wheels temp if available + inf = GetCarInfo("wheeltempfrontleft") + if inf ~= nil then + -- if rFactor convert Kelvin to Celsius (see global.lua) + if isAppRFactor(sim) then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 30 then + inf = GetCarInfo("wheeltempfrontright") + if inf ~= nil then + if isAppRFactor(sim) then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 31 then + inf = GetCarInfo("wheeltemprearleft") + if inf ~= nil then + if isAppRFactor(sim) then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 32 then + inf = GetCarInfo("wheeltemprearright") + if inf ~= nil then + if isAppRFactor(sim) then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 33 then + -- wheels pressure if available + inf = GetCarInfo("wheelpressfrontleft") + if inf ~= nil then + -- convert to psi + srdlxPanel = string.format("%2.1f ", inf / 6.88) + end + + elseif swValue == 34 then + inf = GetCarInfo("wheelpressfrontright") + if inf ~= nil then + srdlxPanel = string.format("%2.1f ", inf / 6.88) + end + + elseif swValue == 35 then + inf = GetCarInfo("wheelpressrearleft") + if inf ~= nil then + srdlxPanel = string.format("%2.1f ", inf / 6.88) + end + + elseif swValue == 36 then + inf = GetCarInfo("wheelpressrearright") + if inf ~= nil then + srdlxPanel = string.format("%2.1f ", inf / 6.88) + end + + elseif swValue == 37 then + -- brakes temp if available + inf = GetCarInfo("braketempfrontleft") + if inf ~= nil then + if isAppRFactor(sim) or sim == "GTR2.exe" then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 38 then + inf = GetCarInfo("braketempfrontright") + if inf ~= nil then + if isAppRFactor(sim) or sim == "GTR2.exe" then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 39 then + inf = GetCarInfo("braketemprearleft") + if inf ~= nil then + if isAppRFactor(sim) or sim == "GTR2.exe" then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 40 then + inf = GetCarInfo("braketemprearright") + if inf ~= nil then + if isAppRFactor(sim) or sim == "GTR2.exe" then inf = KtoC(inf) end + srdlxPanel = string.format("%3.0f ", inf) + end + + elseif swValue == 41 then + -- time remaining if available + lpt = GetTimeInfo("timeremaining") + timeFlag = true + + elseif swValue == 42 then + -- PC system time + systemflag = true + lpt = GetTimeInfo("systemtime") + timeFlag = true + diffTimeFlag = true + elseif swValue == 43 then + -- time elapsed if available + lpt = GetTimeInfo("timetotalelapsed") + timeFlag = true + + elseif swValue == 44 then + -- last sector 1, 2 and 3 + local sector = GetCarInfo("sector") + timeFlag = true + diffTimeFlag = true + if sector == 1 then + -- sector 3 + local ls1 = GetTimeInfo("lastsector1") + local ls2 = GetTimeInfo("lastsector2") + local lt = GetTimeInfo("lastlaptime") + if ls1 > 0 and ls2 > 0 then + lpt = lt - (ls1 + ls2) + end + elseif sector == 2 then + local ls1 = GetTimeInfo("lastsector1") + lpt = ls1 + else + -- sector 3 + local ls2 = GetTimeInfo("lastsector2") + lpt = ls2 + end + + elseif swValue == 45 then + -- PIT + srdlxPanel = "PIt " + + elseif swValue == 46 then + -- sc + local sc = GetContextInfo("safetycare") + if sc == 1 then + srdlxPanel = "SCAR" + else + srdlxPanel = "OFF " + end + + else + srdlxPanel = " " + end + + local refreshRate = mRefreshLapTimeRate + if diffTimeFlag then + refreshRate = mDeltaTimeDelay + end + + if timeFlag and lpt ~= nil then + + -- set char of negative number + local c = "" + if lpt < 0 then c = "-" end + + -- explod time + hr, mn, sc, hd, ms = timeDispatcher(lpt) + + --print("lpt: " .. lpt .. " m: " .. mn .. " - s: " .. sc .. " - ms: " .. ms .."\n" ) + + -- update display every mDeltaTimeDelay time + if GetTicks() > (refreshRate + mDeltaTimeOldTicks ) then + mDeltaTimeOldTicks = GetTicks() + + if lpt == -1 or (mn + sc + ms) == 0.0000 then + mDeltaTimeBackup = "-.---" + + elseif systemflag then + mDeltaTimeBackup = string.format( "%2d.%02d", mn, sc) + -- > 9mn + elseif mn > 9 then + if c == "" then + mDeltaTimeBackup = string.format( "%2d.%2d", mn, sc) + else + mDeltaTimeBackup = string.format( "%s%2d ", c, mn) + end + + -- < 10mn + elseif mn > 0 and mn < 10 then + if c == "" then + mDeltaTimeBackup = string.format( "%1d.%02d.%01d", mn, sc, hd) + else + mDeltaTimeBackup = string.format( "%s%1d.%02d", c, mn, sc) + end + + else + -- mn == 0 ; sc > 9 + if sc > 9 then + if c == "" then + mDeltaTimeBackup = string.format( "0.%2d.%1d", sc, hd) + else + mDeltaTimeBackup = string.format( "%s0.%2d.", c, sc) + end + else + -- sc < 10 + if c == "" then + mDeltaTimeBackup = string.format( "0.%01d.%02d", sc, hd) + else + mDeltaTimeBackup = string.format( "%s0.%01d.%01d", c, sc, hd) + end + end + end + end + + --print(srdlxPanel,mDeltaTimeBackup) + srdlxPanel = mDeltaTimeBackup + end + + if isSlowUpdate then + + if GetTicks() > ( refreshRate + mDeltaTimeOldTicks ) then + mDeltaTimeOldTicks = GetTicks() + if side == 0 then + mSRDlxLeftText = srdlxPanel + else + mSRDlxRightText = srdlxPanel + end + -- print(GetTicks() .. mSRDlxRightText .."\n") + end + else + if side == 0 then + mSRDlxLeftText = srdlxPanel + else + mSRDlxRightText = srdlxPanel + end + end + + -- print(mSRDlxLeftText, mSRDlxRightText, srdlxPanel) + -- send string to sli manager + if side == 0 then + SetLeftDigits( mSRDlxLeftText ) + else + SetRightDigits( mSRDlxRightText ) + end + + return 1 +end -- cgit v1.2.3