53 lines
		
	
	
		
			No EOL
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			No EOL
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
Raycast = {}
 | 
						|
 | 
						|
--Rework of oxs Raycast system
 | 
						|
function Raycast.GetForwardVector(rotation)
 | 
						|
    local camRot = rotation or GetFinalRenderedCamRot(2)
 | 
						|
 | 
						|
    -- Convert each component to radians
 | 
						|
    local rx = math.rad(camRot.x)
 | 
						|
    local ry = math.rad(camRot.y)
 | 
						|
    local rz = math.rad(camRot.z)
 | 
						|
 | 
						|
    -- Calculate sin and cos for each axis
 | 
						|
    local sx = math.sin(rx)
 | 
						|
    local cx = math.cos(rx)
 | 
						|
    local sy = math.sin(ry)
 | 
						|
    local cy = math.cos(ry)
 | 
						|
    local sz = math.sin(rz)
 | 
						|
    local cz = math.cos(rz)
 | 
						|
 | 
						|
    -- Create forward vector components
 | 
						|
    local x = -sz * math.abs(cx)
 | 
						|
    local y = cz * math.abs(cx)
 | 
						|
    local z = sx
 | 
						|
 | 
						|
    return vector3(x, y, z)
 | 
						|
end
 | 
						|
 | 
						|
function Raycast.ToCoords(startCoords, endCoords, flag, ignore)
 | 
						|
    local probe = StartShapeTestLosProbe(startCoords.x, startCoords.y, startCoords.z, endCoords.x, endCoords.y, endCoords.z, flag or 511, PlayerPedId(), ignore or 4)
 | 
						|
    local retval, entity, finalCoords, normals, material  = 1, nil, nil, nil, nil
 | 
						|
 | 
						|
    local timeout = 500
 | 
						|
    while retval == 1 and timeout > 0 do
 | 
						|
        retval, entity, finalCoords, normals, material = GetShapeTestResultIncludingMaterial(probe)
 | 
						|
        timeout = timeout - 1
 | 
						|
        Wait(0)
 | 
						|
    end
 | 
						|
    return retval, entity, finalCoords, normals, material
 | 
						|
end
 | 
						|
 | 
						|
function Raycast.FromCamera(flags, ignore, distance)
 | 
						|
    local coords = GetFinalRenderedCamCoord()
 | 
						|
    distance = distance or 10
 | 
						|
    local destination = coords + Raycast.GetForwardVector() * distance
 | 
						|
    local retval, entity, finalCoords, normals, material = Raycast.ToCoords(coords, destination, flags, ignore)
 | 
						|
    if retval ~= 1 then
 | 
						|
        local newDest = destination - vector3(0, 0, 10)
 | 
						|
        return Raycast.ToCoords(destination, newDest, flags, ignore)
 | 
						|
    end
 | 
						|
    return retval, entity, finalCoords, normals, material
 | 
						|
end
 | 
						|
 | 
						|
return Raycast |