Hello!
I’m currently creating a placement system for fun and have found an issue when placing items. If stacking items, you’re able to exceed the plot boundaries. I was thinking I could use Rect but I am thinking that it wouldn’t maintain the rotation of the plot which would create issues once again.
I was thinking I could do it lazily by creating an extremely tall box and use :GetTouchingParts but this probably wouldn’t do me any good.
I was also thinking I could use Region3 but I haven’t had much luck with R3 in the past, it ends up being finicky and inaccurate.
local function snapToIncrement(vector, size, plotSize)
local x = math.floor((vector.X / snap) + 0.5) * snap
if x > plotSize / 2 then -- Ensures the part touching the plot doesn't exceed the bounds. The problem is that I'm not sure how to make it work when it's not a part touching the plot itself
x = plotSize / 2
elseif x < -plotSize / 2 then
x = -plotSize / 2
end
local z = math.floor((vector.Z / snap) + 0.5) * snap
if z > plotSize / 2 then
z = plotSize / 2
elseif z < -plotSize / 2 then
z = -plotSize / 2
end
local newVector = Vector3.new(
x,
vector.Y + size.Y / 2,
z
)
return newVector
end
mouse.Move:Connect(function()
oldOrientation = part.Orientation
local hit = mouse.Hit
local target = mouse.Target
if hit and target then
local allowedFaces = target:FindFirstChild('AllowedFaces')
local targetSurface = mouse.TargetSurface
if allowedFaces then
if targetSurface.Name == allowedFaces.Value then
placementModule:ColourObjectPlaceable(part)
if target ~= plot and not target:IsDescendantOf(plot) then
target = plot
end
part.CFrame = hit
local relativeCFrame = target.CFrame:ToObjectSpace(hit)
local snappedPosition = snapToIncrement(relativeCFrame.p, part.Size, 50)
local newCFrame = CFrame.new(snappedPosition)
part.CFrame = target.CFrame:ToWorldSpace(newCFrame)
part.Orientation = oldOrientation
oldOrientation = part.Orientation
else
placementModule:ColourObjectFailingToPlace(part)
end
else
placementModule:ColourObjectFailingToPlace(part)
end
else
placementModule:ColourObjectFailingToPlace(part)
end
end)
Video: