From 847d4bff41a81fa7f76c70b5fae278b438e0df35 Mon Sep 17 00:00:00 2001 From: James Onnen Date: Fri, 31 Oct 2025 13:50:05 -0700 Subject: [PATCH] fix: Fix radius check, and format some files --- places/test_plugin_place.rbxl | Bin 523306 -> 526647 bytes src/init.client.lua | 12 ++--- src/modules/Shared/TerrainConverter.lua | 59 +++++++++++------------- 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/places/test_plugin_place.rbxl b/places/test_plugin_place.rbxl index 64fcdc47238477bdc690b14cf98016d1e10fc9ab..7f71dd11a32622d29022833232778d0b2a5a1e99 100644 GIT binary patch delta 31065 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 GYW6=1vM??H delta 28710 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 diff --git a/src/init.client.lua b/src/init.client.lua index 80ba075..fe67443 100644 --- a/src/init.client.lua +++ b/src/init.client.lua @@ -20,7 +20,7 @@ local ServiceBag = require("ServiceBag") local plugin = plugin -- luacheck: pop ignore -local IS_DEBUG_MODE = script:IsDescendantOf(game) +local IS_DEBUG_MODE = script:IsDescendantOf(game) and not script:FindFirstAncestorWhichIsA("PluginDebugService") local selectionService if IS_DEBUG_MODE then @@ -58,7 +58,6 @@ local function activate(button) serviceBag:Init() serviceBag:Start() - local converter = maid:Add(TerrainConverter.new(serviceBag)) local newScreenGui = maid:Add(screenGui:Clone()) @@ -101,11 +100,8 @@ if IS_DEBUG_MODE then activate() else local toolbar = plugin:CreateToolbar("Object") - local button = toolbar:CreateButton( - "Part to Terrain", - "Converts roblox parts to terrain", - "rbxassetid://1618168422" - ) + local button = + toolbar:CreateButton("Part to Terrain", "Converts roblox parts to terrain", "rbxassetid://1618168422") button.Click:Connect(function() if not isActive then @@ -118,4 +114,4 @@ else plugin.Unloading:Connect(function() deactivate(button) end) -end \ No newline at end of file +end diff --git a/src/modules/Shared/TerrainConverter.lua b/src/modules/Shared/TerrainConverter.lua index f626e91..7247cbd 100644 --- a/src/modules/Shared/TerrainConverter.lua +++ b/src/modules/Shared/TerrainConverter.lua @@ -72,7 +72,6 @@ function TerrainConverter:CanConvert(items) return false end - function TerrainConverter:_canConvertPart(item) if not (item:IsA("Part") or item:IsA("WedgePart")) then return false @@ -138,12 +137,12 @@ function TerrainConverter:_convertPart(part, material) elseif part.Shape == Enum.PartType.Block then self:_fillBlock(part.CFrame, part.Size, material) elseif part.Shape == Enum.PartType.Ball then - self:_fillBall(part.Position, part.Size.x/2, material) + self:_fillBall(part.Position, part.Size.x / 2, material) elseif part.Shape == Enum.PartType.Cylinder then local size = part.Size local height = size.x - local radius = math.min(size.y, size.z) - self:_fillCylinder(part.CFrame * CFrame.Angles(0, 0, math.pi/2), height, radius, material) + local radius = math.min(size.y, size.z) / 2 + self:_fillCylinder(part.CFrame * CFrame.Angles(0, 0, math.pi / 2), height, radius, material) else warn(("[PartToTerrain] - Bad part.Shape, '%s' is not supported"):format(tostring(part.Shape.Name))) return false @@ -157,7 +156,7 @@ function TerrainConverter:_convertPart(part, material) end function TerrainConverter:_fillWedge(wedgeCFrame, wedgeSize, desiredMaterial) - if (self.OverwriteTerrain.Value and self.OverwriteWater.Value) then + if self.OverwriteTerrain.Value and self.OverwriteWater.Value then Workspace.Terrain:FillWedge(wedgeCFrame, wedgeSize, desiredMaterial) return end @@ -166,7 +165,7 @@ function TerrainConverter:_fillWedge(wedgeCFrame, wedgeSize, desiredMaterial) end function TerrainConverter:_fillCylinder(cylinderCFrame, height, radius, desiredMaterial) - if (self.OverwriteTerrain.Value and self.OverwriteWater.Value) then + if self.OverwriteTerrain.Value and self.OverwriteWater.Value then Workspace.Terrain:FillCylinder(cylinderCFrame, height, radius, desiredMaterial) return end @@ -175,7 +174,7 @@ function TerrainConverter:_fillCylinder(cylinderCFrame, height, radius, desiredM end function TerrainConverter:_fillBlock(blockCFrame, blockSize, desiredMaterial) - if (self.OverwriteTerrain.Value and self.OverwriteWater.Value) then + if self.OverwriteTerrain.Value and self.OverwriteWater.Value then Workspace.Terrain:FillBlock(blockCFrame, blockSize, desiredMaterial) return end @@ -185,22 +184,22 @@ function TerrainConverter:_fillBlock(blockCFrame, blockSize, desiredMaterial) -- https://pastebin.com/S03Q8ftH - local aa_size, aa_position = BoundingBoxUtils.getBoundingBox({{ - Size = blockSize; - CFrame = blockCFrame; - }}) + local aa_size, aa_position = BoundingBoxUtils.getBoundingBox({ { + Size = blockSize, + CFrame = blockCFrame, + } }) local smallestSize = math.min(blockSize.x, blockSize.y, blockSize.z) local resolution = self.RESOLUTION -- make sure to get all grids - local min = aa_position - aa_size/2 - local max = aa_position + aa_size/2 + local min = aa_position - aa_size / 2 + local max = aa_position + aa_size / 2 local region = Region3.new(min, max):ExpandToGrid(resolution) - min = region.CFrame.p - region.Size/2 + min = region.CFrame.p - region.Size / 2 -- luacheck: push ignore - max = region.CFrame.p + region.Size/2 + max = region.CFrame.p + region.Size / 2 -- luacheck: pop ignore local materialVoxels, occupancyVoxels = Workspace.Terrain:ReadVoxels(region, resolution) @@ -212,22 +211,20 @@ function TerrainConverter:_fillBlock(blockCFrame, blockSize, desiredMaterial) -- Since we only care about the size if it's less than one cell, we clamp this to make the calculations below faster. local sizeCellClamped = (blockSize / resolution) - sizeCellClamped = Vector3.new( - math.min(1, sizeCellClamped.x), - math.min(1, sizeCellClamped.y), - math.min(1, sizeCellClamped.z)) + sizeCellClamped = + Vector3.new(math.min(1, sizeCellClamped.x), math.min(1, sizeCellClamped.y), math.min(1, sizeCellClamped.z)) local sizeCellsHalfOffset = blockSize * (0.5 / resolution) + Vector3.new(0.5, 0.5, 0.5) - for x=1, size.X do + for x = 1, size.X do local cellPosX = min.x + (x - 0.5) * resolution - for y=1, size.Y do + for y = 1, size.Y do local cellPosY = min.y + (y - 0.5) * resolution - for z=1, size.Z do + for z = 1, size.Z do local cellPosZ = min.z + (z - 0.5) * resolution local position = Vector3.new(cellPosX, cellPosY, cellPosZ) -- -0.5 to 0.5 - local offset = blockCFrame:pointToObjectSpace(position)/resolution + local offset = blockCFrame:pointToObjectSpace(position) / resolution -- Draw.Point(position) @@ -269,7 +266,7 @@ function TerrainConverter:_fillBlock(blockCFrame, blockSize, desiredMaterial) end function TerrainConverter:_fillBall(center, radius, desiredMaterial) - if (self.OverwriteTerrain.Value and self.OverwriteWater.Value) then + if self.OverwriteTerrain.Value and self.OverwriteWater.Value then Workspace.Terrain:FillBall(center, radius, desiredMaterial) return end @@ -283,23 +280,23 @@ function TerrainConverter:_fillBall(center, radius, desiredMaterial) local max = center + radius3 local region = Region3.new(min, max):ExpandToGrid(resolution) - min = region.CFrame.p - region.Size/2 + min = region.CFrame.p - region.Size / 2 -- luacheck: push ignore - max = region.CFrame.p + region.Size/2 + max = region.CFrame.p + region.Size / 2 -- luacheck: pop ignore local materialVoxels, occupancyVoxels = Workspace.Terrain:ReadVoxels(region, resolution) local size = materialVoxels.Size - for x=1, size.X do + for x = 1, size.X do local cellX = min.x + (x - 0.5) * resolution - center.x - for y=1, size.Y do + for y = 1, size.Y do local cellY = min.y + (y - 0.5) * resolution - center.y - for z=1, size.Z do + for z = 1, size.Z do local cellZ = min.z + (z - 0.5) * resolution - center.z local cellMaterial = materialVoxels[x][y][z] local cellOccupancy = occupancyVoxels[x][y][z] - local distance = math.sqrt(cellX*cellX + cellY*cellY + cellZ*cellZ) + local distance = math.sqrt(cellX * cellX + cellY * cellY + cellZ * cellZ) local brushOccupancy = math.max(0, math.min(1, (radius + 0.5 * resolution - distance) / resolution)) -- Use terrain tools filling behavior here @@ -326,4 +323,4 @@ function TerrainConverter:_fillBall(center, radius, desiredMaterial) Workspace.Terrain:WriteVoxels(region, resolution, materialVoxels, occupancyVoxels) end -return TerrainConverter \ No newline at end of file +return TerrainConverter