From 4da4756f7ac6205953bb6e9b2dc29567a7b6795b Mon Sep 17 00:00:00 2001 From: DokaDoka Date: Sun, 2 Oct 2022 11:43:10 +1000 Subject: [PATCH] fix(resource/zoneCreator): floating point error mitigation --- resource/zoneCreator/client.lua | 67 ++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/resource/zoneCreator/client.lua b/resource/zoneCreator/client.lua index 39c81c3..0269d1b 100644 --- a/resource/zoneCreator/client.lua +++ b/resource/zoneCreator/client.lua @@ -6,6 +6,7 @@ local points = {} local format = 'array' local displayModes = {'basic', 'walls', 'axes', 'both'} local displayMode = 1 +local minCheck = steps[1][1] / 2 local function firstToUpper(str) return (str:gsub("^%l", string.upper)) @@ -194,17 +195,19 @@ local function startCreator(arg) EnableControlAction(0, 2, true) EnableControlAction(0, 245, true) -- t local change = false + local lStep = steps[1][step] + local rStep = steps[2][step] if IsDisabledControlJustReleased(0, 17) then -- scroll up if IsDisabledControlPressed(0, 21) then -- shift held down change = true - height += steps[1][step] + height += lStep elseif IsDisabledControlPressed(0, 36) then -- ctrl held down change = true - width += steps[1][step] + width += lStep elseif IsDisabledControlPressed(0, 19) then -- alt held down change = true - length += steps[1][step] + length += lStep elseif step < 11 then change = true step += 1 @@ -212,18 +215,24 @@ local function startCreator(arg) elseif IsDisabledControlJustReleased(0, 16) then -- scroll down if IsDisabledControlPressed(0, 21) then -- shift held down change = true - if height - steps[1][step] > 0 then - height -= steps[1][step] + if height - lStep > lStep then + height -= lStep + elseif height - lStep > 0 then + height = lStep end elseif IsDisabledControlPressed(0, 36) then -- ctrl held down change = true - if width - steps[1][step] > 0 then - width -= steps[1][step] + if width - lStep > lStep then + width -= lStep + elseif width - lStep > 0 then + width = lStep end elseif IsDisabledControlPressed(0, 19) then -- alt held down change = true - if length - steps[1][step] > 0 then - length -= steps[1][step] + if length - lStep > lStep then + length -= lStep + elseif length - lStep > 0 then + length = lStep end elseif step > 1 then change = true @@ -231,31 +240,55 @@ local function startCreator(arg) end elseif IsDisabledControlJustReleased(0, 32) then -- w change = true - yCoord += steps[1][step] + local newValue = yCoord + lStep + if math.abs(newValue) < minCheck then + newValue = 0.0 + end + yCoord = newValue elseif IsDisabledControlJustReleased(0, 33) then -- s change = true - yCoord -= steps[1][step] + local newValue = yCoord - lStep + if math.abs(newValue) < minCheck then + newValue = 0.0 + end + yCoord = newValue elseif IsDisabledControlJustReleased(0, 35) then -- d change = true - xCoord += steps[1][step] + local newValue = xCoord + lStep + if math.abs(newValue) < minCheck then + newValue = 0.0 + end + xCoord = newValue elseif IsDisabledControlJustReleased(0, 34) then -- a change = true - xCoord -= steps[1][step] + local newValue = xCoord - lStep + if math.abs(newValue) < minCheck then + newValue = 0.0 + end + xCoord = newValue elseif IsDisabledControlJustReleased(0, 45) then -- r change = true - zCoord += steps[1][step] + local newValue = zCoord + lStep + if math.abs(newValue) < minCheck then + newValue = 0.0 + end + zCoord = newValue elseif IsDisabledControlJustReleased(0, 23) then -- f change = true - zCoord -= steps[1][step] + local newValue = zCoord - lStep + if math.abs(newValue) < minCheck then + newValue = 0.0 + end + zCoord = newValue elseif IsDisabledControlJustReleased(0, 38) then -- e change = true - heading -= steps[2][step] + heading -= rStep if heading < 0 then heading += 360 end elseif IsDisabledControlJustReleased(0, 44) then -- q change = true - heading += steps[2][step] + heading += rStep if heading >= 360 then heading -= 360 end