Scripts/resources/[standalone]/mka-lasers/client/utils.lua

77 lines
2.8 KiB
Lua
Raw Normal View History

2024-12-29 20:02:43 +00:00
local pi, sin, cos, abs = math.pi, math.sin, math.cos, math.abs
local function RotationToDirection(rotation)
local piDivBy180 = pi / 180
local adjustedRotation = vector3(
piDivBy180 * rotation.x,
piDivBy180 * rotation.y,
piDivBy180 * rotation.z
)
local direction = vector3(
-sin(adjustedRotation.z) * abs(cos(adjustedRotation.x)),
cos(adjustedRotation.z) * abs(cos(adjustedRotation.x)),
sin(adjustedRotation.x)
)
return direction
end
function RayCastGamePlayCamera(distance)
local cameraRotation = GetGameplayCamRot()
local cameraCoord = GetGameplayCamCoord()
--local right, direction, up, pos = GetCamMatrix(GetRenderingCam())
--local cameraCoord = pos
local direction = RotationToDirection(cameraRotation)
local destination = vector3(
cameraCoord.x + direction.x * distance,
cameraCoord.y + direction.y * distance,
cameraCoord.z + direction.z * distance
)
local ray = StartShapeTestRay(cameraCoord.x, cameraCoord.y, cameraCoord.z,
destination.x, destination.y, destination.z, 1, -1, 0)
local rayHandle, hit, endCoords, surfaceNormal, entityHit = GetShapeTestResult(ray)
return hit, endCoords, entityHit, surfaceNormal
end
-- GetUserInput function inspired by vMenu (https://github.com/TomGrobbe/vMenu/blob/master/vMenu/CommonFunctions.cs)
function GetUserInput(windowTitle, defaultText, maxInputLength)
blockinput = true
-- Create the window title string.
local resourceName = string.upper(GetCurrentResourceName())
local textEntry = resourceName .. "_WINDOW_TITLE"
if windowTitle == nil then
windowTitle = "Enter:"
end
AddTextEntry(textEntry, windowTitle)
-- Display the input box.
DisplayOnscreenKeyboard(1, textEntry, "", defaultText or "", "", "", "", maxInputLength or 30)
Wait(0)
-- Wait for a result.
while true do
local keyboardStatus = UpdateOnscreenKeyboard();
if keyboardStatus == 3 then -- not displaying input field anymore somehow
blockinput = false
return nil
elseif keyboardStatus == 2 then -- cancelled
blockinput = false
return nil
elseif keyboardStatus == 1 then -- finished editing
blockinput = false
return GetOnscreenKeyboardResult()
else
Wait(0)
end
end
end
function randomTargetSelectionInput()
local randomTargetSelection = GetUserInput("Should the laser randomly select it's next target point? (Y/n)", "", 1)
if randomTargetSelection == nil then return nil end
if randomTargetSelection == "" or string.lower(randomTargetSelection) == "y" then return true end
if string.lower(randomTargetSelection) == "n" then return false end
return randomTargetSelection
end
function DrawSphere(pos, radius, r, g, b, a)
DrawMarker(28, pos.x, pos.y, pos.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, radius, radius, radius, r, g, b, a, false, false, 2, nil, nil, false)
end