Rutus - Runtime GUI Selection Plugin

Rutus is a plugin that allows developers to easily debug their user interface during runtime. It gives you the ability to hover over any GUI elements on your screen to display important debugging information such as; Name, Position, Size and Padding. You can also left click on these elements to select them within the Explorer.

Get it on ItchGet it on Roblox


:inbox_tray: Installation

Rutus is currently only available on itch.io due to region restrictions by ROBLOX and Stripe on the creator store. Rutus will be supported on the creator store once the feature is available.

Get VIA Itch

Rutus is available on itch for purchase. Everytime a new version of Rutus is released, it will be automatically deployed to the itch page.

Once purchased, you will receive the .rbxm plugin file - You’ll need to copy this file into your plugin directory.

You can find your plugin directory by going to:
C:\Users\[YOUR_USER]\AppData\Local\Roblox\Plugins
OR
Roblox Studio > Plugins > Plugins Folder

Once you’ve inserted the .rbxm file, please restart all running studio sessions.

Get it on Itch


Get VIA Creator Store

Rutus is not yet available on the creator store due to restrictions, it will be supported as soon as the feature is available.

Get it on Roblox


Try the Demo

Rutus has a demo version where you can test the behavior in-game; Since the plugin is executed within an Experience instead of Studio, there are some key features that cannot be tested - This demo is just to verify you’re aware of the use of the plugin before purchasing.


:rocket: Features and Settings

Hover Detection

  • Hover Detection Enabled - Gives the plugin permissions to detect what items your mouse is hovering during runtime. This is required for majority of features.

  • Hover Detection Accuracy - Determines how often the hover detector will run - We recommend keeping this at the default value.

  • Allow Multi Hover Detection - Allows the hover detector to detect and register if multiple items are being hovered - Unless specifically required, we recommend keeping this at the default value (Off).

  • Ctrl/Cmd Key Required For Hover Detection - This requires the Ctrl or Cmd key to be pressed for hover detection to engage. We recommend keeping this at the default value (On) for both performance and practicality.

Hover Dimensions

  • Show Dimensions On Hover - Whether or not dimension values will be displayed on elements that are hovered, e.g. size , position and name

  • Show AbsolutePosition On Hover - Should the Position of the element be shown while hovering?

  • Show AbsoluteSize On Hover - Should the Size of the element be shown while hovering?

  • Show Instance Name On Hover - Should the Name of the element be shown while hovering?

Distance Indicators

  • Show Distance Indicators On Hover - Whether or not distance indicators will be displayed on elements that are hovered.

  • Show Left Distance Indicator - Should the Left distance indicator be shown while hovering?

  • Show Top Distance Indicator - Should the Top distance indicator be shown while hovering?

  • Show Right Distance Indicator - Should the Right distance indicator be shown while hovering?

  • Show Bottom Distance Indicator - Should the Bottom distance indicator be shown while hovering?

  • Distance Indicators Are Always Relative To The Screen -
    If true - The distance indicators will reflect the distance between the element and the current viewport.
    If false - The distance indicators will reflect the distance between the element and its direct parent.

Behavior

  • Left Click To Select GUI - While hovering an element, you can left click to select it within the explorer widget.

  • Right Click For Context Menu - While hovering an element, you can right click to trigger an action menu that contains multiple useful features.

  • Block Input Activations - Prevents triggering events on elements if you’re attempting to select them within the explorer. ( e.g.: attempting to select a TextButton without running your .Activated function ).

  • Ignore Transparent GUI Objects - Ignores GUI objects that are considered transparent.

Plugin

  • Detect Runtime Settings Changes - While playing, you can tweak the settings to fit your current needs, However if you wish for these settings to persist when you stop playing - This setting must’ve been enabled before you began playing.

  • Studio Theme - The current studio theme, Clicking the button cycles the available themes.

  • Disable Tooltips - Disables the plugin widget’s tooltips.

  • Reset To Default - Reset the plugin to the default settings.


:bulb: Tips

  • You can hold Shift to select multiple elements.
  • Your settings will be saved across studio sessions.
  • Activating “Detect Runtime Settings” will save any changes you make to settings during runtime.
Top Secret Information

You can execute this in the command line while playing to select elements without the plugin:

--[[
	Simple version of Rutus, Execute in command line then click on any GUI elements on screen
	to select it within the explorer!
	
	Get Rutus: https://devforum.roblox.com/ 
]]
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local SelectionService = game:GetService("Selection")
local UserInputService = game:GetService("UserInputService")

local IsClient = RunService:IsClient()
local IsRunning = RunService:IsRunning()

if(IsClient == false)then
	warn("Rutus CMDL - Command should only be executed on the client.")
	return
end

if(IsRunning == false)then
	warn("Rutus CMDL - Command should only be executed while the experience is running.")
	return
end

local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui") :: PlayerGui
	
local ActiveRuntimeUISelectConnection: RBXScriptConnection

local function DisableRuntimeUISelect()
	if(ActiveRuntimeUISelectConnection)then
		ActiveRuntimeUISelectConnection:Disconnect()
		ActiveRuntimeUISelectConnection = nil
	end
end

local function EnableRuntimeUISelect()
	DisableRuntimeUISelect()
	print("Rutus CMDL - Listening for GUI Selection...")
	ActiveRuntimeUISelectConnection = UserInputService.InputBegan:Connect(function(Input)
		if(Input.UserInputType ~= Enum.UserInputType.MouseButton1)then
			return
		end
		DisableRuntimeUISelect()
		local GuiElementsAtPosition = PlayerGui:GetGuiObjectsAtPosition(Input.Position.X, Input.Position.Y)
		local TargetElement = GuiElementsAtPosition[1]
		if(TargetElement == nil)then
			print("Rutus CMDL - There were no visible GUI's where you pressed!")
			return
		end
		print(`Rutus CMDL - Selected {TargetElement}. Other Elements:`)
		for index, element in GuiElementsAtPosition do
			if(index == 1)then
				continue
			end
			print("\t", element)
		end
	end)
end

EnableRuntimeUISelect()

To report any bugs, request features or reach out - Send a message or contact@mekstuff.com

Made with :heart: by Mekstuff

3 Likes