-- Fanatec Lua Script v1.0 -- 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-02 -- ============================================================ -- 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 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 g == 0 then -- if neutral and using custom OSP record then add a dot to gear digit SetFanatecGear(n, ospcustom_on) elseif g < 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(g), 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 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 -- 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 timeFlag = true lpt = GetTimeInfo("realdiffbest") elseif swValue == 20 then -- real time diff vs your last timeFlag = true lpt = GetTimeInfo("realdifflast") elseif swValue == 21 then -- logo fPanel = "SMX" 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 else fPanel = " " 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() > (mDeltaTimeDelay + mDeltaTimeOldTicks ) then mDeltaTimeOldTicks = GetTicks() if lpt == -1 or (mn + sc + ms) == 0.0000 then mDeltaTimeBackup = "-.--" -- > 9mn elseif mn > 9 then if c == "" then mDeltaTimeBackup = string.format( "%2d.%1d", 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", mn, sc) else mDeltaTimeBackup = string.format( "%s %1d", c, mn) end else -- mn == 0 ; sc > 9 if sc > 9 then if c == "" then mDeltaTimeBackup = string.format( "%2d.%1d", sc, ms) else mDeltaTimeBackup = string.format( "%s%2d.", c, sc) end else -- sc < 10 if c == "" then mDeltaTimeBackup = string.format( "%1d.%02d", sc, ms) else mDeltaTimeBackup = string.format( "%s%1d.%1d", c, sc, ms) end end end end --print(fPanel,mDeltaTimeBackup) fPanel = mDeltaTimeBackup end if isSlowUpdate then if GetTicks() > ( mDeltaTimeDelay + mDeltaTimeOldTicks ) then mDeltaTimeOldTicks = GetTicks() mFanatecText = fPanel -- print(GetTicks() .. mFanatecText .."\n") end else mFanatecText = fPanel end -- send string to sli manager SetFanatecDigits( mFanatecText ) return 1 end