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:
BaseWindow:
The window’s base plugin which usually handles animations (you can disable this if you want to)
Header:
Handles things that headers should do, including dragging the window, closing the window, and hosting additional buttons which holds custom actions
Resize:
Handles resizing the window
Adapt:
Handles environmental changes, such as container size, position bounds, etc.
FrostedGlass:
Adds a frosted glass effect to the window’s background
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:
Using :create() to quickly create a window:
local window = Windows:create(shopGui, UDim2.new(0.45,0,0.5,0), "Frutiger Aero")
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.canvas
Using the legacy version
Windows:createLegacy(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.
(there are silent updates for micro bacteria fixes.)
Version 21/12/2024 changes:
-Updated the notepad app
-Changed how adding header buttons work, use . instead of :. addButton() now returns the button instance created. removeButton now only requires that instance. You can now modify the button label using modifyButtonLabel().
-Fixed anchor points breaking when snapping to snap points
-Fixed the header plugin breaking when destroying the window while still dragging (possible on multitouch devices).
That’s some mad mathematical + UIDragger stuff I don’t understand
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?
Thank you! It took about a year
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.
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!
Hey guys, I’ve updated the module to rewrite the specialMouse. I’ve also added a “launchApp” method along with some pre-installed apps inside of the module as a new feature. Currently there are Template, App Launcher, Notepad, and Speed Clicker.
These apps were made very hastily, so there are probably some problems in them that I haven’t discovered yet. They will have a chance to be updated when a new version of the Windows module gets updated.
Hopefully this update will be beneficial to everyone! I’ll be sure to keep developing this module until there are no more cool features that I can think of.
Update 16/12/2024 is out! This update rewrites the Adapt plugin and also upgrades it to respect the container’s borders while removing the liquidify feature. There have also been some internal changes, such as converting table.insert into table[key] so the code looks nicer. The minimizing feature has also been upgraded, so you can directly call it using window:minimize(), move the window to the floor of the container, or double-clicking the header.
New update is out! Version 21/12/2024 fixes the notepad app and changes how header buttons work. If you have an existing work which uses : to add a header button, you can just change it into a . when updating to this version.