With all of the primary components at some level of alpha, I’ve been working behind the scenes integrating them into a whole and getting the networking up and running again. Each part, the map tabletops and the editors, was created separately and the unification has been filled with lots of “oh, that should be a singleton,” and “that class should really derived from this other one.”
In there, too, has been a lot of work on the networking functions. Unity uses a client-server architecture that, while is understandable, is often frustrating. All communications have to go through the server and be routed back the clients. My desk is littered with rather convoluted sketches and messaging diagrams. It’s further complicated by the use of RPCs (remote procedure calls) to send this data. Unity supports only a handful of data types and most of those are only useful for a fast paced FPS with lots of little packets of data. Unfortunately, I’m moving data sets much larger than a few bytes, though not sending them very often. Whether it’s maps, characters, or images, all of these things need to be serialized into bytes, pushed to the server, and then redistributed to the clients. All workable, but often head-scratching when the data goes missing.
I’ll be out of the country for a week, so I thought I’d better leave behind another video of the progress before I go. In this video you’ll see connections established, characters loaded and shared with the server and other clients, a map loaded and shared with the tabletop, and finally some movement of the miniatures on the shared tabletop.
Also available on YouTube: