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/osp.lua | 337 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 313 insertions(+), 24 deletions(-) mode change 100755 => 100644 scripts/osp.lua (limited to 'scripts/osp.lua') diff --git a/scripts/osp.lua b/scripts/osp.lua old mode 100755 new mode 100644 index b5ff08c..63e5f9f --- a/scripts/osp.lua +++ b/scripts/osp.lua @@ -1,7 +1,7 @@ --- SLIMax Mgr Lua Script v3 +-- SLIMax Mgr Lua Script v3.3 -- Copyright (c)2012-2013 by Zappadoc - All Rights Reserved. -- this script builds all Optimal ShiftPoints methods (OSP) --- last change by Zappadoc - 2013-02 +-- last change by Zappadoc - 2013-10 function SetOSPFeedback(state) if mOSPLED1 > 6 then @@ -161,19 +161,19 @@ end -- G27 Methods Event function ospG27MethodEvent(idx) - mOSPMethod = idx + mOSPG27Method = idx -- OSP Limit default value is set in gear.lua if gOSPLimit == nil or gOSPLimit == 0 then gOSPLimit = GetContextInfo("osplimitrpm") end -- call custom script (this is a good place to overwrite gOSPLimit value) - local result = custom_ospG27MethodEvent(mOSPMethod) + local result = custom_ospG27MethodEvent(mOSPG27Method) -- 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 (this is a good place to overwrite gOSPLimit value) - result = global_custom_ospG27MethodEvent(mOSPMethod) + result = global_custom_ospG27MethodEvent(mOSPG27Method) -- 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 @@ -214,7 +214,7 @@ function ospG27MethodEvent(idx) return 1 end - -- print("MAXGear: " .. gear.."/"..maxGear.." OSP: " .. mOSPMethod .. " rpm: " .. rpm .. " - " .. gOSPLimit .. "\n") + -- print("MAXGear: " .. gear.."/"..maxGear.." OSP: " .. mOSPG27Method .. " rpm: " .. rpm .. " - " .. gOSPLimit .. "\n") -- skip if first gear not allowed @@ -239,7 +239,7 @@ function ospG27MethodEvent(idx) mOSPBlink = mOSPBlink + 1 end - if mOSPMethod <= 1 or mOSPMethod > 3 then + if mOSPG27Method <= 1 or mOSPG27Method > 3 then -- methods 1 all blinking if mOSPBlink >= mOSPBlinkTime then mOSPBlink = 0 @@ -252,7 +252,7 @@ function ospG27MethodEvent(idx) if mOSPBlink > (mOSPBlinkTime / 2) then mG27Leds = 0; end - elseif mOSPMethod == 2 then + elseif mOSPG27Method == 2 then -- methods side blinking if mOSPBlink >= mOSPBlinkTime then mOSPBlink = 0 @@ -266,7 +266,7 @@ function ospG27MethodEvent(idx) mG27Leds = 0; end - elseif mOSPMethod == 3 then + elseif mOSPG27Method == 3 then -- methods 3 center blinking if mOSPBlink >= mOSPBlinkTime then mOSPBlink = 0 @@ -296,19 +296,19 @@ end -- Fanatec OSP Methods Event function ospFanatecMethodEvent(idx) - mOSPMethod = idx + mOSPFanatecMethod = idx -- OSP Limit default value is set in gear.lua if gOSPLimit == nil or gOSPLimit == 0 then gOSPLimit = GetContextInfo("osplimitrpm") end -- call custom script (this is a good place to overwrite gOSPLimit value) - local result = custom_ospFanatecMethodEvent(mOSPMethod) + local result = custom_ospFanatecMethodEvent(mOSPFanatecMethod) -- 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 (this is a good place to overwrite gOSPLimit value) - result = global_custom_ospFanatecMethodEvent(mOSPMethod) + result = global_custom_ospFanatecMethodEvent(mOSPFanatecMethod) -- 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 @@ -373,21 +373,21 @@ function ospFanatecMethodEvent(idx) end if mOSPBlink <= (mOSPBlinkTime / 2) then - if (mOSPMethod <= 0) or mOSPMethod > 4 then + if (mOSPFanatecMethod <= 0) or mOSPFanatecMethod > 4 then -- blue leds blinking if method 0, ON for i = 6,8 do led = led.format("RPM%d",i) mRPMLedTable[led] = 1 end - elseif mOSPMethod == 1 then + elseif mOSPFanatecMethod == 1 then -- all leds blinking if method 1, ON for i = 0,8 do led = led.format("RPM%d",i) mRPMLedTable[led] = 1 end - elseif mOSPMethod == 2 then + elseif mOSPFanatecMethod == 2 then initLedTable(mRPMLedTable, 0) -- side leds blinking if method 2, ON mRPMLedTable["RPM0"] = 1 @@ -395,14 +395,14 @@ function ospFanatecMethodEvent(idx) mRPMLedTable["RPM7"] = 1 mRPMLedTable["RPM8"] = 1 - elseif mOSPMethod == 3 then + elseif mOSPFanatecMethod == 3 then initLedTable(mRPMLedTable, 0) -- center leds blinking if method 3, ON mRPMLedTable["RPM3"] = 1 mRPMLedTable["RPM4"] = 1 mRPMLedTable["RPM5"] = 1 - elseif mOSPMethod == 4 then + elseif mOSPFanatecMethod == 4 then initLedTable(mRPMLedTable, 0) -- side fixed if method 4, ON mRPMLedTable["RPM0"] = 1 @@ -410,25 +410,25 @@ function ospFanatecMethodEvent(idx) mRPMLedTable["RPM7"] = 1 mRPMLedTable["RPM8"] = 1 end - SetFanatecLed("mRPMLedTable") + SetRPMLed("mRPMLedTable") end if mOSPBlink > (mOSPBlinkTime / 2) then - if (mOSPMethod <= 0) or mOSPMethod > 4 then + if (mOSPFanatecMethod <= 0) or mOSPFanatecMethod > 4 then -- blue leds blinking if method 0 , OFF for i = 6,8 do led = led.format("RPM%d",i) mRPMLedTable[led] = 0 end - elseif mOSPMethod == 1 then + elseif mOSPFanatecMethod == 1 then -- all leds blinking if method 1, OFF for i = 0,8 do led = led.format("RPM%d",i) mRPMLedTable[led] = 0 end - elseif mOSPMethod == 2 then + elseif mOSPFanatecMethod == 2 then initLedTable(mRPMLedTable, 0) -- side leds blinking if method 2, OFF mRPMLedTable["RPM0"] = 0 @@ -436,14 +436,14 @@ function ospFanatecMethodEvent(idx) mRPMLedTable["RPM7"] = 0 mRPMLedTable["RPM8"] = 0 - elseif mOSPMethod == 3 then + elseif mOSPFanatecMethod == 3 then initLedTable(mRPMLedTable, 0) -- center leds blinking if method 3, OFF mRPMLedTable["RPM3"] = 0 mRPMLedTable["RPM4"] = 0 mRPMLedTable["RPM5"] = 0 - elseif mOSPMethod == 4 then + elseif mOSPFanatecMethod == 4 then initLedTable(mRPMLedTable, 0) -- side fixed if method 4, ON mRPMLedTable["RPM0"] = 1 @@ -451,7 +451,7 @@ function ospFanatecMethodEvent(idx) mRPMLedTable["RPM7"] = 1 mRPMLedTable["RPM8"] = 1 end - SetFanatecLed("mRPMLedTable") + SetRPMLed("mRPMLedTable") end end @@ -464,5 +464,294 @@ function ospFanatecMethodEvent(idx) mOldOSPTickCount = GetTicks() + 10 end + return 1 +end + +-- ================================================== +-- SIM RACE Deluxe OSP Methods Event + +function ospSRDlxMethodEvent(idx) + mOSPSRDlxMethod = idx + -- OSP Limit default value is set in gear.lua + if gOSPLimit == nil or gOSPLimit == 0 then gOSPLimit = GetContextInfo("osplimitrpm") end + + -- call custom script (this is a good place to overwrite gOSPLimit value) + local result = custom_ospSRDlxMethodEvent(mOSPSRDlxMethod) + -- 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 (this is a good place to overwrite gOSPLimit value) + result = global_custom_ospSRDlxMethodEvent(mOSPSRDlxMethod) + -- 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 + + -- check if globals initialized + if isGlobalInitialized == 0 then + isGlobalInitialized = 1 + -- init + InitGlobals() + end + -- get global prefs + GetSLIMaxInfo() + + local led = "" + + -- get rpm + local rpm = 0 + rpm = GetCarInfo("rpm") + if rpm == nil then rpm = 0 end + + -- get red zone value + --local redZone = GetCarInfo("redzone") + --if redZone == nil then redZone = 18000 end + + -- get current osp factor + --local ospFactor = GetContextInfo("ospfactor") + --if ospFactor == nil then ospFactor = 80 end + + -- get current gear + local gear = 0 + gear = GetCarInfo("gear") + if gear == nil then gear = 0 end + + -- get max gear of current car + -- Alternate way to calc max gear if not available in API + -- Use a global mMaxGear and do the following + -- if gear > mMaxGear then mMaxGear = gear end local maxGear = 4 + + maxGear = GetCarInfo("maxgear") + if maxGear == nil then maxGear = 4 end + + -- skip if neutral or ==maxgear + if gear <=0 or gear>=maxGear then + -- do nothing + return 1 + end + + -- skip if first gear not allowed + if not mOSPWithFirstGear and gear == 1 then + -- do nothing + return 1 + end + + -- print("OSP1: " .. mOSPLED1 .. " OSP2: " .. mOSPLED2 .."\n") + -- print(rpm .. " - " .. gOSPLimit) + + -- rpm > osplimit so activate shiftpoints leds + if rpm > gOSPLimit then + + -- no blinking allowed + if mNoBlink then + -- set both leds + SetOSPFeedback(1) + + else + + if GetTicks() > mOldOSPTickCount then + mOSPBlink = mOSPBlink + 1 + end + + if mOSPSRDlxMethod <= 3 then + -- methods 1 to 3 + if mOSPBlink >= mOSPBlinkTime then + mOSPBlink = 0 + end + + if mOSPBlink <= (mOSPBlinkTime / 2) then + if mOSPSRDlxMethod ~= 3 then + -- if not method 3 + SetOSPFeedback(1) + end + if (mOSPSRDlxMethod == 1) or (mOSPSRDlxMethod == 3) then + -- add blue leds blinking if method 1 or 3 + for i = 7,9 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 1 + end + SetRPMLed("mRPMLedTable") + end + end + + if mOSPBlink > (mOSPBlinkTime / 2) then + SetOSPFeedback(0) + + if (mOSPSRDlxMethod == 1) or (mOSPSRDlxMethod == 3) then + -- add blue leds blinking if method 1 or 3 + for i = 7,9 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 0 + end + SetRPMLed("mRPMLedTable") + end + end + end + + if mOSPSRDlxMethod == 2 then + -- add blue leds not blinking if method 2 + for i = 7,9 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 1 + end + SetRPMLed("mRPMLedTable") + end + end + else + -- bypass (give control to manager) + return 1 + end + -- timebase + if GetTicks() > mOldOSPTickCount then + mOldOSPTickCount = GetTicks() + 10 + end + + return 1 +end + + +-- ================================================== +-- SIM RACE F1 OSP Methods Event + +function ospSRF1MethodEvent(idx) + mOSPSRF1Method = idx + -- OSP Limit default value is set in gear.lua + if gOSPLimit == nil or gOSPLimit == 0 then gOSPLimit = GetContextInfo("osplimitrpm") end + + -- call custom script (this is a good place to overwrite gOSPLimit value) + local result = custom_ospSRF1MethodEvent(mOSPSRF1Method) + -- 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 (this is a good place to overwrite gOSPLimit value) + result = global_custom_ospSRF1MethodEvent(mOSPSRF1Method) + -- 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 + + -- check if globals initialized + if isGlobalInitialized == 0 then + isGlobalInitialized = 1 + -- init + InitGlobals() + end + -- get global prefs + GetSLIMaxInfo() + + local led = "" + + -- get rpm + local rpm = 0 + rpm = GetCarInfo("rpm") + if rpm == nil then rpm = 0 end + + -- get red zone value + --local redZone = GetCarInfo("redzone") + --if redZone == nil then redZone = 18000 end + + -- get current osp factor + --local ospFactor = GetContextInfo("ospfactor") + --if ospFactor == nil then ospFactor = 80 end + + -- get current gear + local gear = 0 + gear = GetCarInfo("gear") + if gear == nil then gear = 0 end + + -- get max gear of current car + -- Alternate way to calc max gear if not available in API + -- Use a global mMaxGear and do the following + -- if gear > mMaxGear then mMaxGear = gear end local maxGear = 4 + + maxGear = GetCarInfo("maxgear") + if maxGear == nil then maxGear = 4 end + + -- skip if neutral or ==maxgear + if gear <=0 or gear>=maxGear then + -- do nothing + return 1 + end + + -- skip if first gear not allowed + if not mOSPWithFirstGear and gear == 1 then + -- do nothing + return 1 + end + + -- print("OSP1: " .. mOSPLED1 .. " OSP2: " .. mOSPLED2 .."\n") + -- print(rpm .. " - " .. gOSPLimit) + + -- rpm > osplimit so activate shiftpoints leds + if rpm > gOSPLimit then + + -- no blinking allowed + if mNoBlink then + -- set both leds + SetOSPFeedback(1) + + else + + if GetTicks() > mOldOSPTickCount then + mOSPBlink = mOSPBlink + 1 + end + + if mOSPSRF1Method <= 3 then + -- methods 1 to 3 + if mOSPBlink >= mOSPBlinkTime then + mOSPBlink = 0 + end + + if mOSPBlink <= (mOSPBlinkTime / 2) then + if mOSPSRF1Method ~= 3 then + -- if not method 3 + SetOSPFeedback(1) + end + if (mOSPSRF1Method == 1) or (mOSPSRF1Method == 3) then + -- add blue leds blinking if method 1 or 3 + for i = 10,14 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 1 + end + SetRPMLed("mRPMLedTable") + end + end + + if mOSPBlink > (mOSPBlinkTime / 2) then + SetOSPFeedback(0) + + if (mOSPSRF1Method == 1) or (mOSPSRF1Method == 3) then + -- add blue leds blinking if method 1 or 3 + for i = 10,14 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 0 + end + SetRPMLed("mRPMLedTable") + end + end + end + + if mOSPSRF1Method == 2 then + -- add blue leds not blinking if method 2 + for i = 10,14 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 1 + end + SetRPMLed("mRPMLedTable") + end + end + else + -- bypass (give control to manager) + return 1 + end + -- timebase + if GetTicks() > mOldOSPTickCount then + mOldOSPTickCount = GetTicks() + 10 + end + return 1 end \ No newline at end of file -- cgit v1.2.3