Super-Nostalgia-Zone/Tools/Trowel/WallMaker.server.lua

102 lines
1.9 KiB
Lua

local Debris = game:GetService("Debris")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local brickSpeed = 0.04
local wallHeight = 4
local wallWidth = 12
local Tool = script.Parent
local BrickColors = require(ReplicatedStorage:WaitForChild("BrickColors"))
-- places a brick at pos and returns the position of the brick's opposite corner
local function placeBrick(cf, pos, color)
local brick = Instance.new("Part")
brick.BrickColor = color
brick.CFrame = cf * CFrame.new(pos + brick.Size / 2)
local brickScript = Tool.TrowelBrick:Clone()
brickScript.Disabled = false
brickScript.Parent = brick
-- place the brick
brick.Parent = workspace
-- return brick info
return brick, pos + brick.Size
end
local function buildWall(cf)
local color = BrickColor.new(BrickColors[math.random(1, #BrickColors)])
local bricks = {}
assert(wallWidth > 0)
local y = 0
while y < wallHeight do
local p
local x = -wallWidth / 2
while x < wallWidth / 2 do
local brick
brick, p = placeBrick(cf, Vector3.new(x, y, 0), color)
x = p.x
table.insert(bricks, brick)
brick:MakeJoints()
wait(brickSpeed)
end
y = p.y
end
return bricks
end
local function snap(v)
if math.abs(v.X) > math.abs(v.Z) then
if v.X > 0 then
return Vector3.new(1, 0, 0)
else
return Vector3.new(-1, 0, 0)
end
else
if v.Z > 0 then
return Vector3.new(0, 0, 1)
else
return Vector3.new(0, 0, -1)
end
end
end
Tool.Enabled = true
local function onActivated()
if not Tool.Enabled then
return
end
Tool.Enabled = false
local character = Tool.Parent
local humanoid = character.Humanoid
if humanoid == nil then
print("Humanoid not found")
return
end
local targetPos = humanoid.TargetPoint
local lookAt = snap( (targetPos - character.Head.Position).Unit )
local cf = CFrame.new(targetPos, targetPos + lookAt)
Tool.Handle.BuildSound:Play()
buildWall(cf)
wait(5)
Tool.Enabled = true
end
Tool.Activated:Connect(onActivated)