Quick UI Window Creation Module v19/11/2024

Hey guys, I made a cool UI window creation tool which will probably speed up the process of making games (or experiences or charts). It’s very modular so you can easily add your own features (called plugins inside it) to it. You can also set custom themes to customize it even more! It works for both ScreenGuis and SurfaceGuis, so you can do cool stuff, for example using it as a display screen in workspace or just keeping menus organized. A fun quirk is its ability to contain itself, and by that I meant both not exploding like the old version and containing a window inside of a window. The chances of me adding support for BillboardGuis are near zero. It’s also highly chainable so you can chain function calls. Here’s a list of features it can do:

  1. Creating UI windows

  2. Themes
    You can use the prebuilt themes or make your custom themes to fit your game

  3. Plugins (additional features)

  4. Being able to put windows inside of a window
    image

  5. Being able to be put inside of a SurfaceGui

  6. Lots of other internal features
    It would take a long time to write all of the internal features, like adding custom header buttons, binding events, creating events, custom mouse position, manually loading plugins from other containers, etc.

Here’s a demonstration of most of the features combined:


You can get the module here, and you can test it in the test place

Here are some examples of how to use this module:

  1. Using :create() to quickly create a window:
local window = Windows:create(shopGui, UDim2.new(0.45,0,0.5,0), "Frutiger Aero")
  1. Using .new to construct a bare-bone window
local window = Windows.new(theme or nil):loadPlugin("BaseWindow"):loadPlugin("Header"):loadPlugin("Resize"):loadPlugin("FrostedGlass")
shopGui.Parent = window.instance
  1. Using the legacy version
Windows.settings.system.useLegacy = true
Windows:create(shopGui, UDim2.new(0.45,0,0.5,0)) --themes does not exist in the legacy version, but spaghetti does

I’ve put a bunch of comments everywhere inside of the module (including the prebuilt plugins) so it’s easier to understand what it does.

Version 21/10/2024 changes:
-Added full multi-touch support
-Fixed some edge-case partially-unresponsive SurfaceGui
-Removed unnecessary line breaks

9 Likes

this is really cool! i’ll test this out when i get the chance.

1 Like

That’s some mad mathematical + UIDragger stuff I don’t understand :fire:

Besides that, the animations are very neat and I haven’t seen a proper-made window system like nesting windows inside windows, or resizing nested windows to respect the parent window size.

I have to say this is cool! Just curious, how long did it take you?

1 Like

Thank you! It took about a year :skull:
I mostly continue this project on my free time so that’s one of the factor. There’s also another factor which is just me putting random math everywhere and hoping that it works for some reason, and try to understand why it works. The one that sticks out the most is using parent relations instead of getting the screen insets. That unlocked a whole loads of possibilities, for example the nested windows, auto-collapse and recenter windows, custom containers, and keyboard UI Navigation with its sensitivity related to its parent. The only limiting factor to nested windows is Roblox’s nested CanvasGroup limit of 4.

1 Like

Damn, the free time really did pay off. This is a cool resource I’ve seen in a while so pretty excited to see it.

1 Like

I’ve updated the module to add multitouch support and some other bug fixes. It took a while, but now there are window.mouse and window.specialMouse!

window.mouse is basically the normal LocalPlayer.mouse, meanwhile window.specialMouse is a special mouse that automatically switches modes between ScreenGui and SurfaceGuis. It also makes access to multitouch easier, since it has a feature similar to mouse.Hit but with multitouch capabilities. There are also lots of bugs that I’ve demolished, so hopefully this update will be a convenience!

2 Likes

The test place has been uncopylocked. Feel free to download it! (It’s next to the main module link or here)