This code makes me want to throw up HELP ME

The title says everything. HELP NEEDED.

local TweenService = game:GetService("TweenService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")

local Assets = ReplicatedStorage.Assets
local LocalPlayer = Players.LocalPlayer

local Settings = {}
Settings._instance = Assets.Settings:clone()
Settings._frame = Settings._instance:FindFirstChild("Frame")
Settings._canvas = Settings._frame:FindFirstChild("Canvas")
Settings._debounce = false

local canvasLength = 0.2
local frameSizeLength = 0.4
local frameLength = 0.2

local tweenCanvasIn = TweenService:Create(
	Settings._canvas,
	TweenInfo.new(canvasLength),
	{GroupTransparency = 1}
)

local tweenCanvasOut = TweenService:Create(
	Settings._canvas,
	TweenInfo.new(canvasLength),
	{GroupTransparency = 0}
)

local tweenFrameIn = TweenService:Create(
	Settings._frame,
	TweenInfo.new(frameSizeLength),
	{Size = UDim2.new(0,0,0,0)}
)

local tweenFrameOut = TweenService:Create(
	Settings._frame,
	TweenInfo.new(frameSizeLength),
	{Size = UDim2.new(0.417,0,0.741,0)}
)

local tweenFrameTransIn = TweenService:Create(
	Settings._frame,
	TweenInfo.new(frameLength),
	{BackgroundTransparency = 1}
)

local tweenFrameTransOut = TweenService:Create(
	Settings._frame,
	TweenInfo.new(frameLength),
	{BackgroundTransparency = 0}
)

local tweenStrokeOut = TweenService:Create(
	Settings._frame.UIStroke,
	TweenInfo.new(frameLength),
	{Transparency = 0}
)

local tweenStrokeIn = TweenService:Create(
	Settings._frame.UIStroke,
	TweenInfo.new(frameLength),
	{Transparency = 1}
)

local tweenExtraStrokeOut = TweenService:Create(
	Settings._frame.ExtraStroke.UIStroke,
	TweenInfo.new(frameLength),
	{Transparency = 0}
)

local tweenExtraStrokeIn = TweenService:Create(
	Settings._frame.ExtraStroke.UIStroke,
	TweenInfo.new(frameLength),
	{Transparency = 1}
)

function preasync()
	Settings._instance.Parent = LocalPlayer.PlayerGui
end

function Settings.OpenAsync()
	Settings._frame.Size = UDim2.new(0,0,0,0)
	Settings._canvas.GroupTransparency = 1
	Settings._frame.Visible = true
	
	task.spawn(function()
		tweenFrameTransOut:Play()
		tweenFrameOut:Play()
		tweenStrokeOut:Play()
		tweenExtraStrokeOut:Play()
		tweenFrameOut.Completed:Wait()
		tweenCanvasOut:Play()
	end)
	
	task.spawn(function()
		task.wait(0.4)
		
		Settings._debounce = true
	end)
end

function Settings.CloseAsync()
	Settings._frame.Size = UDim2.new(0.417,0,0.741,0)
	Settings._canvas.GroupTransparency = 0

	task.spawn(function()
		tweenCanvasIn:Play()
		tweenCanvasIn.Completed:Wait()
		tweenFrameTransIn:Play()
		tweenFrameIn:Play()
		tweenStrokeIn:Play()
		tweenExtraStrokeIn:Play()
	end)
	
	task.spawn(function()
		task.wait(0.4)

		Settings._debounce = false
	end)
end

preasync()

return Settings

this is what happens when you get lazy

1 Like

what do you need help with?
Im assuming its organizing, just add a bunch of comments and variables where you can

3 Likes

Yeah just organizing in general

1 Like

Personally, I create an entire module for tweening so I can have it all condensed and done in just one line

local tweenService = game:GetService("TweenService")

local module = {}

function module.Tween(object, goal, duration: number, easingStyle, easingDirection, waitUntilCompleted: boolean)
	local tweenInfo = TweenInfo.new(duration, easingStyle, easingDirection)
	local tween = tweenService:Create(object, tweenInfo, goal)
	
	if object:FindFirstChild("Tween") then
		object.Tween:Destroy()
	end
	
	tween.Parent = object
	tween:Play()
	
	if waitUntilCompleted == true then
		tween.Completed:Wait()
		tween:Destroy()
	else
		task.spawn(function()
			tween.Completed:Wait()
			tween:Destroy()
		end)
	end
end

return module

Not sure if this is the absolute best way of organizing it, but it works fine for me and saves me the pain of having to create all different kinds of tween variables and uses less lines.

2 Likes