
Key RequiredUniversal

--[=[
d888b db db d888888b .d888b. db db db .d8b.
88' Y8b 88 88 `88' VP `8D 88 88 88 d8' `8b
88 88 88 88 odD' 88 88 88 88ooo88
88 ooo 88 88 88 .88' 88 88 88 88~~~88
88. ~8~ 88b d88 .88. j88. 88booo. 88b d88 88 88 @uniquadev
Y888P ~Y8888P' Y888888P 888888D Y88888P ~Y8888P' YP YP CONVERTER
]=]
-- Instances: 6 | Scripts: 1 | Modules: 0 | Tags: 0
local G2L = {};
-- StarterGui.Pih
G2L["1"] = Instance.new("ScreenGui", game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui"));
G2L["1"]["Name"] = [[Pih]];
G2L["1"]["ZIndexBehavior"] = Enum.ZIndexBehavior.Sibling;
-- StarterGui.Pih.boundary
G2L["2"] = Instance.new("Frame", G2L["1"]);
G2L["2"]["BorderSizePixel"] = 0;
G2L["2"]["BackgroundColor3"] = Color3.fromRGB(42, 37, 59);
G2L["2"]["ClipsDescendants"] = true;
G2L["2"]["Size"] = UDim2.new(0, 2560, 0, 1152);
G2L["2"]["BorderColor3"] = Color3.fromRGB(0, 0, 0);
G2L["2"]["Name"] = [[boundary]];
G2L["2"]["BackgroundTransparency"] = 1;
-- StarterGui.Pih.boundary.pih
G2L["3"] = Instance.new("ImageLabel", G2L["2"]);
G2L["3"]["BorderSizePixel"] = 0;
G2L["3"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255);
-- [ERROR] cannot convert ImageContent, please report to "https://github.com/uniquadev/GuiToLuaConverter/issues"
G2L["3"]["Image"] = [[rbxassetid://108917931816235]];
G2L["3"]["Size"] = UDim2.new(0, 129, 0, 100);
G2L["3"]["BorderColor3"] = Color3.fromRGB(0, 0, 0);
G2L["3"]["BackgroundTransparency"] = 1;
G2L["3"]["Name"] = [[pih]];
G2L["3"]["Position"] = UDim2.new(0.47461, 0, 0.46181, 0);
-- StarterGui.Pih.boundary.pih.ClickSound
G2L["4"] = Instance.new("Sound", G2L["3"]);
G2L["4"]["Name"] = [[ClickSound]];
G2L["4"]["SoundId"] = [[rbxassetid://8592530104]];
-- StarterGui.Pih.boundary.pih.Smooth GUI Dragging
G2L["5"] = Instance.new("LocalScript", G2L["3"]);
G2L["5"]["Name"] = [[Smooth GUI Dragging]];
-- StarterGui.Pih.boundary.UICorner
G2L["6"] = Instance.new("UICorner", G2L["2"]);
G2L["6"]["CornerRadius"] = UDim.new(0, 15);
-- StarterGui.Pih.boundary.pih.Smooth GUI Dragging
local function C_5()
local script = G2L["5"];
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local screenGui = playerGui:WaitForChild("Pih") -- Ensure ScreenGui exists in PlayerGui
local frame = screenGui:WaitForChild("boundary") -- Frame to constrain the image
local imageLabel = frame:WaitForChild("pih") -- Draggable ImageLabel
-- Create or get the sound object
local sound = imageLabel:FindFirstChild("ClickSound") or Instance.new("Sound", imageLabel)
sound.Name = "ClickSound"
sound.SoundId = "rbxassetid://8592530104" -- Default Roblox button press sound
sound.Volume = 0.5
sound.PlayOnRemove = false
local dragging = false
local dragStart = Vector2.new(0, 0)
local startPos = Vector2.new(0, 0)
local lastPos = Vector2.new(0, 0)
local velocity = Vector2.new(0, 0)
local isSliding = false
local friction = 0.98 -- Friction for longer slide
local velocityThreshold = 2 -- Threshold for slide duration
local bounceFactor = 0.7 -- Bounce effect (0 to 1, lower means less bounce energy)
-- Function to clamp the image position within the frame and handle bounce
local function clampPosition(pos, applyBounce)
local frameSize = frame.AbsoluteSize
local framePos = frame.AbsolutePosition
local imageSize = imageLabel.AbsoluteSize
-- Calculate boundaries
local minX = framePos.X
local maxX = framePos.X + frameSize.X - imageSize.X
local minY = framePos.Y
local maxY = framePos.Y + frameSize.Y - imageSize.Y
-- Clamp the position
local clampedX = math.clamp(pos.X, minX, maxX)
local clampedY = math.clamp(pos.Y, minY, maxY)
-- Handle bounce if sliding and hitting a boundary
if applyBounce then
if pos.X <= minX or pos.X >= maxX then
velocity = Vector2.new(-velocity.X * bounceFactor, velocity.Y)
print("Bounce X: New velocity =", velocity)
end
if pos.Y <= minY or pos.Y >= maxY then
velocity = Vector2.new(velocity.X, -velocity.Y * bounceFactor)
print("Bounce Y: New velocity =", velocity)
end
end
return Vector2.new(clampedX, clampedY)
end
-- Handle dragging start and play sound
imageLabel.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
isSliding = false
dragStart = input.Position
startPos = imageLabel.AbsolutePosition
lastPos = input.Position
velocity = Vector2.new(0, 0)
sound:Play() -- Play sound on click
print("Drag started at", input.Position, "Sound played")
end
end)
-- Handle dragging end
imageLabel.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
isSliding = true
print("Drag ended, sliding started with velocity =", velocity)
end
end)
-- Update velocity during dragging
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local currentPos = input.Position
local delta = input.Position - dragStart
local newPos = Vector2.new(startPos.X + delta.X, startPos.Y + delta.Y)
local clampedPos = clampPosition(newPos, false) -- No bounce during dragging
imageLabel.Position = UDim2.new(0, clampedPos.X - frame.AbsolutePosition.X, 0, clampedPos.Y - frame.AbsolutePosition.Y)
-- Calculate velocity (pixels per second)
velocity = (currentPos - lastPos) / 0.016 -- Assume ~60 FPS
lastPos = currentPos
print("Dragging: Velocity =", velocity)
end
end)
-- Handle sliding and bouncing
RunService.Heartbeat:Connect(function(deltaTime)
if isSliding then
-- Apply velocity and friction
local scaledVelocity = velocity * deltaTime -- Scale velocity for frame rate
local currentPos = imageLabel.AbsolutePosition
local newPos = currentPos + scaledVelocity
local clampedPos = clampPosition(newPos, true) -- Apply bounce during sliding
imageLabel.Position = UDim2.new(0, clampedPos.X - frame.AbsolutePosition.X, 0, clampedPos.Y - frame.AbsolutePosition.Y)
-- Apply friction to slow down
velocity = velocity * friction
print("Sliding: Position =", clampedPos, "Velocity =", velocity)
-- Stop sliding if velocity is too low
if velocity.Magnitude < velocityThreshold then
isSliding = false
velocity = Vector2.new(0, 0)
print("Sliding stopped")
end
end
end)
end;
task.spawn(C_5);
return G2L["1"], require;



pih