Scripts/resources/[standalone]/PolyZone/creation/client/BoxZone.lua

112 lines
3.5 KiB
Lua
Raw Permalink Normal View History

2024-12-29 20:02:43 +00:00
local function handleInput(useZ, heading, length, width, center)
if not useZ then
local scaleDelta, headingDelta = 0.2, 5
BlockWeaponWheelThisFrame()
DisableControlAction(0, 36, true)
if IsDisabledControlPressed(0, 36) then -- ctrl held down
scaleDelta, headingDelta = 0.05, 1
end
DisableControlAction(0, 81, true)
if IsDisabledControlJustPressed(0, 81) then
if IsControlPressed(0, 19) then -- alt held down
return heading, length, math.max(0.0, width - scaleDelta), center
end
if IsControlPressed(0, 21) then -- shift held down
return heading, math.max(0.0, length - scaleDelta), width, center
end
return (heading - headingDelta) % 360, length, width, center
end
DisableControlAction(0, 99, true)
if IsDisabledControlJustPressed(0, 99) then
if IsControlPressed(0, 19) then -- alt held down
return heading, length, math.max(0.0, width + scaleDelta), center
end
if IsControlPressed(0, 21) then -- shift held down
return heading, math.max(0.0, length + scaleDelta), width, center
end
return (heading + headingDelta) % 360, length, width, center
end
end
local rot = GetGameplayCamRot(2)
center = handleArrowInput(center, rot.z)
return heading, length, width, center
end
function handleZ(minZ, maxZ)
local delta = 0.2
DisableControlAction(0, 36, true)
if IsDisabledControlPressed(0, 36) then -- ctrl held down
delta = 0.05
end
BlockWeaponWheelThisFrame()
DisableControlAction(0, 81, true)
if IsDisabledControlJustPressed(0, 81) then
if IsControlPressed(0, 19) then -- alt held down
return minZ - delta, maxZ
end
if IsControlPressed(0, 21) then -- shift held down
return minZ, maxZ - delta
end
return minZ - delta, maxZ - delta
end
DisableControlAction(0, 99, true)
if IsDisabledControlJustPressed(0, 99) then
if IsControlPressed(0, 19) then -- alt held down
return minZ + delta, maxZ
end
if IsControlPressed(0, 21) then -- shift held down
return minZ, maxZ + delta
end
return minZ + delta, maxZ + delta
end
return minZ, maxZ
end
function boxStart(name, heading, length, width, minHeight, maxHeight)
local center = GetEntityCoords(PlayerPedId())
createdZone = BoxZone:Create(center, length, width, {name = tostring(name)})
local useZ, minZ, maxZ = false, center.z - 1.0, center.z + 3.0
if minHeight then
minZ = center.z - minHeight
createdZone.minZ = minZ
end
if maxHeight then
maxZ = center.z + maxHeight
createdZone.maxZ = maxZ
end
Citizen.CreateThread(function()
while createdZone do
if IsControlJustPressed(0, 20) then -- Z pressed
useZ = not useZ
if useZ then
createdZone.debugColors.walls = {255, 0, 0}
else
createdZone.debugColors.walls = {0, 255, 0}
end
end
heading, length, width, center = handleInput(useZ, heading, length, width, center)
if useZ then
minZ, maxZ = handleZ(minZ, maxZ)
createdZone.minZ = minZ
createdZone.maxZ = maxZ
end
createdZone:setLength(length)
createdZone:setWidth(width)
createdZone:setHeading(heading)
createdZone:setCenter(center)
Wait(0)
end
end)
end
function boxFinish()
TriggerServerEvent("polyzone:printBox",
{name=createdZone.name, center=createdZone.center, length=createdZone.length, width=createdZone.width, heading=createdZone.offsetRot, minZ=createdZone.minZ, maxZ=createdZone.maxZ})
end