I thought I’d have this update ready a couple weeks ago, but there was a bad performance regression in a recent Unity update, so I had to wait until a new version of the Unity game engine was available. Very frustrating! Oh well, in the meantime I was able to work on a few extras for this update.
I was feeling adventurous these past couple weeks so I upgraded my project to use ECS 1.0. I also added an option to export your environment as a model file!
DOTS 1.0
(Note: the following section might be boring for players not interested in backend framework development)For a while now I’ve been stuck on an old version of Unity DOTS packages (the framework I use for high performance grid systems). Unity kind of left DOTS alone for a long time and only recently restarted development on it. The updates came in two phases, version 0.5 and 1.0, but I decided to skip the 0.5 version because it seemed like there were things Unity still needed to work through.
Anyway, since the last update I’ve been researching ECS 1.0 and upgrading the Battle Map Studio codebase to be compatible with ECS 1.0 and other associated packages. Many of the changes I needed to make were simple, but others required major restructures. Of all the updates I made, there were two that I found most noteworthy: runtime material and mesh updating and entity conversion.
Materials and Meshes
My favorite change in 1.0 is that I can now easily update meshes and materials of entities within a job! Previously, materials and meshes could only be updated on the main thread, so I had to queue entities that needed mesh/material updates inside a job and then update meshes and materials on the main thread. This was really, really, annoying and impacted performance.
Now, changing a block’s material, switching grid types, generating meshes for liquids, and placing block tiles is so much smoother!
Entity Conversion
The biggest change in 1.0 is how entities are converted (i.e. translated from GameObject to entity + components). Runtime conversion, a method I used previously to load the GameObject and then convert it when a player placed an object, like a tree, for example, is no longer supported. Instead, Unity introduced entity Baking, which I’m using to preconvert all GameObject prefabs to entity prefabs. I’m not sure why runtime conversion was removed, because it was really useful, but it is what it is.Environment Geometry Export
A player (shoutout to Jason!) recently suggested adding a feature to export the terrain as a mesh (by the way, did you know you can suggest features at feedback.battlemapstudio.com?). In this update I added the model export functionality along with a new export environment window.
Exporting your environment as a model is easy. Just navigate to the File>Export as Model option to open the export window, type in a name, select a coloring option, and press Create!

Once your environment is exported, navigate to the BMS_Data/Exports directory to view your environment model.
Asset Manager

Previously, the only way to import and access custom assets was from the palette view (where all the plants and props are). For this update, I created a new window specifically for viewing, editing, and importing custom assets! You can access the asset manager under the Scene dropdown.

Clicking an asset opens it in the asset editor, which controls various import settings for the asset. You can also right-click and select delete to remove an asset from the scene. Be careful because deleting an asset removes all instances of the asset on the map, and you cannot undo asset deletion.

Director Window
For a while now, I’ve felt that options controlling how you view the map were separated into too many different windows, which was probably confusing. Now, the fog of war options, view options, and GM options, are conveniently located in a new window, called the Director window.
I will be adding more GM controls, options, and features over time, so this is just the first update to kind of organize current options to prepare for the path forward.

Polish
- Refined many parts of the UI to be more visually cohesive.
- Units and objects can now be dragged and dropped by left-clicking and moving to a target position.
- Now when a block is fully invisible in the fog of war, its material’s normal, specular, metallic, and ambient occlusion are more obscured.
- Added popup options when right-clicking texture selectors in the palette to set the terrain texture and default block texture.
- Added a button to the terrain options window to reset the default block texture to the terrain texture.
- Fixed several network serialization bugs where objects like characters and props could not be sent properly, disrupting placement.
- Fixed a network bug where rejoining a room after intentionally leaving the room was not possible for a set period of time.
- Fixed a jobs bug where block colliders were disposed incorrectly, causing crashes.
- Fixed a bug where the GM options panel was always accessible, even for players.
- Fixed a jobs bug where creating a water block would indefinitely trigger block updates.
- Fixed an input bug where one Redo button functioned as an undo button.
- Fixed a bug where randomized blaster projectile shape creation would not generate the correct collider for projectile entities.
- Fixed a visual bug where changing the fog of war value on a block would not update its elevation immediately.
- Fixed a visual bug where block textures were not rotated to be aligned with the terrain texture.
- Fixed a bug where block tiles could not be rotated.
- Fixed a fog of war bug where changing to a different team perspective would not update the visibility of characters and props.
- Fixed various bugs with character movement and fog of war.
Enjoy!
-Bradley
Changed files in this update