Here is a video of my problem,
At the start of the video you can see what I am trying to achieve but then when I tilt the block it just doesn't want to work. I know why it isn't working but I can't really think of a way to fix it?
Here is my current code,
local Player = game.Players.LocalPlayer local workspace = game.Workspace local rot = 90 local plot = game.Workspace.plot local gsize = 0.5 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 end RunService.RenderStepped:Connect(function() 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 wait(0.01) end) UserInputService.InputBegan:Connect(function(keycode) if keycode.KeyCode == Enum.KeyCode.E then 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 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)
How would I fix this?
Any help would be appreciated