324 lines
		
	
	
		
			No EOL
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			324 lines
		
	
	
		
			No EOL
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
| ---------------------------------------------------
 | |
| LUXART VEHICLE CONTROL V3 (FOR FIVEM)
 | |
| ---------------------------------------------------
 | |
| Coded by Lt.Caine
 | |
| ELS Clicks by Faction
 | |
| Additional Modification by TrevorBarns
 | |
| ---------------------------------------------------
 | |
| FILE: cl_hud.lua
 | |
| PURPOSE: All HUD functions, callbacks, and GTA V 
 | |
| 		 front-end functions.
 | |
| ---------------------------------------------------
 | |
| This program is free software: you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation, either version 3 of the License, or
 | |
| (at your option) any later version.
 | |
| 
 | |
| This program is distributed in the hope that it will be useful,
 | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| GNU General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | |
| ---------------------------------------------------
 | |
| ]]
 | |
| HUD = { }
 | |
| 
 | |
| local show_HUD = hud_first_default
 | |
| local HUD_temp_hidden = false
 | |
| local HUD_scale
 | |
| local HUD_pos 
 | |
| local HUD_backlight_mode = 1 
 | |
| local HUD_backlight_state = false
 | |
| 
 | |
| ---------------------------------------------------------------------
 | |
| --[[Gets initial HUD scale from JS]]
 | |
| CreateThread(function()
 | |
| 	Wait(500)
 | |
| 	SendNUIMessage({
 | |
| 	  _type = 'hud:getHudScale',
 | |
| 	})
 | |
| end)
 | |
| 
 | |
| ---------------------------------------------------------------------
 | |
| --[[Handles HUD back light control.]]
 | |
| CreateThread(function()
 | |
| 	local current_backlight_state
 | |
| 	while true do
 | |
| 		if player_is_emerg_driver then
 | |
| 			while HUD:GetHudBacklightMode() == 1 do
 | |
| 				local _, veh_lights, veh_headlights  = GetVehicleLightsState(veh)
 | |
| 				if veh_lights == 1 and veh_headlights == 0 and HUD:GetHudBacklightState() == false then
 | |
| 					HUD:SetHudBacklightState(true)
 | |
| 				elseif (veh_lights == 1 and veh_headlights == 1) or (veh_lights == 0 and veh_headlights == 1) and HUD:GetHudBacklightState() == false then
 | |
| 					HUD:SetHudBacklightState(true)
 | |
| 				elseif (veh_lights == 0 and veh_headlights == 0) and HUD:GetHudBacklightState() == true then
 | |
| 					HUD:SetHudBacklightState(false)
 | |
| 				end
 | |
| 				Wait(500)
 | |
| 			end
 | |
| 		end
 | |
| 		Wait(1000)
 | |
| 	end
 | |
| end)
 | |
| 
 | |
| ---------------------------------------------------------------------
 | |
| --[[Handles hiding hud when hud is hidden or game is paused.]]
 | |
| CreateThread(function()
 | |
| 	while true do
 | |
| 		if show_HUD or HUD_temp_hidden then
 | |
| 			if (not player_is_emerg_driver) or (IsHudHidden() == 1) or (IsPauseMenuActive() == 1) then
 | |
| 				if not HUD_temp_hidden then
 | |
| 					HUD:SetHudState(false, true)
 | |
| 					HUD_temp_hidden = true
 | |
| 				end
 | |
| 			elseif player_is_emerg_driver and (IsHudHidden() ~= 1) and (IsPauseMenuActive() ~= 1) and HUD_temp_hidden then
 | |
| 				HUD:SetHudState(true, true)
 | |
| 				HUD_temp_hidden = false
 | |
| 			end
 | |
| 		end
 | |
| 		Wait(500)
 | |
| 	end
 | |
| end)
 | |
| 
 | |
| ------------------------------------------------
 | |
| --[[Getter for HUD State (whether hud is enabled).]]
 | |
| function HUD:GetHudState()
 | |
| 	return show_HUD
 | |
| end
 | |
| 
 | |
| --[[Setter for HUD State temp changes the state temporarily for pausing/hud hiding.]]
 | |
| function HUD:SetHudState(state, temporary)
 | |
| 	local temporary = temporary or false
 | |
| 	if not temporary then
 | |
| 		show_HUD = state
 | |
| 	end
 | |
| 	HUD:SetItemState('hud', state)
 | |
| end
 | |
| 
 | |
| ------------------------------------------------
 | |
| --[[Getter for HUD scale. Updates local save from JS and returns.]]
 | |
| function HUD:GetHudScale()
 | |
| 	SendNUIMessage({
 | |
| 	  _type = 'hud:getHudScale'
 | |
| 	})
 | |
| 	return HUD_scale or 0.6
 | |
