forked from aya/aya
Initial commit
This commit is contained in:
411
client/studio/resources/BuiltInPlugins/terrain/10 - stamper.lua
Normal file
411
client/studio/resources/BuiltInPlugins/terrain/10 - stamper.lua
Normal file
@@ -0,0 +1,411 @@
|
||||
while game == nil do
|
||||
wait(1/30)
|
||||
end
|
||||
|
||||
---------------
|
||||
--PLUGIN SETUP-
|
||||
---------------
|
||||
local on = false
|
||||
local loaded = false
|
||||
|
||||
self = PluginManager():CreatePlugin()
|
||||
|
||||
toolbar = self:CreateToolbar("Terrain")
|
||||
toolbarbutton = toolbar:CreateButton("Stamper", "Part Stamper - Toggle List (Shift + F)", "stamp.png")
|
||||
toolbarbutton.Click:connect(function()
|
||||
if on then
|
||||
Off()
|
||||
elseif loaded then
|
||||
On()
|
||||
end
|
||||
end)
|
||||
|
||||
game:WaitForChild("Workspace")
|
||||
game.Workspace:WaitForChild("Terrain")
|
||||
|
||||
-----------------
|
||||
--DEFAULT VALUES-
|
||||
-----------------
|
||||
local partButtonOn = true
|
||||
|
||||
local currStampGui = nil
|
||||
local currStampId = nil
|
||||
local recentsFrame = nil
|
||||
local waterTypeChangedEvent = nil
|
||||
local waterForceAndDirection = {"None","NegX"}
|
||||
|
||||
local setPanelVisibility = nil
|
||||
local getPanelVisibility = nil
|
||||
|
||||
local stampControl = nil
|
||||
local lastStampModel = nil
|
||||
|
||||
local keyCon = nil
|
||||
|
||||
-- ids of users we want to load sets in from
|
||||
local userSetIds = {11744447,18881789,18881808,18881829,18881853,18881866}
|
||||
local recentButtonStack = {}
|
||||
|
||||
-- mouse management
|
||||
local mouse = nil
|
||||
|
||||
-- Libraries
|
||||
local RbxStamper = nil
|
||||
local RbxGui = nil
|
||||
|
||||
Spawn(function()
|
||||
RbxGui = LoadLibrary("RbxGui")
|
||||
RbxStamper = LoadLibrary("RbxStamper")
|
||||
end)
|
||||
|
||||
local BaseUrl = game:GetService("ContentProvider").BaseUrl:lower()
|
||||
|
||||
-----------------------
|
||||
--FUNCTION DEFINITIONS-
|
||||
-----------------------
|
||||
|
||||
function getRbxGui()
|
||||
if not RbxGui then
|
||||
print("teh new rbxgui")
|
||||
RbxGui = LoadLibrary("RbxGui")
|
||||
end
|
||||
return RbxGui
|
||||
end
|
||||
|
||||
function getRbxStamper()
|
||||
if not RbxStamper then
|
||||
print("teh new stamper")
|
||||
RbxStamper = LoadLibrary("RbxStamper")
|
||||
end
|
||||
return RbxStamper
|
||||
end
|
||||
|
||||
function showLoadingDialog()
|
||||
currStampGui.LoadingFrame.LoadingText:TweenPosition(UDim2.new(0,150,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 2, true)
|
||||
currStampGui.LoadingFrame.Visible = true
|
||||
end
|
||||
|
||||
function hideLoadingDialog()
|
||||
currStampGui.LoadingFrame.LoadingText:TweenPosition(UDim2.new(0,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.1, true)
|
||||
currStampGui.LoadingFrame.Visible = false
|
||||
end
|
||||
|
||||
local partSelected = function(name, id, terrainShape)
|
||||
if not id then
|
||||
return
|
||||
end
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
|
||||
currStampId = id
|
||||
|
||||
if stampControl then
|
||||
stampControl.Destroy()
|
||||
end
|
||||
if stampCon then
|
||||
stampCon:disconnect()
|
||||
stampCon = nil
|
||||
end
|
||||
|
||||
setPanelVisibility(false)
|
||||
|
||||
showLoadingDialog()
|
||||
lastStampModel = getRbxStamper().GetStampModel(id, terrainShape)
|
||||
updateRecentParts(name, id, terrainShape)
|
||||
hideLoadingDialog()
|
||||
|
||||
if lastStampModel.Name == "MegaClusterCube" then
|
||||
local clusterTag = lastStampModel:FindFirstChild("ClusterMaterial")
|
||||
-- we are going to stamp water, send info to stamper about this
|
||||
if clusterTag and clusterTag:isA("Vector3Value") and clusterTag.Value.X == 17 then
|
||||
local waterForceTag = Instance.new("StringValue",lastStampModel)
|
||||
waterForceTag.Name = "WaterForceTag"
|
||||
waterForceTag.Value = waterForceAndDirection[1]
|
||||
|
||||
local waterForceDirectionTag = Instance.new("StringValue",lastStampModel)
|
||||
waterForceDirectionTag.Name = "WaterForceDirectionTag"
|
||||
waterForceDirectionTag.Value = waterForceAndDirection[2]
|
||||
end
|
||||
end
|
||||
|
||||
setupStamper(lastStampModel, mouse)
|
||||
end
|
||||
|
||||
function updateWaterInfo()
|
||||
if stampControl then
|
||||
stampControl.Destroy()
|
||||
end
|
||||
if stampCon then
|
||||
stampCon:disconnect()
|
||||
stampCon = nil
|
||||
end
|
||||
|
||||
showLoadingDialog()
|
||||
lastStampModel = getRbxStamper().GetStampModel(currStampId)
|
||||
hideLoadingDialog()
|
||||
|
||||
if lastStampModel.Name == "MegaClusterCube" then
|
||||
local clusterTag = lastStampModel:FindFirstChild("ClusterMaterial")
|
||||
-- we are going to stamp water, send info to stamper about this
|
||||
if clusterTag and clusterTag.Value.X == 17 then
|
||||
local waterForceTag = Instance.new("StringValue",lastStampModel)
|
||||
waterForceTag.Name = "WaterForceTag"
|
||||
waterForceTag.Value = waterForceAndDirection[1]
|
||||
|
||||
local waterForceDirectionTag = Instance.new("StringValue",lastStampModel)
|
||||
waterForceDirectionTag.Name = "WaterForceDirectionTag"
|
||||
waterForceDirectionTag.Value = waterForceAndDirection[2]
|
||||
end
|
||||
end
|
||||
|
||||
setupStamper(lastStampModel, mouse)
|
||||
end
|
||||
|
||||
|
||||
local dialogClosed = function()
|
||||
if lastStampModel then
|
||||
if stampControl then
|
||||
stampControl.Destroy()
|
||||
end
|
||||
setupStamper(lastStampModel, mouse)
|
||||
end
|
||||
end
|
||||
|
||||
function pickPart()
|
||||
if stampControl then
|
||||
stampControl.Destroy()
|
||||
end
|
||||
setPanelVisibility(true)
|
||||
end
|
||||
|
||||
function keyHandler(key)
|
||||
if key == 'f' then
|
||||
handlePartShow()
|
||||
end
|
||||
end
|
||||
|
||||
function partOn()
|
||||
pickPart()
|
||||
partButtonOn = true
|
||||
end
|
||||
|
||||
function partOff()
|
||||
setPanelVisibility(false)
|
||||
if lastStampModel then
|
||||
if stampControl then
|
||||
stampControl.Destroy()
|
||||
end
|
||||
setupStamper(lastStampModel, mouse)
|
||||
end
|
||||
partButtonOn = false
|
||||
end
|
||||
|
||||
function handlePartShow()
|
||||
if getPanelVisibility() then
|
||||
partOff()
|
||||
else
|
||||
partOn()
|
||||
end
|
||||
end
|
||||
|
||||
function On()
|
||||
if not game.Workspace.Terrain then
|
||||
return
|
||||
end
|
||||
|
||||
if self then
|
||||
self:Activate(true)
|
||||
mouse = self:GetMouse()
|
||||
end
|
||||
|
||||
if toolbarbutton then
|
||||
toolbarbutton:SetActive(true)
|
||||
end
|
||||
|
||||
if not currStampGui then -- first load, lets make the gui
|
||||
createGui()
|
||||
end
|
||||
|
||||
if setPanelVisibility then
|
||||
setPanelVisibility(true)
|
||||
end
|
||||
|
||||
if recentsFrame then
|
||||
recentsFrame.Visible = true
|
||||
end
|
||||
|
||||
if keyHandler then
|
||||
keyCon = mouse.KeyDown:connect(keyHandler)
|
||||
end
|
||||
|
||||
on = true
|
||||
end
|
||||
|
||||
function Off()
|
||||
|
||||
if toolbarbutton then
|
||||
toolbarbutton:SetActive(false)
|
||||
end
|
||||
|
||||
if stampControl then
|
||||
stampControl.Destroy()
|
||||
end
|
||||
|
||||
if keyCon then
|
||||
keyCon:disconnect()
|
||||
keyCon = nil
|
||||
end
|
||||
|
||||
if currStampGui and currStampGui:FindFirstChild("WaterFrame") then
|
||||
currStampGui.WaterFrame.Visible = false
|
||||
end
|
||||
|
||||
if lastStampModel then
|
||||
lastStampModel:Destroy()
|
||||
end
|
||||
|
||||
if setPanelVisibility then
|
||||
setPanelVisibility(false)
|
||||
end
|
||||
|
||||
if recentsFrame then
|
||||
recentsFrame.Visible = false
|
||||
end
|
||||
|
||||
on = false
|
||||
end
|
||||
------------------------------------------------------------------------------------------
|
||||
-- Connect to deactivation event once the handler is defined
|
||||
------------------------------------------------------------------------------------------
|
||||
self.Deactivation:connect(function()
|
||||
Off()
|
||||
end)
|
||||
|
||||
function setupStamper(model, mouse)
|
||||
if model then
|
||||
stampControl = getRbxStamper().SetupStamperDragger(model,mouse)
|
||||
if stampControl then
|
||||
stampCon = stampControl.Stamped.Changed:connect(function()
|
||||
if stampControl.Stamped.Value then
|
||||
stampControl.ReloadModel()
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function updateRecentParts(newName, newId, newTerrainShape)
|
||||
if newId then
|
||||
for i = 1, #recentButtonStack do
|
||||
if recentButtonStack[i].Id == newId then -- already have item, nothing to do
|
||||
return
|
||||
end
|
||||
end
|
||||
for i = #recentButtonStack - 1, 1, -1 do
|
||||
recentButtonStack[i + 1].Id = recentButtonStack[i].Id
|
||||
recentButtonStack[i + 1].Name = recentButtonStack[i].Name
|
||||
recentButtonStack[i + 1].TerrainShape = recentButtonStack[i].TerrainShape
|
||||
|
||||
recentButtonStack[i + 1].Button.Image = recentButtonStack[i].Button.Image
|
||||
end
|
||||
|
||||
recentButtonStack[1].Id = newId
|
||||
recentButtonStack[1].Name = newName
|
||||
recentButtonStack[1].TerrainShape = newTerrainShape
|
||||
recentButtonStack[1].Button.Image = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid=" .. tostring(newId)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
------
|
||||
--GUI-
|
||||
------
|
||||
|
||||
function createGui()
|
||||
|
||||
--Insert Panel
|
||||
currStampGui, setPanelVisibility, getPanelVisibility, waterTypeChangedEvent =
|
||||
getRbxGui().CreateSetPanel(userSetIds, partSelected, dialogClosed, UDim2.new(0.8, 0, 0.9, 0), UDim2.new(0.1,0,0.05,0), true)
|
||||
setPanelVisibility(false)
|
||||
|
||||
currStampGui.Parent = game:GetService("CoreGui")
|
||||
|
||||
waterTypeChangedEvent.Event:connect(function(waterTable)
|
||||
waterForceAndDirection = waterTable
|
||||
updateWaterInfo()
|
||||
end)
|
||||
|
||||
-- Loading Gui
|
||||
local loadingFrame = Instance.new("Frame")
|
||||
loadingFrame.Name = "LoadingFrame"
|
||||
loadingFrame.Style = Enum.FrameStyle.RobloxRound
|
||||
loadingFrame.Size = UDim2.new(0,350,0,60)
|
||||
loadingFrame.Visible = false
|
||||
loadingFrame.Position = UDim2.new(0.5,-175,0.5,-30)
|
||||
|
||||
local loadingText = Instance.new("TextLabel")
|
||||
loadingText.Name = "LoadingText"
|
||||
loadingText.BackgroundTransparency = 1
|
||||
loadingText.Size = UDim2.new(0,155,1,0)
|
||||
loadingText.Font = Enum.Font.ArialBold
|
||||
loadingText.FontSize = Enum.FontSize.Size36
|
||||
loadingText.Text = "Loading..."
|
||||
loadingText.TextColor3 = Color3.new(1,1,1)
|
||||
loadingText.TextStrokeTransparency = 0
|
||||
loadingText.Parent = loadingFrame
|
||||
|
||||
loadingFrame.Parent = currStampGui
|
||||
|
||||
-- Recents Stack Gui
|
||||
recentsFrame = Instance.new("Frame")
|
||||
recentsFrame.BackgroundTransparency = 0.5
|
||||
recentsFrame.Name = "RecentsFrame"
|
||||
recentsFrame.BackgroundColor3 = Color3.new(0,0,0)
|
||||
recentsFrame.Size = UDim2.new(0,50,0,150)
|
||||
recentsFrame.Visible = false
|
||||
recentsFrame.Parent = currStampGui
|
||||
|
||||
local recentButtonOne = Instance.new("ImageButton")
|
||||
recentButtonOne.Style = Enum.ButtonStyle.RobloxButton
|
||||
recentButtonOne.Name = "RecentButtonOne"
|
||||
recentButtonOne.Size = UDim2.new(0,50,0,50)
|
||||
recentButtonOne.Parent = recentsFrame
|
||||
|
||||
local recentButtonTwo = recentButtonOne:clone()
|
||||
recentButtonTwo.Name = "RecentButtonTwo"
|
||||
recentButtonTwo.Position = UDim2.new(0,0,0,50)
|
||||
recentButtonTwo.Parent = recentsFrame
|
||||
|
||||
local recentButtonThree = recentButtonOne:clone()
|
||||
recentButtonThree.Name = "RecentButtonThree"
|
||||
recentButtonThree.Position = UDim2.new(0,0,0,100)
|
||||
recentButtonThree.Parent = recentsFrame
|
||||
|
||||
for i = 1, 3 do
|
||||
recentButtonStack[i] = {}
|
||||
recentButtonStack[i].Name = nil
|
||||
recentButtonStack[i].Id = nil
|
||||
recentButtonStack[i].TerrainShape = nil
|
||||
end
|
||||
|
||||
recentButtonStack[1].Button = recentButtonOne
|
||||
recentButtonStack[2].Button = recentButtonTwo
|
||||
recentButtonStack[3].Button = recentButtonThree
|
||||
|
||||
local buttonClicked = false
|
||||
|
||||
for i = 1, #recentButtonStack do
|
||||
recentButtonStack[i].Button.MouseButton1Click:connect(function()
|
||||
if buttonClicked then return end
|
||||
buttonClicked = true
|
||||
partSelected(recentButtonStack[i].Name, recentButtonStack[i].Id, recentButtonStack[i].TerrainShape)
|
||||
buttonClicked = false
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------
|
||||
--SUCCESSFUL LOAD MESSAGE-
|
||||
--------------------------
|
||||
loaded = true
|
||||
Reference in New Issue
Block a user