-- Fanatec Lua Script v1.4.1 -- Copyright (c)2012-2013 by Zappadoc - All Rights Reserved. -- this script builds all functions associated with -- digits panels of Fanatec device -- last change by Zappadoc - 2013-11 -- ============================================================ -- Digits Panel functions -- ============================================================ -- IN function of digits panel -- param: recieve from SLIMax Manager the current switch position function fanatecDigitsEvent(swFunction) swValue = swFunction + 1 -- call custom script local result = custom_fanatecDigitsEvent(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_fanatecDigitsEvent(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 local hr = 0 local mn = 0 local sc = 0 local ms = 0 local hd = 0 local lpt = 0.0 local timeFlag = false local unit = false local fPanel = "" local inf = "" local unit = false local spd = 0.0 local isSlowUpdate = false -- 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") -- 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 fanatec panel local qiF = GetContextInfo("fanatecquickinfo") if qiF == nil then qiF = 1 end -- force position to match QI preference swValue = qiF end -- get current simulation name local sim = GetContextInfo("simulation") -- is OSP Tracking ON local ospt = false ospt = GetContextInfo("osptracking") if ospt == nil then ospt = false end if ospt then -- show rpm swValue = 22 end -- lap finished, display lap time a few seconds local dlt = false dlt = GetContextInfo("displaylaptime") if dlt == nil then dlt = false end if dlt then swValue = 11 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 function if car pits local pit = GetCarInfo("inpits") if pit > 0 then swValue = 41 end end -- check postion and compute panel string if swValue == 1 then -- oldGear is intialized in gearEvent (see gear.lua) if oldGear ~= nil then -- gear --local g = GetCarInfo("gear") -- get neutral local n = string.char(GetContextInfo("neutral")) -- get reverse char and convert to string local r = string.char(GetContextInfo("reverse")) -- get state of custom Optimal Shift Point (OSP) records local ospcustom_on = GetContextInfo("ospcustom") -- set neutral, reverse or current gear if oldGear == 0 then -- if neutral and using custom OSP record then add a dot to gear digit SetFanatecGear(n, ospcustom_on) elseif oldGear < 0 then -- reverse SetFanatecGear(r, false) else -- if gear = 'E' give the hand to SLIMax Manager -- if g == 69 then -- return 0 -- end SetFanatecGear(string.char(oldGear), false) end return 1 end elseif swValue == 2 then -- speed if round(spd) > 0 then fPanel = string.format("%3d", round(spd) ) else fPanel = "___" end elseif swValue == 3 then -- fuel local fuel = GetCarInfo("fuel") if fuel ~= nil then fuel = GetFuel(fuel, unit) if fuel >= 100 then fPanel = string.format("%03d", round(fuel) ) elseif fuel >= 10 then fPanel = string.format("F%02d", round(fuel)) else fPanel = string.format("F%1.1f", fuel) end end elseif swValue == 4 then -- position inf = GetContextInfo("position") if inf ~= nil then if inf >= 100 then fPanel = string.format("%03d", inf) else fPanel = string.format("P%02d", inf) end end elseif swValue == 5 then -- laps completed inf = GetContextInfo("laps") if inf ~= nil then -- if more then 99 laps if inf >= 100 then fPanel = string.format("%3.0f", inf) else fPanel = string.format("L%2.0f", inf) end end elseif swValue == 6 then -- sector local sect = GetCarInfo("sector") -- check if sector > 9 if sect >9 then fPanel = string.format("S%2d", sect) else fPanel = string.format("S%1d ", sect) end elseif swValue == 7 then -- total laps local tl = GetContextInfo("lapscount") if tl < 1 then tl = 0 end -- if more then 99 laps if tl >= 100 or tl >= 100 then fPanel = string.format("%03d", tl) else fPanel = string.format("t%02d", tl) end elseif swValue == 8 then -- water temp inf = GetCarInfo("watertemp") if inf ~= nil then inf = GetTemp(inf, unit) fPanel = string.format("%2.1f", inf) end elseif swValue == 9 then -- oil temp inf = GetCarInfo("oiltemp") if inf ~= nil then inf = GetTemp(inf, unit) fPanel = string.format("%2.1f", inf) end elseif swValue == 10 then -- best lap time --timeFlag = true --dlt = true lpt = GetTimeInfo("bestlaptime") mFanatecText = DisplayFormatTime(lpt,mRefreshLapTimeRate,2,0,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 11 then -- last lap time --timeFlag = true --dlt = true lpt = GetTimeInfo("lastlaptime") mFanatecText = DisplayFormatTime(lpt,mRefreshLapTimeRate,2,0,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue >= 12 and swValue <= 18 and isAppIRacing(sim) then --timeFlag = true -- iRacing partials local ts = GetContextInfo("partialcount") local sector = GetCarInfo("sector") if sector == nil then sector = 0 end 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 mFanatecText = DisplayFormatTime(lpt,mDeltaTimeDelay,2,1,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 19 then -- real time diff vs your best --timeFlag = true lpt = GetTimeInfo("realdiffbest") mFanatecText = DisplayFormatTime(lpt,mDeltaTimeDelay,2,1,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 20 then -- real time diff vs your last --timeFlag = true lpt = GetTimeInfo("realdifflast") mFanatecText = DisplayFormatTime(lpt,mDeltaTimeDelay,2,1,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 21 then -- get an average consumption of fuel per lap and gives the remaining laps local remainintank = GetCarInfo("remainlapsintank") if remainintank >= 100 then fPanel = string.format("%3.0f", math.floor (remainintank)) else fPanel = string.format("L%2.0f", math.floor(remainintank)) end elseif swValue == 22 then -- rpm isSlowUpdate = true local rpm = GetCarInfo("rpm") local r = rpm / 100.0 if r < 100 then fPanel = string.format("%2.1f", r) else fPanel = string.format("%3d.", round(r)) end elseif swValue == 23 then -- track size isSlowUpdate = true local trcksz = GetContextInfo("tracksize") local r = trcksz / 100 if r < 100 then fPanel = string.format("%2.1f", r) else fPanel = string.format("%3d.", 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)) fPanel = string.format("%3d", p ) elseif swValue == 25 then -- kers local kers = GetCarInfo("kers") fPanel = string.format("%3d", round(kers/1000)) elseif swValue == 26 then -- kers max local kmx = GetCarInfo("kersmax") fPanel = string.format("%3d", round(kmx/1000)) elseif swValue == 27 then -- drs local drs = GetCarInfo("drs") if drs == 1 then fPanel = "ON " else fPanel = "OFF" end elseif swValue == 28 then -- kers percent local kers = GetCarInfo("kers") fPanel = 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 fPanel = 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 fPanel = 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 fPanel = 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 fPanel = string.format("%3.0f", inf) end elseif swValue == 33 then -- wheels pressure if available inf = GetCarInfo("wheelpressfrontleft") if inf ~= nil then -- convert to psi fPanel = string.format("%2.1f", inf / 6.88) end elseif swValue == 34 then inf = GetCarInfo("wheelpressfrontright") if inf ~= nil then fPanel = string.format("%2.1f", inf / 6.88) end elseif swValue == 35 then inf = GetCarInfo("wheelpressrearleft") if inf ~= nil then fPanel = string.format("%2.1f", inf / 6.88) end elseif swValue == 36 then inf = GetCarInfo("wheelpressrearright") if inf ~= nil then fPanel = 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 fPanel = 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 fPanel = 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 fPanel = 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 fPanel = string.format("%3.0f", inf) end elseif swValue == 41 then -- PIT fPanel = "PIt" elseif swValue == 42 then -- sc local sc = GetContextInfo("safetycare") if sc == 1 then fPanel = " SC" else fPanel = " " end elseif swValue == 43 then timeFlag = true -- current sector local sector = GetCarInfo("sector") if sector == 1 then lpt = GetTimeInfo("sector1") elseif sector == 2 then lpt = GetTimeInfo("sector2") else -- sector 3 local s1 = GetTimeInfo("sector1") local s2 = GetTimeInfo("sector2") local lt = GetTimeInfo("laptime") lpt = lt - (s1 + s2) end mFanatecText = DisplayFormatTime(lpt,mRefreshLapTimeRate,2,0,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 44 then timeFlag = true -- best sector 1 lpt = GetTimeInfo("bestsector1") mFanatecText = DisplayFormatTime(lpt,mRefreshLapTimeRate,2,0,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 45 then timeFlag = true -- best sector 2 lpt = GetTimeInfo("bestsector2") mFanatecText = DisplayFormatTime(lpt,mRefreshLapTimeRate,2,0,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 46 then timeFlag = true -- last sector 1 lpt = GetTimeInfo("lastsector1") mFanatecText = DisplayFormatTime(lpt,mRefreshLapTimeRate,2,0,3) SetFanatecDigits( mFanatecText ) return 1 elseif swValue == 47 then timeFlag = true -- last sector 2 lpt = GetTimeInfo("lastsector2") mFanatecText = DisplayFormatTime(lpt,mRefreshLapTimeRate,2,0,3) SetFanatecDigits( mFanatecText ) return 1 else fPanel = " " end -- the function below has been replaced with generic time display function in global.lua -- if timeFlag and lpt ~= nil then -- -- explod time -- hr, mn, sc, hd, ms = timeDispatcher(lpt) -- print("lpt:" .. lpt .. " mn:" .. mn .. " sc:" .. sc .. " hd:" .. hd .. " ms:" .. ms .."\n" ) -- -- update display every mDeltaTimeDelay time -- -- current ticks > old backuped value -- if GetTicks() > mDeltaTimeOldTicks then -- -- store ticks + delay -- mDeltaTimeOldTicks = GetTicks() + ( 2 * mDeltaTimeDelay) -- if lpt == -1 or (mn + sc + ms) == 0.00 then -- mDeltaTimeBackup = "-.--" -- elseif mn > 0 or sc >= 10 then -- if dlt and mn <100 then -- -- display time and mn < 100 -- if mn >=10 then -- -- mn > 10 -- mDeltaTimeBackup = string.format( "%2d.%01d", mn, sc) -- else -- mDeltaTimeBackup = string.format( "%1d.%02d", mn, sc) -- end -- else -- -- delta > 9.99s or lap time > 100mn -- mDeltaTimeBackup = " . " -- end -- else -- -- delta -- if lpt < 0 then -- -- negative value -- mDeltaTimeBackup = string.format( "-%01d.%01d ", sc, round(hd)) -- else -- mDeltaTimeBackup = string.format( "%01d.%02d", sc, round(hd)) -- end -- end -- end -- fPanel = mDeltaTimeBackup -- end if isSlowUpdate then -- request slow display update if GetTicks() > ( mDeltaTimeDelay + mDeltaTimeOldTicks ) then mDeltaTimeOldTicks = GetTicks() mFanatecText = fPanel end else -- normal display update mFanatecText = fPanel end -- send string to sli manager SetFanatecDigits( mFanatecText ) return 1 end