| end
 | |
| 
 | |
| --[[Setter for HUD scale. Updates JS & CSS.]]
 | |
| function HUD:SetHudScale(scale)
 | |
| 	if scale ~= nil then
 | |
| 		SendNUIMessage({
 | |
| 		  _type = 'hud:setHudScale',
 | |
| 		  scale = scale,
 | |
| 		})
 | |
| 	end
 | |
| end
 | |
| 
 | |
| --[[Callback for JS -> LUA to set HUD_scale with current CSS]]
 | |
| RegisterNUICallback('hud:sendHudScale', function(scale, cb)
 | |
| 	HUD_scale = scale
 | |
| end )
 | |
| 
 | |
| ------------------------------------------------
 | |
| --[[Toggles HUD images based on their state on/off]]
 | |
| function HUD:SetItemState(item, state)
 | |
| 	SendNUIMessage({
 | |
| 	  _type = 'hud:setItemState',
 | |
| 	  item  = item,
 | |
| 	  state = state
 | |
| 	})
 | |
| end
 | |
| 
 | |
| ------------------------------------------------
 | |
| --[[HUD Backlight Modes: 1 - auto, 2 - off, 3 - on]]
 | |
| function HUD:GetHudBacklightMode()
 | |
| 	return HUD_backlight_mode
 | |
| end
 | |
| 
 | |
| function HUD:SetHudBacklightMode(mode)
 | |
| 	if mode ~= nil then
 | |
| 		HUD_backlight_mode = mode
 | |
| 		
 | |
| 		if mode == 2 then
 | |
| 			HUD:SetHudBacklightState(false)
 | |
| 		elseif mode == 3 then
 | |
| 			HUD:SetHudBacklightState(true)	
 | |
| 		end
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function HUD:GetHudBacklightState()
 | |
| 	return HUD_backlight_state
 | |
| end
 | |
| 
 | |
| function HUD:SetHudBacklightState(state)
 | |
| 	if state ~= nil then
 | |
| 		HUD_backlight_state = state
 | |
| 		if state then
 | |
| 			HUD:SetItemState('time', 'night')
 | |
| 		else
 | |
| 			HUD:SetItemState('time', 'day')
 | |
| 		end
 | |
| 		
 | |
| 		HUD:RefreshHudItemStates()
 | |
| 	end
 | |
| end
 | |
| 
 | |
| ------------------------------------------------
 | |
| --[[Verifies HUD item states are correct]]
 | |
| function HUD:RefreshHudItemStates()
 | |
| 	if state_lxsiren[veh] ~= nil and state_lxsiren[veh] > 0 or actv_lxsrnmute_temp then
 | |
| 		HUD:SetItemState('siren', true)
 | |
| 	else
 | |
| 		HUD:SetItemState('siren', false)
 | |
| 	end
 | |
| 	
 | |
| 	if state_pwrcall[veh] ~= nil and state_pwrcall[veh] > 0 then
 | |
| 		HUD:SetItemState('siren', true)
 | |
| 	end
 | |
| 	
 | |
| 	if state_airmanu[veh] ~= nil and state_airmanu[veh] > 0 then
 | |
| 		HUD:SetItemState('horn', true)
 | |
| 	else
 | |
| 		HUD:SetItemState('horn', false)
 | |
| 	end
 | |
| 	
 | |
| 	if state_tkd ~= nil and state_tkd[veh] ~= nil and state_tkd[veh] then
 | |
| 		HUD:SetItemState('tkd', true)
 | |
| 	else
 | |
| 		HUD:SetItemState('tkd', false)
 | |
| 	end
 | |
| 	
 | |
| 	if key_lock then
 | |
| 		HUD:SetItemState('lock', true)
 | |
| 	else
 | |
| 		HUD:SetItemState('lock', false)
 | |
| 	end
 | |
| 	
 | |
| 	if state_ta ~= nil and state_ta[veh] ~= nil then
 | |
| 		HUD:SetItemState('ta', state_ta[veh])
 | |
| 	else
 | |
| 		HUD:SetItemState('ta', 0)
 | |
| 	end	
 | |
| 	
 | |
| 	HUD:SetItemState('switch', IsVehicleSirenOn(veh))
 | |
| end
 | |
| 
 | |
| ------------------------------------------------
 | |
| --[[Setter for HUD position, used when loading save data.]]
 | |
| function HUD:SetHudPosition(data)
 | |
| 	HUD_pos = data
 | |
| 	SendNUIMessage({
 | |
| 	  _type = 'hud:setHudPosition',
 | |
| 	  pos = HUD_pos,
 | |
| 	})	
 | |
| end
 | |
| 
 | |
| --[[Getter for HUD position, used when saving data.]]
 | |
