diff --git a/Wraith ARS 2X Operation Reference.docx b/(needs updating) Wraith ARS 2X Operation Reference.docx similarity index 100% rename from Wraith ARS 2X Operation Reference.docx rename to (needs updating) Wraith ARS 2X Operation Reference.docx diff --git a/bounding box vector points.txt b/bounding box vector points.txt deleted file mode 100644 index 82a1b15..0000000 --- a/bounding box vector points.txt +++ /dev/null @@ -1,13 +0,0 @@ -Vector points for bounding box: -All points are assuming the view is facing the rear of the vehicle -All points have been manually tested - -Bottom back left: min.x min.y min.z -Bottom back right: max.x min.y min.z -Bottom front left: min.x max.y min.z -Bottom front right: max.x max.y min.z - -Top back left: min.x min.y max.z -Top back right: max.x min.y max.z -Top front left: min.x max.y max.z -Top front right: max.x max.y max.z \ No newline at end of file diff --git a/cl_radar - sphere test.lua b/cl_radar - sphere test.lua deleted file mode 100644 index ec52a71..0000000 --- a/cl_radar - sphere test.lua +++ /dev/null @@ -1,636 +0,0 @@ ---[[------------------------------------------------------------------------ - - Wraith Radar System - v1.0.3 - Created by WolfKnight - -------------------------------------------------------------------------]]-- - ---[[------------------------------------------------------------------------ - Resource Rename Fix -------------------------------------------------------------------------]]-- -Citizen.CreateThread( function() - -- Wait for a short period of time to give the resource time to load - Citizen.Wait( 5000 ) - - -- Get the name of the resource, for example the default name is 'wk_wrs' - local resourceName = GetCurrentResourceName() - - -- Send a message through the NUI system to the JavaScript file to - -- give the name of the resource - SendNUIMessage( { resourcename = resourceName } ) -end ) - ---[[------------------------------------------------------------------------ - Radar variables -------------------------------------------------------------------------]]-- -RADAR.vars = -{ - -- Player's vehicle speed - patrolSpeed = 0, - - -- The speed type - speedType = "mph", - - -- Table to store entity IDs of captured vehicles - capturedVehicles = {}, - - captureOffsets = {}, - - -- Antennas - antennas = { - front = { - - }, - - back = { - - } - } -} - ---[[------------------------------------------------------------------------ - Radar setters and getters -------------------------------------------------------------------------]]-- -function RADAR:SetPatrolSpeed( speed ) - if ( type( speed ) == "number" ) then - self.vars.patrolSpeed = speed - end -end - -function RADAR:GetPatrolSpeed() - return self.vars.patrolSpeed -end - ---[[------------------------------------------------------------------------ - Radar functions -------------------------------------------------------------------------]]-- -function RADAR:GetVehSpeed( veh ) - if ( self.vars.speedType == "mph" ) then - return GetEntitySpeed( veh ) * 2.236936 - else - return GetEntitySpeed( veh ) * 3.6 - end -end - -function RADAR:ResetCapturedVehicles() - self.vars.capturedVehicles = {} -end - - -local entityEnumerator = { - __gc = function(enum) - if enum.destructor and enum.handle then - enum.destructor(enum.handle) - end - enum.destructor = nil - enum.handle = nil - end -} - -local function EnumerateEntities(initFunc, moveFunc, disposeFunc) - return coroutine.wrap(function() - local iter, id = initFunc() - if not id or id == 0 then - disposeFunc(iter) - return - end - - local enum = {handle = iter, destructor = disposeFunc} - setmetatable(enum, entityEnumerator) - - local next = true - repeat - coroutine.yield(id) - next, id = moveFunc(iter) - until not next - - enum.destructor, enum.handle = nil, nil - disposeFunc(iter) - end) -end - -function EnumeratePeds() - return EnumerateEntities(FindFirstPed, FindNextPed, EndFindPed) -end - -function EnumerateVehicles() - return EnumerateEntities(FindFirstVehicle, FindNextVehicle, EndFindVehicle) -end - - -local traces = -{ - { startVec = { x = 0.0, y = 5.0 }, endVec = { x = 0.0, y = 150.0 } }, - - -- "Forward cone" - { startVec = { x = -5.0, y = 15.0 }, endVec = { x = -5.0, y = 150.0 } }, - { startVec = { x = 5.0, y = 15.0 }, endVec = { x = 5.0, y = 150.0 } }, - { startVec = { x = -10.0, y = 25.0 }, endVec = { x = -10.0, y = 150.0 } }, - { startVec = { x = 10.0, y = 25.0 }, endVec = { x = 10.0, y = 150.0 } }, - { startVec = { x = -15.0, y = 35.0 }, endVec = { x = -15.0, y = 150.0 } }, - { startVec = { x = 15.0, y = 35.0 }, endVec = { x = 15.0, y = 150.0 } }, - - -- "Rear cone" - --[[{ startVec = { x = -2.5, y = 135.0 }, endVec = { x = -2.5, y = 15.0 } }, - { startVec = { x = 2.5, y = 135.0 }, endVec = { x = 2.5, y = 15.0 } }, - { startVec = { x = -7.5, y = 125.0 }, endVec = { x = -7.5, y = 25.0 } }, - { startVec = { x = 7.5, y = 125.0 }, endVec = { x = 7.5, y = 25.0 } }, - { startVec = { x = -12.5, y = 115.0 }, endVec = { x = -12.5, y = 35.0 } }, - { startVec = { x = 12.5, y = 115.0 }, endVec = { x = 12.5, y = 35.0 } }]] -} - -function RADAR:RayTraceFromVeh( playerVeh ) - local playerVehPos = GetEntityCoords( playerVeh, true ) - local forwardVector = GetEntityForwardVector( playerVeh ) - - -- Vector3 source = playerVehPos + forwardVector * Start.Y (15.0) + Game.Player.Character.CurrentVehicle.RightVector * Start.X (-5.0) - --local rayStart1 = playerVehPos + ( forwardVector * vector3( -5.0, 15.0, 0.0 ) ) + GetEntityRotation( playerVeh, false ) - --local rayEnd1 = playerVehPos + ( forwardVector * vector3( -5.0, 300.0, 0.0 ) ) + GetEntityRotation( playerVeh, false ) - - local offset = GetOffsetFromEntityInWorldCoords( playerVeh, 0.0, 60.0, 0.0 ) - - -- for veh in EnumerateVehicles() do - -- local pos = GetEntityCoords( veh, true ) - - -- local dist = GetDistanceBetweenCoords( pos.x, pos.y, pos.z, offset.x, offset.y, offset.z, true ) - - -- UTIL:DrawDebugText( 0.50, 0.50, 0.60, true, "Dist: " .. tostring( dist ), 255, 255, 255, 255 ) - -- end - - for k, v in pairs( traces ) do - local rayStart1 = GetOffsetFromEntityInWorldCoords( playerVeh, v.startVec.x, v.startVec.y, 0.0 ) - local rayEnd1 = GetOffsetFromEntityInWorldCoords( playerVeh, v.endVec.x, v.endVec.y, 0.0 ) - - DrawLine( rayStart1.x, rayStart1.y, rayStart1.z, rayEnd1.x, rayEnd1.y, rayEnd1.z, 255, 255, 255, 255 ) - - local rayHandle = StartShapeTestCapsule( rayStart1.x, rayStart1.y, rayStart1.z, rayEnd1.x, rayEnd1.y, rayEnd1.z, 20.0, 10, playerVeh ) - local _, hitEntity, endCoords, surfaceNormal, vehicle = GetShapeTestResult( rayHandle ) - - -- SetEntityAsMissionEntity( vehicle ) - - UTIL:DrawDebugText( 0.50, ( k * 0.040 ) + 0.6, 0.60, true, "Found entity: " .. tostring( vehicle ), 255, 255, 255, 255 ) - - local hitEntPos = GetEntityCoords( vehicle, true ) - DrawMarker( 28, hitEntPos.x, hitEntPos.y, hitEntPos.z + 6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 2.0, 0.5, 0, 250, 0, 200, false, true, 2, false, false, false, false ) - end -end - -function RADAR:DoesLineIntersectSphere( centre, radiusSqr, rayStart, rayEnd ) - -- First we get the normalised ray, this way we then know the direction the ray is going - local rayNorm = norm( rayEnd - rayStart ) - - -- Then we calculate the ray to the centre position of the sphere - local rayToCentre = vehPos - startPoint - - -- Now that we have the ray to the centre of the sphere, and the normalised ray direction, we - -- can calculate the shortest point from the centre of the sphere onto the ray itself. This - -- would then give us the opposite side of the right angled triangle. All of the resulting - -- values are also in squared form, as performing sqrt functions is slower. - local tProj = dot( rayToCentre, rayNorm ) - local oppLenSqr = dot( rayToCentre, rayToCentre ) - ( tProj * tProj ) - - -- Now all we have to do is compare the squared opposite length and the radius squared, this - -- will then tell us if the ray intersects with the sphere. - if ( oppLenSqr < radiusSqr ) then - return true - end - - return false -end - ---[[------------------------------------------------------------------------ - Test time -------------------------------------------------------------------------]]-- -function GetBoundingBox( ent ) - local mdl = GetEntityModel( ent ) - local min, max = GetModelDimensions( mdl ) - -- local radius = 5.0 - - -- min = min + -radius - -- max = max + radius - - local points = { - vector3( min.x, min.y, min.z ), -- Bottom back left - vector3( max.x, min.y, min.z ), -- Bottom back right - vector3( min.x, max.y, min.z ), -- Bottom front left - vector3( max.x, max.y, min.z ), -- Bottom front right - vector3( min.x, min.y, max.z ), -- Top back left - vector3( max.x, min.y, max.z ), -- Top back right - vector3( min.x, max.y, max.z ), -- Top front left - vector3( max.x, max.y, max.z ) -- Top front right - } - - return points -end - -function GetDrawableFromBoundingBox( box ) - local points = { - { box[1], box[3] }, - { box[3], box[4] }, - { box[4], box[2] }, - { box[2], box[1] }, - - { box[1], box[5] }, - { box[3], box[7] }, - { box[4], box[8] }, - { box[2], box[6] }, - - { box[5], box[7] }, - { box[7], box[8] }, - { box[8], box[6] }, - { box[6], box[5] } - } - - return points -end - -function DrawBoundingBox( ent, box ) - for _, v in pairs( box ) do - local a = GetOffsetFromEntityInWorldCoords( ent, v[1] ) - local b = GetOffsetFromEntityInWorldCoords( ent, v[2] ) - - DrawLine( a.x, a.y, a.z, b.x, b.y, b.z, 255, 255, 255, 255 ) - end -end - -function GetAllVehicleEnts() - local ents = {} - - for v in EnumerateVehicles() do - table.insert( ents, v ) - end - - return ents -end - -function CustomShapeTest( startPos, endPos, entToIgnore ) - local flags = 1 | 2 | 4 | 16 | 256 - local trace = StartShapeTestRay( startPos, endPos, flags, entToIgnore, 7 ) - local _, didHit, hitPos, _, hitEnt = GetShapeTestResult( trace ) - - UTIL:DrawDebugText( 0.500, 0.850, 0.55, true, "Hit?: " .. tostring( didHit ) .. "\nHit pos: " .. tostring( hitPos ) .. "\nHit ent: " .. tostring( hitEnt ) ) - - if ( hitPos ) then - DrawMarker( 28, hitPos.x, hitPos.y, hitPos.z + 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.25, 0, 250, 120, 200, false, true, 2, false, false, false, false ) - end -end - -function values(xs) - local i = 0 - return function() - i = i + 1; - return xs[i] - end -end - -function map(xs, fn) - local t = {} - for i,v in ipairs(xs) do - local r = fn(v, i, xs) - table.insert(t, r) - end - return t -end - -function filter(xs, fn) - local t = {} - for i,v in ipairs(xs) do - if fn(v, i, xs) then - table.insert(t, v) - end - end - return t -end - - -function DoesLineIntersectAABB( p1, p2, min, max ) - -- I know this probably isn't the best way to check if a line with a 'radius' intersects with - -- a bounding box, but it's a lot less resource intensive so... - --local min = min + -3.0 - --local max = max + 3.0 - - -- This checks to make sure the origin of the line doesn't start inside the box - -- Also known as "IsPointInsideAABB" - if ( ( p1.x > min.x and p1.x < max.x and p1.y > min.y and p1.y < max.y and p1.z > min.z and p1.z < max.z ) or - ( p2.x > min.x and p2.x < max.x and p2.y > min.y and p2.y < max.y and p2.z > min.z and p2.z < max.z ) ) then - return true - end - - -- This checks to make sure the line itself is not even near the box - for a in values( { 'x', 'y', 'z' } ) do - -- The first half of this statement checks to see if the axis origin and end line points - -- are less than the minimum of the bounding box, the second half checks the start and - -- end line points are beyond the maximum of the bounding box - if ( ( p1[a] < min[a] and p2[a] < min[a] ) or ( p1[a] > max[a] and p2[a] > max[a] ) ) then - return false - end - end - - -- Still trying to work out how this one works - for p in values( { min, max } ) do - for a, o in pairs( { x = { 'y', 'z' }, y = { 'x', 'z' }, z = { 'x', 'y' } } ) do - - -- p = min or max as vector - -- a = x, y or z - -- o = 'y''z', 'x''z' or 'x''y' respectively - -- eg h = l1 + ( l1[x] - min[x] ) / ( l1[x] - l2[x] ) * ( l2 - l1 ) - -- eg o1, o2 = [o1], o[2] = 'y', 'z' - - -- The below variable h appears to calculate the values that allow for x1, x2, y1, and y2 - -- This way the intersection point can be found - local h = p1 + ( p1[a] - p[a] ) / ( p1[a] - p2[a] ) * ( p2 - p1 ) - local o1, o2 = o[1], o[2] - - if ( h[o1] >= min[o1] and h[o1] <= max[o1] and h[o2] >= min[o2] and h[o2] <= max[o2] ) then - return true - end - end - end - - return false -end - -function DoesLineIntersectSphere() -end - -function DoesLineIntersectEntityBoundingBox(p1, p2, entity) - local model = GetEntityModel(entity) - local min, max = GetModelDimensions(model) - - local l1 = GetOffsetFromEntityGivenWorldCoords( entity, p1 ) - local l2 = GetOffsetFromEntityGivenWorldCoords( entity, p2 ) - - -- Citizen.Trace( "\np1: " .. tostring( p1 ) .. "\tp2: " .. tostring( p2 ) .. "\tl1: " .. tostring( l1 ) .. "\tl2: " .. tostring( l2 ) ) - - return DoesLineIntersectAABB(l1, l2, min, max) -end - - -function RaytraceBoundingBox(p1, p2, ignoredEntity) - local entities = GetAllVehicleEnts() - local matches = filter(entities, function (entity) - if entity == ignoredEntity then return false end - if not IsEntityOnScreen(entity) then return false end - -- if not IsEntityTargetable(entity) then return false end - return DoesLineIntersectEntityBoundingBox(p1, p2, entity) - end) - - table.sort(matches, function (a, b) - local h1 = GetEntityCoords(a) - local h2 = GetEntityCoords(b) - return #(p1 - h1) < #(p1 - h2) - end) - - if matches[1] then - local pos = GetEntityCoords(matches[1]) - return pos, matches[1] - end - - return nil, nil -end - - -function RADAR:Test() - -- Get the player's ped - local ped = GetPlayerPed( -1 ) - - -- Make sure the player is sitting in a vehicle - if ( IsPedSittingInAnyVehicle( ped ) ) then - -- Get the vehicle the player is in - local plyVeh = GetVehiclePedIsIn( ped, false ) - local plyVehPos = GetEntityCoords( plyVeh ) - - -- Check the vehicle actually exists and that the player is in the driver's seat - if ( DoesEntityExist( plyVeh ) and GetPedInVehicleSeat( plyVeh, -1 ) ) then - local startPoint = GetOffsetFromEntityInWorldCoords( plyVeh, 0.0, 5.0, 0.0 ) - local endPoint = GetOffsetFromEntityInWorldCoords( plyVeh, 0.0, 50.0, 1.0 ) - DrawLine( startPoint, endPoint, 0, 255, 0, 255 ) - - --for veh in EnumerateVehicles() do - - local veh = UTIL:GetVehicleInDirection( plyVeh, startPoint, endPoint ) - - if ( DoesEntityExist( veh ) ) then - local vehPos = GetEntityCoords( veh ) - local vehPosRel = GetOffsetFromEntityGivenWorldCoords( plyVeh, vehPos ) - - --[[local vehBox = GetBoundingBox( veh ) - local drawableBox = GetDrawableFromBoundingBox( vehBox ) - DrawBoundingBox( veh, drawableBox )]] - - if ( veh ~= plyVeh ) then - DrawMarker( 28, vehPos.x, vehPos.y, vehPos.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.0, 10.0, 10.0, 255, 120, 80, 40, false, true, 2, false, false, false, false ) - - -- First attempt, didn't really work - -- local r = 5.0 - -- local ro = startPoint - -- local s = vehPos - -- local rd = norm( startPoint ) - -- local t = dot( s - ro, rd ) - -- local p = ro + ( rd * t ) - - -- UTIL:DrawDebugSphere( ro.x, ro.y, ro.z, 0.5 ) - -- UTIL:DrawDebugSphere( s.x, s.y, s.z, 0.5 ) - -- UTIL:DrawDebugSphere( p.x, p.y, p.z, 0.5 ) - - -- local y = #( s - p ) - - -- if ( y < r ) then - -- local x = math.sqrt( ( r * r ) - ( y * y ) ) - -- local t1 = t - x - -- local t2 = t + x - - -- UTIL:DrawDebugText( 0.500, 0.700, 0.50, true, "t1: " .. tostring( t1 ) .. "\nt2: " .. tostring( t2 ) ) - -- end - - -- Second attempt - -- local ra = 20.0 - -- local ce = vehPos - -- local ro = startPoint - -- local rd = norm( startPoint ) - - -- local oc = ro - ce - -- local b = dot( oc, rd ) - -- local c = dot( oc, oc ) - ( ra * ra ) - -- local h = ( b * b ) - c - - -- if ( h > 0.0 ) then - -- h = math.sqrt( h ) - -- local result = vector2( -b-h, -b+h ) - - -- UTIL:DrawDebugText( 0.500, 0.700, 0.50, true, "Result: " .. tostring( result ) ) - -- end - - -- Third bloody attempt - -- local center = vehPos - -- local radius = 5.0 - -- local ro = startPoint - -- local rd = norm( startPoint ) - - -- local oc = startPoint - center - -- local a = dot( rd, rd ) - -- local b = 2.0 * dot( oc, rd ) - -- local c = dot( oc, oc ) - radius * radius - -- local dis = b * b - 4 * a * c - - -- if ( dis < 0 ) then - -- UTIL:DrawDebugText( 0.500, 0.650, 0.50, true, "-1" ) - -- else - -- local val = ( -b - math.sqrt( dis ) ) / ( 2.0 * a ) - -- UTIL:DrawDebugText( 0.500, 0.650, 0.50, true, "yes" ) - -- end - - -- Fourth attempt - local offset = GetOffsetFromEntityGivenWorldCoords( veh, startPoint ) - UTIL:DrawDebugText( 0.500, 0.550, 0.50, true, tostring( offset ) ) - - local radius = 10.0 - local radiusSqr = radius * radius - - local rayNorm = norm( endPoint - startPoint ) - UTIL:DrawDebugText( 0.500, 0.600, 0.50, true, "rayNorm: " .. tostring( rayNorm ) ) - - local rayToCenter = vehPos - startPoint - DrawLine( startPoint, vehPos, 255, 255, 255, 255 ) - - local tProj = dot( rayToCenter, rayNorm ) - UTIL:DrawDebugText( 0.500, 0.625, 0.50, true, "tProj: " .. tostring( tProj ) ) - - UTIL:DrawDebugText( 0.500, 0.100, 0.60, true, "Veh in front? = " .. tostring( ( tProj > 0 ) ) ) - - local iPos = ( rayNorm * tProj ) + startPoint - DrawLine( vehPos, iPos, 255, 255, 255, 255 ) -- draw the smallest point - DrawLine( startPoint, iPos, 255, 255, 255, 255 ) -- draw a line on the opposite - - local oppLenSqr = dot( rayToCenter, rayToCenter ) - ( tProj * tProj ) - UTIL:DrawDebugText( 0.500, 0.650, 0.50, true, "radiusSqr: " .. tostring( radiusSqr ) ) - UTIL:DrawDebugText( 0.500, 0.675, 0.50, true, "oppLenSqr: " .. tostring( oppLenSqr ) ) - - if ( oppLenSqr > radiusSqr ) then - UTIL:DrawDebugText( 0.500, 0.800, 0.50, true, "Projection point outside radius" ) - elseif ( oppLenSqr == radiusSqr ) then - UTIL:DrawDebugText( 0.500, 0.825, 0.50, true, "Single point intersection" ) - end - - local oLen = math.sqrt( radiusSqr - oppLenSqr ) - UTIL:DrawDebugText( 0.500, 0.700, 0.50, true, "oLen: " .. tostring( oLen ) ) - - local t0 = tProj - oLen - local t1 = tProj + oLen - - if ( t1 < t0 ) then - local tmp = t0 - t0 = t1 - t1 = tmp - end - - UTIL:DrawDebugText( 0.500, 0.725, 0.50, true, "t0: " .. tostring( t0 ) .. "\nt1: " .. tostring( t1 ) ) - - local t0p = ( rayNorm * t0 ) + startPoint - local t1p = ( rayNorm * t1 ) + startPoint - - UTIL:DrawDebugSphere( t0p.x, t0p.y, t0p.z, 0.25 ) - UTIL:DrawDebugSphere( t1p.x, t1p.y, t1p.z, 0.25 ) - - DrawLine( vehPos, t0p, 255, 255, 0, 255 ) - DrawLine( vehPos, t1p, 255, 255, 0, 255 ) - - if ( oppLenSqr < radiusSqr ) then - UTIL:DrawDebugText( 0.500, 0.875, 0.55, true, "Intersects sphere" ) - else - UTIL:DrawDebugText( 0.500, 0.925, 0.55, true, "Doesn't intersect sphere" ) - end - end - end - end - end -end - -function RADAR:Main() - -- Get the local player's ped and store it in a variable - local ped = GetPlayerPed( -1 ) - - -- As we only want the radar to work when a player is sitting in a - -- vehicle, we run that check first - if ( IsPedSittingInAnyVehicle( ped ) ) then - -- Get the vehicle the player is sitting in - local vehicle = GetVehiclePedIsIn( ped, false ) - - UTIL:DrawDebugText( 0.50, 0.020, 0.60, true, "Found player vehicle: " .. tostring( vehicle ), 255, 255, 255, 255 ) - - -- Check to make sure the player is in the driver's seat, and also - -- that the vehicle has a class of VC_EMERGENCY (18) - if ( GetPedInVehicleSeat( vehicle, -1 ) == ped --[[ and GetVehicleClass( vehicle ) == 18 ]] ) then - local vehicleSpeed = UTIL:Round( self:GetVehSpeed( vehicle ), 0 ) - local vehicleHeading = UTIL:Round( GetEntityHeading( vehicle ), 0 ) - - UTIL:DrawDebugText( 0.50, 0.060, 0.60, true, "Self speed: " .. tostring( vehicleSpeed ), 255, 255, 255, 255 ) - - local vehiclePos = GetEntityCoords( vehicle, true ) - -- local edge = GetOffsetFromEntityInWorldCoords( vehicle, 20.0, 50.0, 0.0 ) - - local newX = UTIL:Round( vehiclePos.x, 0 ) - local newY = UTIL:Round( vehiclePos.y, 0 ) - local newZ = UTIL:Round( vehiclePos.z, 0 ) - - UTIL:DrawDebugText( 0.50, 0.100, 0.60, true, "Vehicle X: " .. tostring( newX ) .. " Vehicle Y: " .. tostring( newY ) .. " Vehicle Z: " .. tostring( newZ ), 255, 255, 255, 255 ) - - local model = GetEntityModel( vehicle ) - local min, max = GetModelDimensions( model ) - local format = "Min X: " .. tostring( min.x ) .. " Min Y: " .. tostring( min.y ) .. " Min Z: " .. tostring( min.z ) - local format2 = "Max X: " .. tostring( max.x ) .. " Max Y: " .. tostring( max.y ) .. " Max Z: " .. tostring( max.z ) - - UTIL:DrawDebugText( 0.50, 0.180, 0.60, true, "Model: " .. tostring( model ), 255, 255, 255, 255 ) - UTIL:DrawDebugText( 0.50, 0.220, 0.60, true, format, 255, 255, 255, 255 ) - UTIL:DrawDebugText( 0.50, 0.260, 0.60, true, format2, 255, 255, 255, 255 ) - - for veh in EnumerateVehicles() do - if ( GetEntitySpeed( veh ) > 1.0 and veh ~= vehicle ) then - local aiVehHeading = UTIL:Round( GetEntityHeading( veh ), 0 ) - local sameHeading = UTIL:IsEntityInMyHeading( vehicleHeading, aiVehHeading, 45 ) - - if ( sameHeading ) then - local mdl = GetEntityModel( veh ) - - if ( IsThisModelACar( mdl ) or IsThisModelABike( mdl ) or IsThisModelAQuadbike( mdl ) ) then - local bounds = getBoundingBox( veh ) - local boundsDrawable = getBoundingBoxDrawable( bounds ) - drawBoundingBox( veh, boundsDrawable ) - end - end - end - end - - -- self:RayTraceFromVeh( vehicle ) - - -- local newPos = GetOffsetFromEntityInWorldCoords( vehicle, 0.0, 10.0, 0.0 ) - - -- UTIL:DrawSphere( newPos.x, newPos.y, newPos.z, 6.0, 128, 255, 0, 0.15 ) - - -- local ranVeh = GetRandomVehicleInSphere( newPos.x, newPos.y, newPos.z, 6.0, 0, 23 ) - - -- UTIL:DrawDebugText( 0.50, 0.140, 0.60, true, "Found random vehicle: " .. tostring( ranVeh ), 255, 255, 255, 255 ) - - -- if ( DoesEntityExist( ranVeh ) and IsEntityAVehicle( ranVeh ) ) then - -- local targetPos = GetEntityCoords( ranVeh, true ) - -- DrawMarker(2, targetPos.x, targetPos.y, targetPos.z + 6, 0.0, 0.0, 0.0, 0.0, 180.0, 0.0, 2.0, 2.0, 2.0, 255, 128, 0, 50, false, true, 2, nil, nil, false) - -- end - - -- begin bubble test - -- for i = 1, 5 do - -- local newPos = GetOffsetFromEntityInWorldCoords( vehicle, 0.0, i * 10.0, 0.0 ) - -- -- UTIL:DrawSphere( newPos1.x, newPos1.y, newPos1.z, 2.0, 128, 255, 20, 0.4 ) - -- DrawMarker( 28, newPos.x, newPos.y, newPos.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, i * 2.0, i * 2.0, 0.5, 0, 250, 0, 200, false, true, 2, false, false, false, false ) - -- end - end - end -end - -Citizen.CreateThread( function() - while ( true ) do - -- RADAR:Main() - RADAR:Test() - - Citizen.Wait( 0 ) - end -end ) \ No newline at end of file diff --git a/nui/old/digital-7.regular.ttf b/nui/old/digital-7.regular.ttf deleted file mode 100644 index 5dbe6f9..0000000 Binary files a/nui/old/digital-7.regular.ttf and /dev/null differ diff --git a/nui/old/radar.css b/nui/old/radar.css deleted file mode 100644 index 8b11ff4..0000000 --- a/nui/old/radar.css +++ /dev/null @@ -1,296 +0,0 @@ -/*------------------------------------------------------------------------- - - Wraith Radar System - v1.0.3 - Created by WolfKnight - - Just a word of warning, I'm not the best at CSS structure, so this - could probably be 10x better, but fuck it. - --------------------------------------------------------------------------*/ - -@font-face { - font-family: "Digital-7"; - src: url( "digital-7.regular.ttf" ); -} - -/* Police Radar */ -#policeradar { - /* To change the scale of the radar, change the value in the 'scale' function below. - Examples: - - 1.0 = default size - - 2.0 = twice the original size - - 0.5 = half the original size */ - transform: scale( 2.0 ); - - width: 495px; - height: 202px; - - position: absolute; - margin: auto; - - top:0; - bottom: 0; - left: 0; - right: 0; - - color: white; - background: rgba( 20, 20, 20, 0.97 ); - background: linear-gradient( to bottom, rgb( 50, 50, 50 ), rgb( 25, 25, 25 ) ); - border-radius: 10px; - - display: flex; - flex-direction: column; - justify-content: space-around; - align-items: center; -} - #policeradar .antennalabel { - font-family: Verdana; - font-size: 14px; - font-weight: bold; - text-align: center; - width: 100%; - position: absolute; - } - - #policeradar .antennalabeltop { - top: 0; - left: 0; - padding-top: 5px; - } - - #policeradar .antennalabelbottom { - bottom: 0; - left: 0; - padding-bottom: 5px; - } - - #policeradar .logo { - font-family: Verdana; - font-size: 17px; - font-weight: bold; - bottom: 15px; - right: 20px; - position: absolute; - } - - #policeradar .main { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-around; - width: 100%; - height: 100%; - } - - #policeradar .patrolcontainer { - background-color: black; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; - } - - #policeradar .typecontainer { - background-color: black; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; - width: 0; - } - #policeradar .typecontainer .text { - font-family: Verdana; - font-size: 10px; - line-height: 27px; - margin-left: 13px; - color: black; - } - - #policeradar .typecontainer .active { - color: white; - } - - #policeradar .container { - display: flex; - flex-direction: column; - align-items: center; - height: 100%; - justify-content: space-around; - } - #policeradar .container .label { - font-family: Verdana; - font-weight: bold; - font-size: 10px; - text-align: center; - } - - #policeradar .container .speedsourcecontainer { - width: 135px; - height: 58px; - display: flex; - justify-content: space-around; - } - #policeradar .container .speedsourcecontainer .speednumber { - width: 100%; - } - - #policeradar .container .speedsourcecontainer .text { - font-family: "Digital-7"; - font-size: 58px; - line-height: 58px; - width: 100%; - text-align: center; - } - - #policeradar .container .target { - background: rgb( 200, 0, 0 ); - background: linear-gradient( to bottom, rgb( 220, 0, 40 ), rgb( 90, 0, 0 ) ); - } - - #policeradar .container .patrol { - background: rgb( 0, 125, 0 ); - background: linear-gradient( to bottom, rgb( 0, 150, 0 ), rgb( 0, 75, 0 ) ); - } - - #policeradar .container .locked { - color: rgb( 50, 0, 0 ); - } - - #policeradar .container .speedfastcontainer { - width: 99px; - height: 50px; - display: flex; - flex-direction: row; - justify-content: space-around; - } - #policeradar .container .speedfastcontainer .speednumber { - width: 100%; - } - - #policeradar .container .speedfastcontainer .text { - font-family: "Digital-7"; - font-size: 50px; - line-height: 50px; - width: 100%; - text-align: center; - } - - #policeradar .arrowbox { - justify-content: center; - align-items: center; - } - #policeradar .arrowbox i { - font-size: 20px; - padding-top: 5px; - padding-bottom: 5px; - color: black; - } - - #policeradar .arrowbox .active { - color: white; - } - - #policeradar .arrowbox .inactive { - color: black; - } - - -/* Police Radar - Remote Control */ -#policeradarrc { - width: 290px; - height: 380px; - - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: auto; - padding: 10px 5px; - - color: white; - background-color: rgba( 20, 20, 20, 0.95 ); - border-radius: 5px; - - display: flex; - flex-direction: column; - justify-content: space-around; - align-items: center; -} - -#policeradarrc .breakline { - width: 230px; - height: 10px; - background-color: white; -} - -#policeradarrc .label { - font-family: Verdana; -} - -#policeradarrc .container { - font-family: Verdana; - align-items: center; -} - -#policeradarrc .container button { - display: inline-block; - cursor: pointer; - text-decoration: none; - outline: none; - border: none; -} - -#policeradarrc .container button:hover { - background-color: #6cd3f9; -} - -#policeradarrc .container button:active { - background-color: #56a8c7; -} - -#policeradarrc .container .toggle { - padding: 5px 15px; - font-size: 16px; - text-align: center; - color: black; - background-color: white; - border-radius: 15px; - margin-bottom: 15px; -} - -#policeradarrc .container .limit { - padding: 5px 15px; - font-size: 16px; - text-align: center; - color: black; - background-color: white; - border-radius: 15px; - margin-top: 15px; -} - -#policeradarrc .container .close { - padding: 3px 7px; - font-size: 12px; -} - -#policeradarrc .container .rowbutton { - width: 60px; - height: 60px; -} - -#policeradarrc .container .frontopp { - border-top-left-radius: 50%; -} - -#policeradarrc .container .frontsame { - border-top-right-radius: 50%; -} - -#policeradarrc .container .rearopp { - border-bottom-left-radius: 50%; -} - -#policeradarrc .container .rearsame { - border-bottom-right-radius: 50%; -} \ No newline at end of file diff --git a/nui/old/radar.html b/nui/old/radar.html deleted file mode 100644 index 186e1f3..0000000 --- a/nui/old/radar.html +++ /dev/null @@ -1,158 +0,0 @@ - - - -
- - - - - - - - -