diff --git a/imports/raycast/client.lua b/imports/raycast/client.lua index 848cfda..dbac743 100644 --- a/imports/raycast/client.lua +++ b/imports/raycast/client.lua @@ -2,7 +2,16 @@ lib.raycast = {} local StartShapeTestLosProbe = StartShapeTestLosProbe local GetShapeTestResultIncludingMaterial = GetShapeTestResultIncludingMaterial -local GetWorldCoordFromScreenCoord = GetWorldCoordFromScreenCoord +local glm_sincos = require 'glm'.sincos +local glm_rad = require 'glm'.rad +local math_abs = math.abs +local GetFinalRenderedCamCoord = GetFinalRenderedCamCoord +local GetFinalRenderedCamRot = GetFinalRenderedCamRot + +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 ---@alias ShapetestIgnore ---| 1 GLASS @@ -20,20 +29,19 @@ local GetWorldCoordFromScreenCoord = GetWorldCoordFromScreenCoord ---@return vector3 surfaceNormal ---@return number materialHash function lib.raycast.cam(flags, ignore, distance) - local coords, normal = GetWorldCoordFromScreenCoord(0.5, 0.5) - local destination = coords + normal * (distance or 10) - local handle = StartShapeTestLosProbe(coords.x, coords.y, coords.z, destination.x, destination.y, destination.z, - flags or 511, cache.ped, ignore or 4) + local camCoords = GetFinalRenderedCamCoord() + local destination = camCoords + getForwardVector() * (distance or 10) + local handle = StartShapeTestLosProbe(camCoords.x, camCoords.y, camCoords.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, materialHash, entityHit = GetShapeTestResultIncludingMaterial(handle) + while true do + Wait(0) + local retval, hit, coords, surfaceNormal, materialHash, entityHit = GetShapeTestResultIncludingMaterial(handle) - if retval ~= 1 then - ---@diagnostic disable-next-line: return-type-mismatch - return hit, entityHit, endCoords, surfaceNormal, materialHash - end - end + if retval ~= 1 then + return hit, entityHit, coords, surfaceNormal, materialHash + end + end end return lib.raycast