mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 15:06:02 +01:00
Some people accidentally, mistakenly, and without any malicious intent forget to attribute code from this resource to its source. This change will hopefully assist people, so that they do not make that mistake again.
80 lines
2.4 KiB
Lua
80 lines
2.4 KiB
Lua
--[[
|
|
https://github.com/overextended/ox_lib
|
|
|
|
This file is licensed under LGPL-3.0 or higher <https://www.gnu.org/licenses/lgpl-3.0.en.html>
|
|
|
|
Copyright (c) 2025 Linden <https://github.com/thelindat/fivem>
|
|
]]
|
|
|
|
lib.raycast = {}
|
|
|
|
local StartShapeTestLosProbe = StartShapeTestLosProbe
|
|
local GetShapeTestResultIncludingMaterial = GetShapeTestResultIncludingMaterial
|
|
local glm_sincos = require 'glm'.sincos
|
|
local glm_rad = require 'glm'.rad
|
|
local math_abs = math.abs
|
|
local GetFinalRenderedCamCoord = GetFinalRenderedCamCoord
|
|
local GetFinalRenderedCamRot = GetFinalRenderedCamRot
|
|
|
|
---@alias ShapetestIgnore
|
|
---| 1 GLASS
|
|
---| 2 SEE_THROUGH
|
|
---| 3 GLASS | SEE_THROUGH
|
|
---| 4 NO_COLLISION
|
|
---| 7 GLASS | SEE_THROUGH | NO_COLLISION
|
|
|
|
---@alias ShapetestFlags integer
|
|
---| 1 INCLUDE_MOVER
|
|
---| 2 INCLUDE_VEHICLE
|
|
---| 4 INCLUDE_PED
|
|
---| 8 INCLUDE_RAGDOLL
|
|
---| 16 INCLUDE_OBJECT
|
|
---| 32 INCLUDE_PICKUP
|
|
---| 64 INCLUDE_GLASS
|
|
---| 128 INCLUDE_RIVER
|
|
---| 256 INCLUDE_FOLIAGE
|
|
---| 511 INCLUDE_ALL
|
|
|
|
---@param coords vector3
|
|
---@param destination vector3
|
|
---@param flags ShapetestFlags? Defaults to 511.
|
|
---@param ignore ShapetestIgnore? Defaults to 4.
|
|
---@return boolean hit
|
|
---@return number entityHit
|
|
---@return vector3 endCoords
|
|
---@return vector3 surfaceNormal
|
|
---@return number materialHash
|
|
function lib.raycast.fromCoords(coords, destination, flags, ignore)
|
|
local handle = StartShapeTestLosProbe(coords.x, coords.y, coords.z, destination.x, destination.y,
|
|
destination.z, flags or 511, cache.ped, ignore or 4)
|
|
|
|
while true do
|
|
Wait(0)
|
|
local retval, hit, endCoords, surfaceNormal, material, entityHit = GetShapeTestResultIncludingMaterial(handle)
|
|
|
|
if retval ~= 1 then
|
|
return hit, entityHit, endCoords, surfaceNormal, material
|
|
end
|
|
end
|
|
end
|
|
|
|
local function getForwardVector()
|
|
local sin, cos = glm_sincos(glm_rad(GetFinalRenderedCamRot(2)))
|
|
return vec3(-sin.z * math_abs(cos.x), cos.z * math_abs(cos.x), sin.x)
|
|
end
|
|
|
|
---@param flags ShapetestFlags? Defaults to 511.
|
|
---@param ignore ShapetestIgnore? Defaults to 4.
|
|
---@param distance number? Defaults to 10.
|
|
function lib.raycast.fromCamera(flags, ignore, distance)
|
|
local coords = GetFinalRenderedCamCoord()
|
|
local destination = coords + getForwardVector() * (distance or 10)
|
|
|
|
return lib.raycast.fromCoords(GetFinalRenderedCamCoord(), destination, flags, ignore)
|
|
end
|
|
|
|
---@deprecated
|
|
lib.raycast.cam = lib.raycast.fromCamera
|
|
|
|
return lib.raycast
|