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 | 
