local CanPlace = false
local Player = game.Players.LocalPlayer
local workspace = game.Workspace
local rot = 90
local plot = game.Workspace.plot
local gsize = 0.5
function PartToRegion3(part)
local abs = math.abs
local cf = part.CFrame
local size = part.Size - Vector3.new(0.1,0.1,0.1)
local sx, sy, sz = size.X, size.Y, size.Z
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:components()
local wsx = 0.5 * (abs(R00) * sx + abs(R01) * sy + abs(R02) * sz)
local wsy = 0.5 * (abs(R10) * sx + abs(R11) * sy + abs(R12) * sz)
local wsz = 0.5 * (abs(R20) * sx + abs(R21) * sy + abs(R22) * sz)
local minx = x - wsx
local miny = y - wsy
local minz = z - wsz
local maxx = x + wsx
local maxy = y + wsy
local maxz = z + wsz
local minv, maxv = Vector3.new(minx, miny, minz), Vector3.new(maxx, maxy, maxz)
return Region3.new(minv, maxv)
end
function findSide(DummyBlock)
local cf=DummyBlock.CFrame
local cs={side=nil,y=-2}
if cf.lookVector.Y>cs.y then cs.side="BackSurface" cs.y=cf.lookVector.Y end
if -cf.lookVector.Y>cs.y then cs.side="FrontSurface" cs.y=-cf.lookVector.Y end
if cf.rightVector.Y>cs.y then cs.side="LeftSurface" cs.y=cf.rightVector.Y end
if -cf.rightVector.Y>cs.y then cs.side="RightSurface" cs.y=-cf.rightVector.Y end
if cf.upVector.Y>cs.y then cs.side="BottomSurface" cs.y=cf.upVector.Y end
if -cf.upVector.Y>cs.y then cs.side="TopSurface" cs.y=-cf.upVector.Y end
return cs.side
end
local UserInputService = game:GetService("UserInputService")
local Mouse = Player:GetMouse()
Mouse.TargetFilter = game.Workspace:FindFirstChild(Player)
local RunService = game:GetService("RunService")
local DummyBlock = game.ReplicatedStorage.Block:Clone(); DummyBlock.CFrame = CFrame.new(0,0,0); DummyBlock.Parent = workspace; DummyBlock.Name = "DummyBlock"; DummyBlock.Transparency = 0.5; DummyBlock.CanCollide = false; DummyBlock.Anchored = true;DummyBlock.Color = Color3.fromRGB(0, 68, 216)
Mouse.TargetFilter = DummyBlock
local function roundToStep(initialValue,step)
local roundedValue = math.floor(initialValue/step)*step
return roundedValue --Returns 60
end
RunService.RenderStepped:Connect(function()
local PartsTouching = 0
local region3 = PartToRegion3(DummyBlock)
PartsTouching = #workspace:FindPartsInRegion3(region3)
if findSide(DummyBlock) == "LeftSurface" then
if Mouse.TargetSurface == Enum.NormalId.Front then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)-DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)+DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Left then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)-DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Right then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Top and Mouse.Target.Name == "Block" then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Bottom then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
else
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "RightSurface" then
if Mouse.TargetSurface == Enum.NormalId.Front then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)-DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)+DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Left then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)-DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Right then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Top and Mouse.Target.Name == "Block" then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Bottom then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
else
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "BottomSurface" then
if Mouse.TargetSurface == Enum.NormalId.Right then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)-DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)+DummyBlock.Size.Z/2)
else
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "TopSurface" then
if Mouse.TargetSurface == Enum.NormalId.Right then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)-DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)+DummyBlock.Size.Z/2)
else
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "FrontSurface" then
if Mouse.TargetSurface == Enum.NormalId.Right then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Y, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Y, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Back then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Top and Mouse.Target.Name == "Block" then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Bottom then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
else
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Z/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
end
--[[if Mouse.TargetSurface == Enum.NormalId.Right then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)-DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)+DummyBlock.Size.Z/2)
else
DummyBlock.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end--]]
if PartsTouching ~= 0 then CanPlace = false else CanPlace = true end
wait(0.01)
end)
UserInputService.InputBegan:Connect(function(keycode)
if keycode.KeyCode == Enum.KeyCode.E and CanPlace == true then
print(findSide(DummyBlock))
print(Mouse.TargetSurface)
local look = Mouse.Target.CFrame.LookVector.X
local colorV = script.Parent.Parent.Color.Value
local result = game.Workspace:Raycast(DummyBlock.Position,Vector3.new(0,-10,0))
local Block = game.ReplicatedStorage.Block:Clone(); Block.Parent = workspace.plotItems; Block.Anchored = true;Block.BrickColor = BrickColor.new(colorV)
Block.Orientation = DummyBlock.Orientation
--[[if findSide(DummyBlock) == "LeftSurface" or findSide(DummyBlock) == "RightSurface" then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end--]]
if findSide(DummyBlock) == "LeftSurface" then
if Mouse.TargetSurface == Enum.NormalId.Front then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)-Block.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)+Block.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Left then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)-Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Right then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Top and Mouse.Target.Name == "Block" then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Bottom then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
else
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "RightSurface" then
if Mouse.TargetSurface == Enum.NormalId.Front then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)-Block.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize)+Block.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Left then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)-Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Right then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Top and Mouse.Target.Name == "Block" then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Bottom then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
else
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "BottomSurface" then
if Mouse.TargetSurface == Enum.NormalId.Right then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-Block.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)-Block.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)+Block.Size.Z/2)
else
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "TopSurface" then
if Mouse.TargetSurface == Enum.NormalId.Right then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-Block.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+Block.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)-Block.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)+Block.Size.Z/2)
else
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
elseif findSide(DummyBlock) == "FrontSurface" then
if Mouse.TargetSurface == Enum.NormalId.Right then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Y, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Y, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Back then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Top and Mouse.Target.Name == "Block" then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Bottom then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize), roundToStep(Mouse.Hit.Position.Z, gsize))
else
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+Block.Size.Z/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
end
--[[if result.Instance == game.Workspace.plot or result.Instance.Name == "Block" then
if Mouse.TargetSurface == Enum.NormalId.Right then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)+DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Left then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize)-DummyBlock.Size.X/2, roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
elseif Mouse.TargetSurface == Enum.NormalId.Front then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)-DummyBlock.Size.Z/2)
elseif Mouse.TargetSurface == Enum.NormalId.Back then
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize)+DummyBlock.Size.Z/2)
else
Block.Position = Vector3.new(roundToStep(Mouse.Hit.Position.X, gsize), roundToStep(Mouse.Hit.Position.Y, gsize)+DummyBlock.Size.Y/2, roundToStep(Mouse.Hit.Position.Z, gsize))
end
else
Block:Destroy()
DummyBlock.Color = Color3.fromRGB(255, 0, 0)
wait(0.5)
DummyBlock.Color = Color3.fromRGB(0, 68, 216)
end--]]
wait()
elseif keycode.KeyCode == Enum.KeyCode.R then
DummyBlock.CFrame = DummyBlock.CFrame * CFrame.Angles(0, math.rad(rot) ,0)
wait()
elseif keycode.KeyCode == Enum.KeyCode.T then
DummyBlock.CFrame = DummyBlock.CFrame * CFrame.Angles(0 ,0 ,math.rad(rot))
wait()
end
end)
here is the full script also the method you’re doing is super ineffecient
i’ve done the same but much better with all kinds of effects like tweening the part to the position i want and placement effect in only 136 lines