Hey folks! It’s been a while since our last dev update, so today’s blog is exactly that! Oh, and we’ve also got a super exciting announcement coming later this weekend – so stay tuned here on our dev blog for more info. And without further ado, here’s a quick look at a few key features we’ve been working on as of late:
Undo has begun!
We’ve started work on a feature that our fans (and team!) have wanted for a long time…undo and redo! Despite how standard a feature undo is in most tool-like applications, and how undeniably useful it is, it’s pretty complicated to build and maintain an undo stack of past user actions. (There’s a pretty good answer about why this is on Stack Exchange.)
One of the added complications for RoboCo has been that in the VR interface we allow a lot of two-handed interactions. This means you might pick up and hold an object, and then resize it by pulling on it with your other hand, before you put the object down again. This feels great for natural and efficient edits with two VR controllers, but it is a headache for designing and implementing undo – kind of like if there were two different mouse cursors each manipulating the same object!
Some other VR applications we’ve looked at that have undo, like Google Blocks or Tilt Brush, have one hand as the interaction hand and the other hand as a menu palette, probably in part to avoid a challenge like we have with two-handed interactions.
But we don’t need to limit to just one interaction hand; we’re even more clever than the UX designers and engineers at Google…right?
Well, maybe not…but hey, this whole thing began with an Innovative Research grant, so it makes sense to take some risks. We like the way our two-handed interactions feel for building robots in RoboCo, and we wouldn’t want to give that up just for undo. We needed an efficient solution that would introduce undo into our desktop and VR interfaces without too much complexity and without compromising the feel of using either or both of your hands to build robots in virtual reality.
So right now our plan for VR is to group together the actions you did while holding an object. So in the example above, you’ll undo both the resizing and the moving of the object in a single step, since they effectively happened together. We had some existential discussions about whether picking up an object or putting it down counts as the moment when it was moved relative to when it was resized, but ultimately settled on this as the easiest rule to manage and to communicate to users.
With a basic plan formulated, our lead engineer Jon Kieffer set off into the undo wilderness. It was a magic moment for everyone when Jon shared his first example of undo in action on desktop:
There’s lots of work still in progress: Each type of action we want to undo and redo, such as snapping blocks, or changing joint types, or assigning actuator controls needs special consideration, so we’ve been going down the list. We also have to implement the undoing of VR “action groups” as described above. And we are working on a console message UI to describe what you undid or redid, which will be especially handy if you, say, undo a motor’s RPM but don’t have the properties panel open anymore.
Hopefully it will all come together in the end! And now we all have a bigger appreciation for the power contained in these two simple buttons:
We’ve integrated the I2 Localization System into RoboCo and are setting up our user interface elements to receive translated text. We don’t have any announcements to make yet about which languages will or won’t be supported at launch, but we’re super excited at the prospect of making RoboCo available to more players around the globe!
We’re currently using Google Translate to generate placeholder text – so please excuse our poor attempt at Spanish. 😅