138 lines
4.9 KiB
Lua
138 lines
4.9 KiB
Lua
--print("[ULC] Brake Extras Loaded")
|
|
local realBrakeThreshold = 3
|
|
local shouldUseRealBrakes = function()
|
|
return (MyVehicleConfig.brakeConfig.speedThreshold or 3) <= realBrakeThreshold
|
|
end
|
|
local braking = false
|
|
|
|
-------------------
|
|
-- MAIN FUNCTIONS --
|
|
-------------------
|
|
|
|
local disabledExtras = {}
|
|
|
|
local function setBrakeExtras(newState)
|
|
for _, v in pairs(MyVehicleConfig.brakeConfig.brakeExtras) do
|
|
local currentState
|
|
if IsVehicleExtraTurnedOn(MyVehicle, v) then currentState = 0 else currentState = 1 end
|
|
--print("[ULC] setBrakeExtras() newState: " .. newState .. " currentState: " .. currentState)
|
|
if currentState == newState then break end
|
|
ULC:SetStage(v, newState, false, true, false, false, true, false)
|
|
end
|
|
if newState == 0 then
|
|
-- disable the disable extras and save the ones that we change
|
|
if not MyVehicleConfig.brakeConfig.disableExtras then return end
|
|
for _, v in pairs(MyVehicleConfig.brakeConfig.disableExtras) do
|
|
if IsVehicleExtraTurnedOn(MyVehicle, v) then
|
|
ULC:SetStage(v, 1, false, true, false, false, true, false)
|
|
table.insert(disabledExtras, v)
|
|
end
|
|
end
|
|
elseif newState == 1 then
|
|
-- re-enable any extras that were disabled
|
|
for _, v in pairs(disabledExtras) do
|
|
ULC:SetStage(v, 0, false, true, false, false, true, false)
|
|
end
|
|
disabledExtras = {}
|
|
end
|
|
end
|
|
|
|
|
|
----------------------------
|
|
-- REALISTIC BRAKE LIGHTS --
|
|
----------------------------
|
|
if shouldUseRealBrakes then
|
|
print("Realistic brake light functionality intialized.")
|
|
local mode = "STANDARD"
|
|
|
|
-- start checking if stopped manually with a loop
|
|
CreateThread(function()
|
|
local sleep = 1000
|
|
while true do
|
|
Wait(sleep)
|
|
-- if rbl_brakelights change handler gets triggered that means rbl exists and we want to use that functionality instead, return from this loop
|
|
if mode == "RBL" then
|
|
print("real-brake-lights resource detected, integrating brakelight functionality.")
|
|
return
|
|
end
|
|
if not MyVehicle then
|
|
sleep = 1000
|
|
goto continue
|
|
end
|
|
if not shouldUseRealBrakes() then
|
|
sleep = 1000
|
|
goto continue
|
|
end
|
|
if not MyVehicleConfig.brakeConfig.useBrakes then
|
|
sleep = 1000
|
|
goto continue
|
|
end
|
|
if braking then goto continue end
|
|
sleep = 250
|
|
local speed = GetVehicleSpeedConverted(MyVehicle)
|
|
if speed < realBrakeThreshold and shouldUseRealBrakes() and not IsControlPressed(0, 72) then
|
|
--print("[manual checks] Enabling brakes")
|
|
setBrakeExtras(0)
|
|
else
|
|
--print("[manual checks] Disabling brakes")
|
|
setBrakeExtras(1)
|
|
end
|
|
::continue::
|
|
end
|
|
end)
|
|
|
|
-- add a statebag change handler for rbl_brakelights
|
|
-- once this is triggered, disable manual checking
|
|
AddStateBagChangeHandler('rbl_brakelights', null, function(bagName, key, value)
|
|
Wait(0) -- Nedded as GetEntityFromStateBagName sometimes returns 0 on first frame
|
|
mode = "RBL" -- set mode to RBL to disable manual checking
|
|
if not MyVehicle then return end
|
|
if not MyVehicleConfig.brakeConfig.useBrakes then return end
|
|
local vehicle = GetEntityFromStateBagName(bagName)
|
|
--print("state changed for vehicle")
|
|
if vehicle == 0 or vehicle ~= MyVehicle then return end
|
|
local newState
|
|
if value then newState = 0 else newState = 1 end
|
|
--print("ULC: Setting brakes to state" .. newState)
|
|
setBrakeExtras(newState)
|
|
end)
|
|
end
|
|
|
|
-----------------
|
|
-- KEYBINDINGS --
|
|
-----------------
|
|
|
|
-- pressed brakes
|
|
RegisterCommand('+ulc:brakePattern', function()
|
|
braking = true
|
|
if MyVehicle and MyVehicleConfig.brakeConfig.useBrakes then
|
|
if GetVehicleCurrentGear(MyVehicle) == 0 then return end -- disable while reversing
|
|
--print("Enabling brakes")
|
|
local speed = GetVehicleSpeedConverted(MyVehicle)
|
|
-- if using real brakes always enable
|
|
if shouldUseRealBrakes() or speed > (MyVehicleConfig.brakeConfig.speedThreshold or 3) then
|
|
setBrakeExtras(0)
|
|
end
|
|
end
|
|
SendNUIMessage({
|
|
type = 'toggleBrakeIndicator',
|
|
state = true
|
|
})
|
|
end)
|
|
|
|
RegisterCommand('-ulc:brakePattern', function()
|
|
braking = false
|
|
if MyVehicle and MyVehicleConfig.brakeConfig.useBrakes then
|
|
local speed = GetVehicleSpeedConverted(MyVehicle)
|
|
if shouldUseRealBrakes() and speed < realBrakeThreshold then return end
|
|
--print("Disabling brakes")
|
|
setBrakeExtras(1)
|
|
end
|
|
SendNUIMessage({
|
|
type = 'toggleBrakeIndicator',
|
|
state = false
|
|
})
|
|
end)
|
|
|
|
RegisterKeyMapping('+ulc:brakePattern', 'ULC: Activate Brake Pattern (Hold)', 'keyboard', 's')
|