Files
2025-01-28 07:05:49 -08:00

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')