AbstractPoo

asd

Jan 17th, 2020
56,508
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.41 KB | None | 0 0
  1. local library = {
  2.     windowcount = 0;
  3. }
  4.  
  5. local dragger = {};
  6. local resizer = {};
  7.  
  8. do
  9.     local mouse = game:GetService("Players").LocalPlayer:GetMouse();
  10.     local inputService = game:GetService('UserInputService');
  11.     local heartbeat = game:GetService("RunService").Heartbeat;
  12.     -- // credits to Ririchi / Inori for this cute drag function :)
  13.     function dragger.new(frame)
  14.         local s, event = pcall(function()
  15.             return frame.MouseEnter
  16.         end)
  17.  
  18.         if s then
  19.             frame.Active = true;
  20.  
  21.             event:connect(function()
  22.                 local input = frame.InputBegan:connect(function(key)
  23.                     if key.UserInputType == Enum.UserInputType.MouseButton1 then
  24.                         local objectPosition = Vector2.new(mouse.X - frame.AbsolutePosition.X, mouse.Y - frame.AbsolutePosition.Y);
  25.                         while heartbeat:wait() and inputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) do
  26.                             frame:TweenPosition(UDim2.new(0, mouse.X - objectPosition.X + (frame.Size.X.Offset * frame.AnchorPoint.X), 0, mouse.Y - objectPosition.Y + (frame.Size.Y.Offset * frame.AnchorPoint.Y)), 'Out', 'Quad', 0.1, true);
  27.                         end
  28.                     end
  29.                 end)
  30.  
  31.                 local leave;
  32.                 leave = frame.MouseLeave:connect(function()
  33.                     input:disconnect();
  34.                     leave:disconnect();
  35.                 end)
  36.             end)
  37.         end
  38.     end
  39.    
  40.     function resizer.new(p, s)
  41.         p:GetPropertyChangedSignal('AbsoluteSize'):connect(function()
  42.             s.Size = UDim2.new(s.Size.X.Scale, s.Size.X.Offset, s.Size.Y.Scale, p.AbsoluteSize.Y);
  43.         end)
  44.     end
  45. end
  46.  
  47.  
  48. local defaults = {
  49.     txtcolor = Color3.fromRGB(255, 255, 255),
  50.     underline = Color3.fromRGB(19, 80, 117),
  51.     barcolor = Color3.fromRGB(40, 40, 40),
  52.     bgcolor = Color3.fromRGB(30, 30, 30),
  53. }
  54.  
  55. function library:Create(class, props)
  56.     local object = Instance.new(class);
  57.  
  58.     for i, prop in next, props do
  59.         if i ~= "Parent" then
  60.             object[i] = prop;
  61.         end
  62.     end
  63.  
  64.     object.Parent = props.Parent;
  65.     return object;
  66. end
  67.  
  68. function library:CreateWindow(options)
  69.     assert(options.text, "no name");
  70.     local window = {
  71.         count = 0;
  72.         toggles = {},
  73.         closed = false;
  74.     }
  75.  
  76.     local options = options or {};
  77.     setmetatable(options, {__index = defaults})
  78.  
  79.     self.windowcount = self.windowcount + 1;
  80.  
  81.     library.gui = library.gui or self:Create("ScreenGui", {Name = "UILibrary", Parent = game:GetService("CoreGui")})
  82.     window.frame = self:Create("Frame", {
  83.         Name = options.text;
  84.         Parent = self.gui,
  85.         Active = true,
  86.         BackgroundTransparency = 0,
  87.         Size = UDim2.new(0, 190, 0, 30),
  88.         Position = UDim2.new(0, (15 + ((200 * self.windowcount) - 200)), 0, 15),
  89.         BackgroundColor3 = options.barcolor,
  90.         BorderSizePixel = 0;
  91.     })
  92.  
  93.     window.background = self:Create('Frame', {
  94.         Name = 'Background';
  95.         Parent = window.frame,
  96.         BorderSizePixel = 0;
  97.         BackgroundColor3 = options.bgcolor,
  98.         Position = UDim2.new(0, 0, 1, 0),
  99.         Size = UDim2.new(1, 0, 0, 25),
  100.         ClipsDescendants = true;
  101.     })
  102.    
  103.     window.container = self:Create('Frame', {
  104.         Name = 'Container';
  105.         Parent = window.frame,
  106.         BorderSizePixel = 0;
  107.         BackgroundColor3 = options.bgcolor,
  108.         Position = UDim2.new(0, 0, 1, 0),
  109.         Size = UDim2.new(1, 0, 0, 25),
  110.         ClipsDescendants = true;
  111.     })
  112.    
  113.     window.organizer = self:Create('UIListLayout', {
  114.         Name = 'Sorter';
  115.         --Padding = UDim.new(0, 0);
  116.         SortOrder = Enum.SortOrder.LayoutOrder;
  117.         Parent = window.container;
  118.     })
  119.    
  120.     window.padder = self:Create('UIPadding', {
  121.         Name = 'Padding';
  122.         PaddingLeft = UDim.new(0, 10);
  123.         PaddingTop = UDim.new(0, 5);
  124.         Parent = window.container;
  125.     })
  126.  
  127.     self:Create("Frame", {
  128.         Name = 'Underline';
  129.         Size = UDim2.new(1, 0, 0, 1),
  130.         Position = UDim2.new(0, 0, 1, -1),
  131.         BorderSizePixel = 0;
  132.         BackgroundColor3 = options.underline;
  133.         Parent = window.frame
  134.     })
  135.  
  136.     local togglebutton = self:Create("TextButton", {
  137.         Name = 'Toggle';
  138.         ZIndex = 2,
  139.         BackgroundTransparency = 1;
  140.         Position = UDim2.new(1, -25, 0, 0),
  141.         Size = UDim2.new(0, 25, 1, 0),
  142.         Text = "-",
  143.         TextSize = 17,
  144.         TextColor3 = options.txtcolor,
  145.         Font = Enum.Font.SourceSans;
  146.         Parent = window.frame,
  147.     });
  148.  
  149.     togglebutton.MouseButton1Click:connect(function()
  150.         window.closed = not window.closed
  151.         togglebutton.Text = (window.closed and "+" or "-")
  152.         if window.closed then
  153.             window:Resize(true, UDim2.new(1, 0, 0, 0))
  154.         else
  155.             window:Resize(true)
  156.         end
  157.     end)
  158.  
  159.     self:Create("TextLabel", {
  160.         Size = UDim2.new(1, 0, 1, 0),
  161.         BackgroundTransparency = 1;
  162.         BorderSizePixel = 0;
  163.         TextColor3 = options.txtcolor,
  164.         TextColor3 = (options.bartextcolor or Color3.fromRGB(255, 255, 255));
  165.         TextSize = 17,
  166.         Font = Enum.Font.SourceSansSemibold;
  167.         Text = options.text or "window",
  168.         Name = "Window",
  169.         Parent = window.frame,
  170.     })
  171.  
  172.     do
  173.         dragger.new(window.frame)
  174.         resizer.new(window.background, window.container);
  175.     end
  176.  
  177.     local function getSize()
  178.         local ySize = 0;
  179.         for i, object in next, window.container:GetChildren() do
  180.             if (not object:IsA('UIListLayout')) and (not object:IsA('UIPadding')) then
  181.                 ySize = ySize + object.AbsoluteSize.Y
  182.             end
  183.         end
  184.         return UDim2.new(1, 0, 0, ySize + 10)
  185.     end
  186.  
  187.     function window:Resize(tween, change)
  188.         local size = change or getSize()
  189.         self.container.ClipsDescendants = true;
  190.        
  191.         if tween then
  192.             self.background:TweenSize(size, "Out", "Sine", 0.5, true)
  193.         else
  194.             self.background.Size = size
  195.         end
  196.     end
  197.  
  198.     function window:AddToggle(text, callback)
  199.         self.count = self.count + 1
  200.  
  201.         callback = callback or function() end
  202.         local label = library:Create("TextLabel", {
  203.             Text =  text,
  204.             Size = UDim2.new(1, -10, 0, 20);
  205.             --Position = UDim2.new(0, 5, 0, ((20 * self.count) - 20) + 5),
  206.             BackgroundTransparency = 1;
  207.             TextColor3 = Color3.fromRGB(255, 255, 255);
  208.             TextXAlignment = Enum.TextXAlignment.Left;
  209.             LayoutOrder = self.Count;
  210.             TextSize = 16,
  211.             Font = Enum.Font.SourceSans,
  212.             Parent = self.container;
  213.         })
  214.  
  215.         local button = library:Create("TextButton", {
  216.             Text = "OFF",
  217.             TextColor3 = Color3.fromRGB(255, 25, 25),
  218.             BackgroundTransparency = 1;
  219.             Position = UDim2.new(1, -25, 0, 0),
  220.             Size = UDim2.new(0, 25, 1, 0),
  221.             TextSize = 17,
  222.             Font = Enum.Font.SourceSansSemibold,
  223.             Parent = label;
  224.         })
  225.  
  226.         button.MouseButton1Click:connect(function()
  227.             self.toggles[text] = (not self.toggles[text])
  228.             button.TextColor3 = (self.toggles[text] and Color3.fromRGB(0, 255, 140) or Color3.fromRGB(255, 25, 25))
  229.             button.Text =(self.toggles[text] and "ON" or "OFF")
  230.  
  231.             callback(self.toggles[text])
  232.         end)
  233.  
  234.         self:Resize()
  235.         return button
  236.     end
  237.  
  238.     function window:AddBox(text, callback)
  239.         self.count = self.count + 1
  240.         callback = callback or function() end
  241.  
  242.         local box = library:Create("TextBox", {
  243.             PlaceholderText = text,
  244.             Size = UDim2.new(1, -10, 0, 20);
  245.             --Position = UDim2.new(0, 5, 0, ((20 * self.count) - 20) + 5),
  246.             BackgroundTransparency = 0.75;
  247.             BackgroundColor3 = options.boxcolor,
  248.             TextColor3 = Color3.fromRGB(255, 255, 255);
  249.             TextXAlignment = Enum.TextXAlignment.Center;
  250.             TextSize = 16,
  251.             Text = "",
  252.             Font = Enum.Font.SourceSans,
  253.             LayoutOrder = self.Count;
  254.             BorderSizePixel = 0;
  255.             Parent = self.container;
  256.         })
  257.  
  258.         box.FocusLost:connect(function(...)
  259.             callback(box, ...)
  260.         end)
  261.  
  262.         self:Resize()
  263.         return box
  264.     end
  265.  
  266.     function window:AddButton(text, callback)
  267.         self.count = self.count + 1
  268.  
  269.         callback = callback or function() end
  270.         local button = library:Create("TextButton", {
  271.             Text =  text,
  272.             Size = UDim2.new(1, -10, 0, 20);
  273.             --Position = UDim2.new(0, 5, 0, ((20 * self.count) - 20) + 5),
  274.             BackgroundTransparency = 1;
  275.             TextColor3 = Color3.fromRGB(255, 255, 255);
  276.             TextXAlignment = Enum.TextXAlignment.Left;
  277.             TextSize = 16,
  278.             Font = Enum.Font.SourceSans,
  279.             LayoutOrder = self.Count;
  280.             Parent = self.container;
  281.         })
  282.  
  283.         button.MouseButton1Click:connect(callback)
  284.         self:Resize()
  285.         return button
  286.     end
  287.    
  288.     function window:AddLabel(text)
  289.         self.count = self.count + 1;
  290.        
  291.         local tSize = game:GetService('TextService'):GetTextSize(text, 16, Enum.Font.SourceSans, Vector2.new(math.huge, math.huge))
  292.  
  293.         local button = library:Create("TextLabel", {
  294.             Text =  text,
  295.             Size = UDim2.new(1, -10, 0, tSize.Y + 5);
  296.             TextScaled = false;
  297.             BackgroundTransparency = 1;
  298.             TextColor3 = Color3.fromRGB(255, 255, 255);
  299.             TextXAlignment = Enum.TextXAlignment.Left;
  300.             TextSize = 16,
  301.             Font = Enum.Font.SourceSans,
  302.             LayoutOrder = self.Count;
  303.             Parent = self.container;
  304.         })
  305.  
  306.         self:Resize()
  307.         return button
  308.     end
  309.  
  310.     function window:AddDropdown(options, callback)
  311.         self.count = self.count + 1
  312.         local default = options[1] or "";
  313.        
  314.         callback = callback or function() end
  315.         local dropdown = library:Create("TextLabel", {
  316.             Size = UDim2.new(1, -10, 0, 20);
  317.             BackgroundTransparency = 0.75;
  318.             BackgroundColor3 = options.boxcolor,
  319.             TextColor3 = Color3.fromRGB(255, 255, 255);
  320.             TextXAlignment = Enum.TextXAlignment.Center;
  321.             TextSize = 16,
  322.             Text = default,
  323.             Font = Enum.Font.SourceSans,
  324.             BorderSizePixel = 0;
  325.             LayoutOrder = self.Count;
  326.             Parent = self.container;
  327.         })
  328.        
  329.         local button = library:Create("ImageButton",{
  330.             BackgroundTransparency = 1;
  331.             Image = 'rbxassetid://3234893186';
  332.             Size = UDim2.new(0, 18, 1, 0);
  333.             Position = UDim2.new(1, -20, 0, 0);
  334.             Parent = dropdown;
  335.         })
  336.        
  337.         local frame;
  338.        
  339.         local function isInGui(frame)
  340.             local mloc = game:GetService('UserInputService'):GetMouseLocation();
  341.             local mouse = Vector2.new(mloc.X, mloc.Y - 36);
  342.            
  343.             local x1, x2 = frame.AbsolutePosition.X, frame.AbsolutePosition.X + frame.AbsoluteSize.X;
  344.             local y1, y2 = frame.AbsolutePosition.Y, frame.AbsolutePosition.Y + frame.AbsoluteSize.Y;
  345.        
  346.             return (mouse.X >= x1 and mouse.X <= x2) and (mouse.Y >= y1 and mouse.Y <= y2)
  347.         end
  348.  
  349.         local function count(t)
  350.             local c = 0;
  351.             for i, v in next, t do
  352.                 c = c + 1
  353.             end
  354.             return c;
  355.         end
  356.        
  357.         button.MouseButton1Click:connect(function()
  358.             if count(options) == 0 then
  359.                 return
  360.             end
  361.  
  362.             if frame then
  363.                 frame:Destroy();
  364.                 frame = nil;
  365.             end
  366.            
  367.             self.container.ClipsDescendants = false;
  368.  
  369.             frame = library:Create('Frame', {
  370.                 Position = UDim2.new(0, 0, 1, 0);
  371.                 BackgroundColor3 = Color3.fromRGB(40, 40, 40);
  372.                 Size = UDim2.new(0, dropdown.AbsoluteSize.X, 0, (count(options) * 21));
  373.                 BorderSizePixel = 0;
  374.                 Parent = dropdown;
  375.                 ClipsDescendants = true;
  376.                 ZIndex = 2;
  377.             })
  378.            
  379.             library:Create('UIListLayout', {
  380.                 Name = 'Layout';
  381.                 Parent = frame;
  382.             })
  383.  
  384.             for i, option in next, options do
  385.                 local selection = library:Create('TextButton', {
  386.                     Text = option;
  387.                     BackgroundColor3 = Color3.fromRGB(40, 40, 40);
  388.                     TextColor3 = Color3.fromRGB(255, 255, 255);
  389.                     BorderSizePixel = 0;
  390.                     TextSize = 16;
  391.                     Font = Enum.Font.SourceSans;
  392.                     Size = UDim2.new(1, 0, 0, 21);
  393.                     Parent = frame;
  394.                     ZIndex = 2;
  395.                 })
  396.                
  397.                 selection.MouseButton1Click:connect(function()
  398.                     dropdown.Text = option;
  399.                     callback(option)
  400.                     frame.Size = UDim2.new(1, 0, 0, 0);
  401.                     game:GetService('Debris'):AddItem(frame, 0.1)
  402.                 end)
  403.             end
  404.         end);
  405.  
  406.         game:GetService('UserInputService').InputBegan:connect(function(m)
  407.             if m.UserInputType == Enum.UserInputType.MouseButton1 then
  408.                 if frame and (not isInGui(frame)) then
  409.                     game:GetService('Debris'):AddItem(frame);
  410.                 end
  411.             end
  412.         end)
  413.        
  414.         callback(default);
  415.         self:Resize()
  416.         return {
  417.             Refresh = function(self, array)
  418.                 game:GetService('Debris'):AddItem(frame);
  419.                 options = array
  420.                 dropdown.Text = options[1];
  421.             end
  422.         }
  423.     end;
  424.    
  425.    
  426.     return window
  427. end
  428.  
  429. return library
Advertisement
Add Comment
Please, Sign In to add comment