So I've decided to try and make a minecraft-like building tool, and I've gotten pretty far. It snaps to a 4x4 grid, and for the most part, it works. But only in two directions. In two directions (South and East) it works just fine, and moves to the side of the part I'm building on. But in the other two directions (North and West) it moves inside the part I'm building on. Similarly, it works just fine if my mouse is on the top of a part, but it moves inside of the part if my mouse is on the bottom of it. I'm not sure exactly why this is happening and I'd really like it if someone could help me. Here's the script. Don't mind the PlaceBlock event firing, that just places the part where the fakepart is.
local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local fakepart
function roundAToB(a,b)
return(math.floor((a/b)+0.5)*b)
end
script.Parent.Equipped:Connect(function()
fakepart = game.ReplicatedStorage.PlacedPart:Clone()
fakepart.Parent = game.Workspace
fakepart.Transparency = 0.6
fakepart.CanCollide = false
local noselecttag = Instance.new("BoolValue", fakepart)
noselecttag.Name = "NoSelect"
mouse.TargetFilter = fakepart
end)
script.Parent.Unequipped:Connect(function()
if fakepart then
fakepart:Destroy()
end
end)
script.Parent.Activated:Connect(function()
if fakepart then
script.Parent.PlaceBlock:FireServer(fakepart.CFrame)
end
end)
game:GetService("RunService").RenderStepped:Connect(function()
if fakepart then
local hit = mouse.Hit
fakepart.Position = Vector3.new(math.floor(roundAToB(hit.p.x, 4)), math.floor(roundAToB(hit.p.y, 4)), math.floor(roundAToB(hit.p.z, 4)))
end
end)
