Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How would I make a paint tool useful on only one base?

Asked by 10 years ago

So I'm trying to edit a paint tool so it only works on the base that the player has selected to use. How Would I do this? Here's the script:

local Tool = script.Parent

enabled = true
local origTexture =     Tool.TextureId
game:GetService("ContentProvider"):Preload("rbxasset://icons/color_sel.png")

function onButton1Down(mouse)
    if not enabled then
        return
    end

    enabled = false
    mouse.Icon = "rbxasset://textures\\GunWaitCursor.png"

    wait(.5)
    mouse.Icon = "rbxasset://textures\\GunCursor.png"
    enabled = true

end

local selectionBox
local selectionLasso
local inGui = false
local inPalette = false

local selectedButtonTable = {}
local oldButton = nil
function onMouseLeave(hoverSelection)
    if oldButton ~= nil then
        local notSelected = true
        local selectionText = ""
        for key, value in pairs(selectedButtonTable) do
            if oldButton == value then
                notSelected = false
            else
                selectionText = value.BackgroundColor.Name
            end
        end
        if notSelected then
            hoverSelection.Text = selectionText
            oldButton.Parent.BackgroundColor = BrickColor.Black()
        end
    end
    oldButton = nil
end

function onMouseEnter(hoverSelection, guiButton)
    onMouseLeave(hoverSelection)
    hoverSelection.Text = guiButton.BackgroundColor.Name
    if guiButton ~= selectedButton then
        guiButton.Parent.BackgroundColor = BrickColor.White()
        oldButton = guiButton
    end
end

function onMouseUp(colorHolder, paletteFrame, guiButton)
    if selectedButtonTable[colorHolder] ~= nil then
        selectedButtonTable[colorHolder].Parent.BackgroundColor = BrickColor.Black()
    end
    guiButton.Parent.BackgroundColor = BrickColor.Yellow()
    colorHolder.BackgroundColor = guiButton.BackgroundColor
    selectionBox.Color = guiButton.BackgroundColor
    selectionLasso.Color = guiButton.BackgroundColor
    Tool.Value.Value = guiButton.BackgroundColor
    selectedButtonTable[colorHolder] = guiButton

    onMouseLeavePalette(paletteFrame)

    print("Selected Color: " .. guiButton.BackgroundColor.Name)
end

function onShowColorDialog(paletteFrame)
    paletteFrame.Visible = true
end

function setSelectionBox(part) 
    unsetSelectionBox()
    selectionBox.Adornee = part
    selectionLasso.Part = part
end
function unsetSelectionBox() 
    selectionBox.Adornee = nil
    selectionLasso.Part = nil
end

function onMouseEnterGui(mouse)
    mouse.Icon ="rbxasset://textures\\ArrowCursor.png"
    unsetSelectionBox()
    inGui = true
end
function onMouseLeaveGui(mouse)
    inGui = false
end

function onMouseEnterPalette(mouse)
    mouse.Icon ="rbxasset://textures\\ArrowCursor.png"
    unsetSelectionBox()
    inPalette = true
end
function onMouseLeavePalette(paletteFrame, mouse)
    paletteFrame.Visible = false
    inPalette = false
end