| function HUD:GetHudPosition()
 | |
| 	return HUD_pos
 | |
| end
 | |
| 
 | |
| --[[Sets HUD position based off backup stored in JS, in case HUD is off screen.]]
 | |
| function HUD:ResetPosition()
 | |
| 	SendNUIMessage({
 | |
| 	  _type = 'hud:resetPosition',
 | |
| 	})
 | |
| end
 | |
| 
 | |
| --[[Callback for JS -> LUA to set HUD_pos with current position to save.]]
 | |
| RegisterNUICallback( 'hud:setHudPositon', function(data, cb)
 | |
| 	HUD_pos = data
 | |
| 	STORAGE:SaveHUDSettings()
 | |
| end )
 | |
| 
 | |
| ------------------------------------------------
 | |
| --[[Sets NUI focus for move mode.]]
 | |
| function HUD:SetMoveMode(state)
 | |
| 	SetNuiFocus( state, state )
 | |
| end
 | |
| 
 | |
| --[[Sets NUI focus to false when right-click, esc, etc. are clicked.]]
 | |
| RegisterNUICallback( 'hud:setMoveState', function(state, cb)
 | |
| 	SetNuiFocus(state, state)
 | |
| end )
 | |
| 
 | |
| ------------------------------------------------
 | |
| --On screen GTA V notification
 | |
| function HUD:ShowNotification(text, override)
 | |
| 	override = override or false
 | |
| 	if debug_mode or override then
 | |
| 		SetNotificationTextEntry('STRING')
 | |
| 		AddTextComponentString(text)
 | |
| 		DrawNotification(false, true)
 | |
| 	end
 | |
| end
 | |
| 
 | |
| ------------------------------------------------
 | |
| --Drawn On Screen Text at X, Y
 | |
| function HUD:ShowText(x, y, align, text, scale, label)
 | |
| 	scale = scale or 0.4
 | |
| 	SetTextJustification(align)
 | |
| 	SetTextFont(0)
 | |
| 	SetTextProportional(1)
 | |
| 	SetTextScale(0.0, scale)
 | |
| 	SetTextColour(128, 128, 128, 255)
 | |
| 	SetTextDropshadow(0, 0, 0, 0, 255)
 | |
| 	SetTextEdge(1, 0, 0, 0, 255)
 | |
| 	SetTextDropShadow()
 | |
| 	SetTextOutline()
 | |
| 	if text ~= nil then
 | |
| 		SetTextEntry('STRING')
 | |
| 		AddTextComponentString(text)
 | |
| 	else
 | |
| 		SetTextEntry(label)
 | |
| 	end
 | |
| 	DrawText(x, y)
 | |
| 	ResetScriptGfxAlign()
 | |
| end
 | |
| 
 | |
| ------------------------------------------------
 | |
| --Full screen Confirmation Message
 | |
| function HUD:FrontEndAlert(title, subtitle, options)
 | |
| 	AddTextEntry('FACES_WARNH2', title)
 | |
| 	AddTextEntry('QM_NO_0', subtitle)
 | |
| 	local result = -1
 | |
| 	while result == -1 do
 | |
| 		DrawFrontendAlert('FACES_WARNH2', 'QM_NO_0', 0, 0, '', 0, -1, 0, '', '', false, 0)
 | |
| 		HUD:ShowText(0.5, 0.75, 0, options, 0.75)
 | |
| 		if IsDisabledControlJustReleased(2, 202) then
 | |
| 			return false
 | |
| 		end		
 | |
| 		if IsDisabledControlJustReleased(2, 201) then
 | |
| 			return true
 | |
| 		end
 | |
| 		Wait(0)
 | |
| 	end
 | |
| end
 | |
| 
 | |
| ------------------------------------------------
 | |
| --Get User Input from Keyboard
 | |
| function HUD:KeyboardInput(input_title, existing_text, max_length)
 | |
| 	AddTextEntry('custom_keyboard_title', input_title)
 | |
| 	DisplayOnscreenKeyboard(1, 'custom_keyboard_title', '', existing_text, '', '', '', max_length) 
 | |
| 
 | |
| 	while UpdateOnscreenKeyboard() ~= 1 and UpdateOnscreenKeyboard() ~= 2 do
 | |
| 		Wait(0)
 | |
| 	end
 | |
| 		
 | |
| 	if UpdateOnscreenKeyboard() ~= 2 then
 | |
| 		local result = GetOnscreenKeyboardResult() 
 | |
| 		Wait(500) 
 | |
| 		if result ~= '' then
 | |
| 			return result 
 | |
| 		else 
 | |
| 			return nil
 | |
| 		end
 | |
| 	else
 | |
| 		Wait(500)
 | |
| 		return nil 
 | |
| 	end
 | |
| end | 
