10/2023 - Current
I'm working on the Game Systems team making improvements to the UI systems and toolset. I've been able to work closely with UI designers to help improve their workflows and debugging capabilities. Currently, I'm converting our UI Editor from python to C++ in order to live edit in-game widgets to provide full WYSIWYG.
In this role I've been motivated to allow designers to create what they need as intuitively as possible. When I first joined I was able to bring a new user perspective to help find hidden, required knowledge of the tools or systems. New user experience is always on my mind, both for future users and current ease of use.
Before, users had to know what class they wanted their widget to be and type it in. With the new drag-n-drop library I added they can see all the classes grouped into categories with representative icons. And because users usually want to add an instance of an existing widget of a certain class, they're able to hold a hotkey while dropping from the library to select one from the widget explorer. As opposed to the default file explorer, the widget explorer I made allows for users to search by name and filter by widget class. When opening the explorer this way I can restrict the options to the given widget class that the user dragged from the library, creating a seamless and error-free workflow. Users also needed a default widget when adding a widget of a certain class, so I added being able to set what the default widget is for each class. The user is also able to create their own categories and assign widget classes to it for them to have it organized to their liking.
I also changed the way we recorded widgets for debug playback. Before, we would cache off draw commands for a widget for a certain amount of frames and when redrawing we would check if the widget had a cached draw command. This became an issue for widgets that became destroyed because there was no longer a way to get to the draw commands. To solve this I instead cached the render primitive definitions for each frame to remove the tie to the widget itself. To limit costs, I cached the definitions to reuse them between widgets and frames.
I've also integrated the HarfBuzz library and modified our text rendering system in order to support ligatures. With this we're able to support more languages.