local primaryColor = nil
function buildGui(root, mouse)

    local mainFrame = Instance.new("Frame")
    mainFrame.Position = UDim2.new(0.0, 0, 1.0, -250)
    mainFrame.Size = UDim2.new(0.0, 200, 0.0, 250)
    mainFrame.Transparency = 1.0
    mainFrame.Parent = root


    local paletteFrame = Instance.new("Frame")
    paletteFrame.Position = UDim2.new(0.0, 0, 0.0, 0)
    paletteFrame.Size = UDim2.new(1.0, 0, 4.0/5, 0)
    paletteFrame.BackgroundColor = BrickColor.Black()
    paletteFrame.Visible = false
    paletteFrame.Parent = mainFrame
    paletteFrame.MouseEnter:connect(function() print("EnterPalette") onMouseEnterPalette(mouse) end)
    paletteFrame.MouseLeave:connect(function() print("LeavePalette")  onMouseLeavePalette(paletteFrame, mouse) end)


    local sideBar = Instance.new("Frame")
    sideBar.Position = UDim2.new(0.0, 0, 4.0/5, 0)
    sideBar.Size = UDim2.new(1.0, 0, 1.0/5, 0)
    sideBar.BackgroundColor = BrickColor.Black()
    sideBar.Parent = mainFrame
    sideBar.MouseEnter:connect(function() onMouseEnterGui(mouse) end)
    sideBar.MouseLeave:connect(function() onMouseLeaveGui(mouse) end)

    primaryColor = Instance.new("TextButton")
    primaryColor.Position = UDim2.new(0.75, 1, 0.0, 1)
    primaryColor.Size = UDim2.new(0.25, -2, 1.0, -2)
    primaryColor.Text  = "" 
    primaryColor.BackgroundColor = Tool.Value.Value
    primaryColor.BorderColor = BrickColor.Black()
    primaryColor.BorderSizePixel = 1
    primaryColor.Parent = sideBar
    primaryColor.MouseButton1Down:connect(function() print("Showdialog") onShowColorDialog(paletteFrame) end)


    local hoverSelection = Instance.new("TextLabel")
    hoverSelection.Position = UDim2.new(0.0, 0, 0.0, 0)
    hoverSelection.Size = UDim2.new(0.75, 0, 1.0, 0)
    hoverSelection.Text = ""
    hoverSelection.BackgroundColor = BrickColor.Black()
    hoverSelection.TextColor = BrickColor.White()
    hoverSelection.Text = primaryColor.BackgroundColor.Name
    hoverSelection.Parent = sideBar

    --local secondaryColor = Instance.new("TextButton")
    --secondaryColor.Position = UDim2.new(0.75, 0, 0.0, 0)
    --secondaryColor.Size = UDim2.new(0.25, 0, 1.0, 0)
    --secondaryColor.Text = ""
    --secondaryColor.BackgroundColor = BrickColor.Black()
    --secondaryColor.Parent = sideBar

    for xOffset = 0, 7 do
        for yOffset = 0,7 do
            local guiFrame = Instance.new("Frame")
            guiFrame.Position = UDim2.new(1.0/8 * xOffset, 0, 1.0/8*yOffset, 0)
            guiFrame.Size = UDim2.new(1.0/8, 0, 1.0/8, 0)
            guiFrame.BackgroundColor = BrickColor.Black()
            guiFrame.BorderSizePixel = 0
            guiFrame.Parent = paletteFrame

            local guiButton = Instance.new("TextButton")
            guiButton.Position = UDim2.new(0.0, 2, 0.0, 2)
            guiButton.Size = UDim2.new(1.0, -4, 1.0, -4)
            guiButton.Text = ""
            guiButton.BorderSizePixel = 0
            guiButton.AutoButtonColor = false
            guiButton.BackgroundColor = BrickColor.palette(xOffset + yOffset*8)
            guiButton.MouseEnter:connect(function() onMouseEnter(hoverSelection, guiButton) end)
            guiButton.MouseButton1Up:connect(function() onMouseUp(primaryColor, paletteFrame, guiButton) end)
            --guiButton.MouseButton2Down:connect(function() onMouseClick(secondaryColor, guiButton) end)
            guiButton.Parent = guiFrame

            if guiButton.BackgroundColor == primaryColor.BackgroundColor then
                guiFrame.BackgroundColor = BrickColor.White()
                selectedButtonTable[primaryColor] = guiButton
            end
        end
    end
    mainFrame.MouseLeave:connect(function() onMouseLeave(hoverSelection) end)

end
function canSelectObject(part)
    return part and not (part.Locked) and (part.Position - Tool.Parent.Head.Position).Magnitude < 60
end

function on3dButton1Down(mouse) 
    local part = mouse.Target
    if canSelectObject(part) then
        if Instance.Lock(part) then
            part.BrickColor = primaryColor.BackgroundColor
            Instance.Unlock(part)
        end
    end
end

function on3dMouseMove(mouse) 
    if not(inGui) and not(inPalette) then
        mouse.Icon ="rbxasset://textures\\FillCursor.png"
        local part = mouse.Target
        if canSelectObject(part) then
            setSelectionBox(part)
        else
            unsetSelectionBox()
        end
    end
end

local guiMain
function onEquippedLocal(mouse)
    Tool.TextureId = "rbxasset://icons/color_sel.png"

    local character = script.Parent.Parent
    local player = game.Players:GetPlayerFromCharacter(character)

    guiMain = Instance.new("ScreenGui")
    guiMain.Parent = player.PlayerGui

    inGui = false
    inPalette = false

    mouse.Button1Down:connect(function() on3dButton1Down(mouse) end)
    mouse.Move:connect(function() on3dMouseMove(mouse) end)
    mouse.Icon ="rbxasset://textures\\FillCursor.png"

    selectionBox = Instance.new("SelectionBox")
    selectionBox.Color = Tool.Value.Value
    selectionBox.Adornee = nil
    selectionBox.Parent = player.PlayerGui

    selectionLasso = Instance.new("SelectionPartLasso")
    selectionLasso.Name = "Model Delete Lasso"
    selectionLasso.Humanoid = character.Humanoid
    selectionLasso.Part = nil
    selectionLasso.Visible = true
    selectionLasso.archivable = false
    selectionLasso.Color = Tool.Value.Value
    selectionLasso.Parent = game.workspace

    buildGui(guiMain, mouse)
end

function onUnequippedLocal()
    Tool.TextureId = origTexture
    guiMain:Remove()
    selectionBox:Remove()
    selectionLasso:Remove()
end


--local part2 = Instance.new("Part")
--if Instance.Lock(part2) then
--  Instance.Unlock(part2)
--end


Tool.Equipped:connect(onEquippedLocal)
Tool.Unequipped:connect(onUnequippedLocal)

Answer this question