Changed sphere to infinite cylinder intersect, pitch check, changed some defaults

This commit is contained in:
Dan
2019-12-26 22:02:45 +00:00
parent 67897dcdcb
commit c6c659d186

View File

@@ -94,10 +94,10 @@ RADAR.vars =
-- ["alert"] = true, -- ["alert"] = true,
-- The volume of the audible beep -- The volume of the audible beep
["beep"] = 0.6, ["beep"] = 1.0,
-- The volume of the verbal lock confirmation -- The volume of the verbal lock confirmation
["voice"] = 0.6, ["voice"] = 1.0,
-- The speed unit used in conversions -- The speed unit used in conversions
["speedType"] = "mph" ["speedType"] = "mph"
@@ -111,8 +111,8 @@ RADAR.vars =
{ displayText = { "¦¦¦", "FAS" }, optionsText = { "On¦", "Off" }, options = { true, false }, optionIndex = 1, settingText = "fastDisplay" }, { displayText = { "¦¦¦", "FAS" }, optionsText = { "On¦", "Off" }, options = { true, false }, optionIndex = 1, settingText = "fastDisplay" },
{ displayText = { "¦SL", "SEn" }, optionsText = { "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 3, settingText = "same" }, { displayText = { "¦SL", "SEn" }, optionsText = { "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 3, settingText = "same" },
{ displayText = { "¦OP", "SEn" }, optionsText = { "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 3, settingText = "opp" }, { displayText = { "¦OP", "SEn" }, optionsText = { "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 3, settingText = "opp" },
{ displayText = { "bEE", "P¦¦" }, optionsText = { "Off", "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 4, settingText = "beep" }, { displayText = { "bEE", "P¦¦" }, optionsText = { "Off", "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 6, settingText = "beep" },
{ displayText = { "VOI", "CE¦" }, optionsText = { "Off", "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 4, settingText = "voice" }, { displayText = { "VOI", "CE¦" }, optionsText = { "Off", "¦1¦", "¦2¦", "¦3¦", "¦4¦", "¦5¦" }, options = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 }, optionIndex = 6, settingText = "voice" },
{ displayText = { "Uni", "tS¦" }, optionsText = { "USA", "INT" }, options = { "mph", "kmh" }, optionIndex = 1, settingText = "speedType" } { displayText = { "Uni", "tS¦" }, optionsText = { "USA", "INT" }, options = { "mph", "kmh" }, optionIndex = 1, settingText = "speedType" }
}, },
@@ -150,8 +150,8 @@ RADAR.vars =
}, },
-- The maximum distance that the radar system's ray traces can go, changing this will change the max -- The maximum distance that the radar system's ray traces can go, changing this will change the max
-- distance in-game, but I wouldn't really put it more than 400.0 -- distance in-game, but I wouldn't really put it more than 500.0
maxCheckDist = 300.0, maxCheckDist = 400.0,
-- Cached dynamic vehicle sphere sizes, automatically populated when the system is running -- Cached dynamic vehicle sphere sizes, automatically populated when the system is running
sphereSizes = {}, sphereSizes = {},
@@ -394,14 +394,19 @@ if ( RADAR:IsFastLimitAllowed() ) then
end end
end end
-- Toggles the internal key lock state, which stops any of the radar's key binds from working
function RADAR:ToggleKeyLock() function RADAR:ToggleKeyLock()
-- Check the player state is valid
if ( PLY:VehicleStateValid() ) then if ( PLY:VehicleStateValid() ) then
-- Toggle the key lock variable
self.vars.keyLock = not self.vars.keyLock self.vars.keyLock = not self.vars.keyLock
-- Tell the NUI side to display the key lock message
SendNUIMessage( { _type = "displayKeyLock" } ) SendNUIMessage( { _type = "displayKeyLock" } )
end end
end end
-- Returns the key lock state
function RADAR:GetKeyLockState() function RADAR:GetKeyLockState()
return self.vars.keyLock return self.vars.keyLock
end end
@@ -605,7 +610,14 @@ end
-- cannot detect vehicles beyond 40~ units, my system acts as a replacement that allows the detection of vehicles -- cannot detect vehicles beyond 40~ units, my system acts as a replacement that allows the detection of vehicles
-- much further away (400+ units). Also, as my system uses sphere intersections, each sphere can have a different -- much further away (400+ units). Also, as my system uses sphere intersections, each sphere can have a different
-- radius, which means that larger vehicles can have larger spheres, and smaller vehicles can have smaller spheres. -- radius, which means that larger vehicles can have larger spheres, and smaller vehicles can have smaller spheres.
function RADAR:GetLineHitsSphereAndDir( centre, radius, rayStart, rayEnd ) function RADAR:GetLineHitsSphereAndDir( c, radius, rs, re )
-- Take the vector3's and turn them into vector2's, this way all of the calculations below are for an
-- infinite cylinder rather than a sphere, which also means that vehicles can be detected even when on
-- an incline!
local rayStart = vector2( rs.x, rs.y )
local rayEnd = vector2( re.x, re.y )
local centre = vector2( c.x, c.y )
-- First we get the normalised ray, this way we then know the direction the ray is going -- First we get the normalised ray, this way we then know the direction the ray is going
local rayNorm = norm( rayEnd - rayStart ) local rayNorm = norm( rayEnd - rayStart )
@@ -649,19 +661,20 @@ function RADAR:ShootCustomRay( plyVeh, veh, s, e )
-- use GetDistanceBetweenCoords or Vdist, the method below still returns the same result with less cpu time -- use GetDistanceBetweenCoords or Vdist, the method below still returns the same result with less cpu time
local dist = #( pos - s ) local dist = #( pos - s )
local key = tostring( veh )
-- We only perform a trace on the target vehicle if it exists, isn't the player's vehicle, and the distance is -- We only perform a trace on the target vehicle if it exists, isn't the player's vehicle, and the distance is
-- less than the max distance defined by the system -- less than the max distance defined by the system
if ( DoesEntityExist( veh ) and veh ~= plyVeh and dist < self:GetMaxCheckDist() --[[ and not self:HasVehicleAlreadyBeenHit( key ) ]] ) then if ( DoesEntityExist( veh ) and veh ~= plyVeh and dist < self:GetMaxCheckDist() ) then
-- Get the speed of the target vehicle -- Get the speed of the target vehicle
local entSpeed = GetEntitySpeed( veh ) local entSpeed = GetEntitySpeed( veh )
-- Check that the target vehicle is within the line of sight of the player's vehicle -- Check that the target vehicle is within the line of sight of the player's vehicle
local visible = HasEntityClearLosToEntity( plyVeh, veh, 15 ) -- 13 seems okay, 15 too (doesn't grab ents through ents) local visible = HasEntityClearLosToEntity( plyVeh, veh, 15 ) -- 13 seems okay, 15 too (doesn't grab ents through ents)
-- Get the pitch of the player's vehicle
local pitch = GetEntityPitch( plyVeh )
-- Now we check that the target vehicle is moving and is visible -- Now we check that the target vehicle is moving and is visible
if ( entSpeed > 0.1 and visible ) then if ( entSpeed > 0.1 and ( pitch > -35 and pitch < 35 ) and visible ) then
-- Get the dynamic radius as well as the size of the target vehicle -- Get the dynamic radius as well as the size of the target vehicle
local radius, size = self:GetDynamicRadius( veh ) local radius, size = self:GetDynamicRadius( veh )
@@ -670,8 +683,6 @@ function RADAR:ShootCustomRay( plyVeh, veh, s, e )
-- Return all of the information if the vehicle was hit -- Return all of the information if the vehicle was hit
if ( hit ) then if ( hit ) then
self:SetVehicleHasBeenHit( key )
return true, relPos, dist, entSpeed, size return true, relPos, dist, entSpeed, size
end end
end end
@@ -1012,6 +1023,10 @@ function RADAR:InsertCapturedVehicleData( t, rt )
end end
end end
--[[
These need to be changed so a ray type can be set too, otherwise in its current state, messes up vehicle
detection.
-- Sets the given value to true in the temp vehicles table, it is a test system used to reduce ray traces -- Sets the given value to true in the temp vehicles table, it is a test system used to reduce ray traces
-- on vehicles that have already been hit by another trace. Currently not implemented fully, as it doesn't -- on vehicles that have already been hit by another trace. Currently not implemented fully, as it doesn't
-- check for ray traces of different types, e.g. same or opp. -- check for ray traces of different types, e.g. same or opp.
@@ -1028,6 +1043,7 @@ end
function RADAR:ResetTempVehicleIDs() function RADAR:ResetTempVehicleIDs()
self.vars.tempVehicleIDs = {} self.vars.tempVehicleIDs = {}
end end
]]
--[[---------------------------------------------------------------------------------- --[[----------------------------------------------------------------------------------
@@ -1210,7 +1226,7 @@ function RADAR:GetVehiclesForAntenna()
for k, v in pairs( vehs[ant] ) do for k, v in pairs( vehs[ant] ) do
-- When we grab a vehicle for the fastest section, as it is like how the real system works, there are a few -- When we grab a vehicle for the fastest section, as it is like how the real system works, there are a few
-- additional checks that have to be made -- additional checks that have to be made
if ( self:CheckVehicleDataFitsMode( ant, v.rayType ) and v.veh ~= temp.veh and v.size < temp.size and v.speed > temp.speed ) then if ( self:CheckVehicleDataFitsMode( ant, v.rayType ) and v.veh ~= temp.veh and v.size < temp.size and v.speed + 1.0 > temp.speed ) then
-- Set the result for the current antenna -- Set the result for the current antenna
results[ant][2] = v results[ant][2] = v
break break
@@ -1361,9 +1377,6 @@ function RADAR:RunThreads()
-- Reset the main captured vehicles table -- Reset the main captured vehicles table
self:ResetCapturedVehicles() self:ResetCapturedVehicles()
-- Reset the ray trace state back to 0
-- self:ResetRayTraceState()
-- Here we run the function that creates all of the main ray threads -- Here we run the function that creates all of the main ray threads
self:CreateRayThreads( PLY.veh, vehs ) self:CreateRayThreads( PLY.veh, vehs )
@@ -1487,8 +1500,7 @@ function RADAR:Main()
-- Send the update to the NUI side -- Send the update to the NUI side
SendNUIMessage( { _type = "update", speed = data.patrolSpeed, antennas = data.antennas } ) SendNUIMessage( { _type = "update", speed = data.patrolSpeed, antennas = data.antennas } )
self:ResetTempVehicleIDs() -- self:ResetTempVehicleIDs()
-- self:ResetRayTraceState()
end end
end end
@@ -1591,6 +1603,18 @@ end )
------------------------------ DEBUG ------------------------------ ------------------------------ DEBUG ------------------------------
Citizen.CreateThread( function()
while ( true ) do
if ( PLY:VehicleStateValid() ) then
local pitch = GetEntityPitch( PLY.veh )
UTIL:DrawDebugText( 0.5, 0.75, 0.8, true, "Pitch: " .. tostring( pitch ) )
end
Citizen.Wait( 0 )
end
end )
--[[ Citizen.CreateThread( function() --[[ Citizen.CreateThread( function()
while ( true ) do while ( true ) do
if ( RADAR.config.debug_mode ) then if ( RADAR.config.debug_mode ) then