140 lines
3.8 KiB
Lua
140 lines
3.8 KiB
Lua
-- Author : Morow
|
|
-- Github : https://github.com/Morow73
|
|
|
|
-- list of materials https://pastebin.com/PBE6wQSG
|
|
|
|
Utils = {}
|
|
Utils.materials = {-840216541, -1693813558, -754997699, -1469616465, 1926285543, -1369136684}
|
|
Utils.__index = Utils
|
|
|
|
local cam = nil
|
|
|
|
function Utils:getEntityCoords(entity)
|
|
return GetEntityCoords(entity)
|
|
end
|
|
|
|
function Utils:setEntityCoords(entity, new_coords)
|
|
SetEntityCoords(entity, new_coords, false, false, false, false)
|
|
end
|
|
|
|
function Utils:getEntityHeading(entity)
|
|
return GetEntityHeading(entity)
|
|
end
|
|
|
|
function Utils:setEntityHeading(entity, new_heading)
|
|
SetEntityHeading(entity, new_heading)
|
|
end
|
|
|
|
function Utils:freezeEntity(entity, toggle)
|
|
FreezeEntityPosition(entity, toggle)
|
|
end
|
|
|
|
function Utils:placePed(h)
|
|
SetEntityHeading(c.ball.object, h+360.0)
|
|
AttachEntityToEntity(c.ped(), c.ball.object, 20, 0.14, -0.62, 0.99, 0.0, 0.0, 0.0, false, false, false, false, 1, true)
|
|
DetachEntity(c.ped(), true, true)
|
|
SetEntityHeading(c.ball.object, 0.0)
|
|
end
|
|
|
|
function Utils:createCamera()
|
|
cam = CreateCam("DEFAULT_SCRIPTED_FLY_CAMERA", true)
|
|
RenderScriptCams(true, false, 0, true, true)
|
|
SetCamFov(cam, 90.0)
|
|
AttachCamToEntity(cam, c.ball.object, -0.2, 0.0, 1.0099, false)
|
|
end
|
|
|
|
function Utils:deleteCamera()
|
|
if cam then
|
|
DestroyCam(cam, true)
|
|
RenderScriptCams(false, false, 0, true, true)
|
|
cam = nil
|
|
end
|
|
end
|
|
|
|
function Utils:playAnimation(dict, anim, coords, duration, loop)
|
|
RequestAnimDict(dict)
|
|
|
|
while not HasAnimDictLoaded(dict) do
|
|
Wait(1)
|
|
end
|
|
|
|
if HasAnimDictLoaded(dict) then
|
|
local x, y, z = false, false, false
|
|
|
|
if coords then
|
|
x = coords.x
|
|
y = coords.y
|
|
z = coords.z
|
|
end
|
|
|
|
TaskPlayAnim(PlayerPedId(), dict, anim, 8.0, -8.0, duration or -1, loop or 0, 0, x, y, z)
|
|
end
|
|
end
|
|
|
|
function Utils:playSoundFromEntity(sound)
|
|
PlaySoundFromEntity(-1, sound, PlayerPedId(), 0, 0, 0)
|
|
end
|
|
|
|
function Utils:groundMaterial()
|
|
local ballCoords = self:getEntityCoords(c.ball.object)
|
|
local shape = StartShapeTestCapsule(ballCoords.x, ballCoords.y, ballCoords.z + 4, ballCoords.x, ballCoords.y, ballCoords.z - 0.03, 2, -1, c.ball.object, 7)
|
|
local result, hit, endCoords, surfaceNormal, materialHash, entityHit = GetShapeTestResultIncludingMaterial(shape)
|
|
|
|
if materialHash == 0 then
|
|
materialHash = GetLastMaterialHitByEntity(c.ball.object)
|
|
end
|
|
|
|
for i = 1, #self.materials, 1 do
|
|
local material = self.materials[i]
|
|
--print(material, materialHash)
|
|
if material == materialHash or materialHash == 0 then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function Utils:deg(x, y)
|
|
local heading = math.atan2(x, y)
|
|
|
|
if heading < 0 then
|
|
heading = math.deg(math.abs(heading))
|
|
else
|
|
heading = math.deg(2 * math.pi - heading)
|
|
end
|
|
|
|
heading = heading + 90.0
|
|
|
|
return heading
|
|
end
|
|
|
|
function Utils:rotationToDirection(rotation)
|
|
local adjustedRotation =
|
|
{
|
|
x = (math.pi / 180) * rotation.x,
|
|
y = (math.pi / 180) * rotation.y,
|
|
z = (math.pi / 180) * rotation.z
|
|
}
|
|
local direction =
|
|
{
|
|
x = -math.sin(adjustedRotation.z) * math.abs(math.cos(adjustedRotation.x)),
|
|
y = math.cos(adjustedRotation.z) * math.abs(math.cos(adjustedRotation.x)),
|
|
z = math.sin(adjustedRotation.x)
|
|
}
|
|
return direction
|
|
end
|
|
|
|
function Utils:rayCastGamePlayCamera(distance)
|
|
local cameraRotation = GetGameplayCamRot()
|
|
local cameraCoord = GetGameplayCamCoord()
|
|
local direction = self:rotationToDirection(cameraRotation)
|
|
local destination =
|
|
{
|
|
x = cameraCoord.x + direction.x * distance,
|
|
y = cameraCoord.y + direction.y * distance,
|
|
z = cameraCoord.z + direction.z * distance
|
|
}
|
|
local a, b, c, d, e = GetShapeTestResult(StartShapeTestRay(cameraCoord.x, cameraCoord.y, cameraCoord.z, destination.x, destination.y, destination.z, -1, -1, 1))
|
|
return c
|
|
end |