This week was a little bit of everything. We started with some small changes. Getting windowed mode to work in runtime was a bug we had to work out, in order to allow users to minimize maximize, and close out of the application. We also made some minor changes to icon textures, did some error handling of load/save functionality, and added the ability for users to save an existing file, rather than always having to save as a new file.
A quality of life change was ToolTips, which now pop up on all buttons when hovering over them for a short time. They display what the corresponding button does, and the key bind if one exists.
Using the custom button class, along with icons we made for the different types, we now have a popup radio that contains buttons for our different kinds of select, which for now include multi, layer, and new to this week, color select.
Speaking of which, our latest addition to the select family is color select. this is a very important tool, as is allows for subtle changes, and changes to groupings of cubes. Similar to the other selects, we have our visual component, along with going through the entire grid and adding all cubes with the color the user clicked on to the selection array.
One of the biggest changes this week was Version Control, which now allows for users to revert changes by using the Undo/Redo buttons, or Ctrl + Z or Ctrl + Y respectively. Rather than use the JSON file we originally planned to use, we decided on a text file, as it turned out to be more appropriate for our situation. by storing each action a user can do as a command, and parsing those commands, we were able to create an intelligent interpreter, that can undo adding, removing and coloring blocks. It can also determine when a user is using the drag version of any of these tools, or modifying a selection, and it counts these a single group action.
Other minor changes included some minute changes to icons, also adding versions of the button icons for the cursor when the respective button is selected. We also did some error handling with loading and saving when canceling the load/save process, and when loading a project without version history. Canvas handling was adjusted to ignore when a user tries to add, remove, brush, etc. outside the grid. Finally, with intelligent save, the program will now detect if the project the user is working on is an existing project, and save it rather than attempt to save it as a new project. This still needs some visual cue, so that the user knows that saving is occurring.
Another thing we worked on was allowing the user to specify the size of their grid. Up until this point, this information has been hard-coded in as a 10 x 10 x 10 cube as the grid. Now, the user can specify the dimensions of the grid, and the grid is dynamically resized to fit the user's specifications.
To go along with User-specified grid sizes is the other major update this week, multiple tabs. We accomplished multiple tabs by creating a canvas controller, which handles the creation of new game objects required for an individual voxel grid, and the changing back and forth of the current tab, or grid/game object. Now, when a file is loaded, it is opened in a new tab, and if a user wishes to create a new voxel project, they can create a new tab, specify the size, and start working on the new voxel.
Some smaller changes also included the reconnection of the picker and brush tools. We then took them a step further by adding drag functionality to both of them. That means that we can drag our cursor over a region, and brush or pick colors, which feels more natural for an artist using our software rather than clicking each individual block.
Windowed mode in runtime
Icon tweaking
Load/save bugs and error handling
Save existing file
Color Select
Buttons for different types of select added
Drag Brush
Drag Pick
Undo/Redo functionality
UI resizing/scaling
ToolTips
User specified grid size
New tabs