Framework for Game Engine Tools
Design
I’ve sketched on a class design that I’ll start implementing this week, full sized version can be found here.

These parts for commands and sending/receiving data are needed for both the C++ and C# side and are therefore quite similar. The exceptions are the TcpConnection where one side has to act as server and the other has client, and the command handler may have different functionality. Available commands are listed separately as they must mirror each other on respective side, but can’t be set as one file/source as each command will need pointers to functions on each side. I see it as a must to have a function for each possible function, this’ll make command extension easier.
My approach is to let the C# editor interface hold session data such as action history/undo data and entities, and the C++ side mainly hold data for rendering. The C# side will also be responsible for error handling; if the C++ parser recieves incorrect XML or its respective command handler recieves and incorrect command it will simply send back an error message for the C# interface to handle.
It might seem clumsy to send data and commands back and forth, for example with a matrix to represent entity placement - but thanks for the Nebula utilities it’s easy to simply convert such data back and to strings for C# to store. Action storage in C# might also look a bit weird as most of them affect N3 objects, but I intend to keep the C++ side as “clean” as possible and implement most functionality in the C# tool side. Multiple action/undo lists on both sides is out of the question because such management will only lead to synchronization errors and complications.
I’ve excluded the other classes and their functionality for now, I’ll put down a concrete design for them next week. In this diagram, they’ll be reached through the command handler classes. For the C# project I’ll structure the form and its controls in the model-view-controller pattern, which will be initialized from a Wrapper class which I’ll set as a singleton.
Next entry: Nav-mesh and Pathfinding
Previous entry: Progress Report w5

















