Simulation

The code in the DLL can roughly be divided in two kinds: structure code and simulation code. Structure code implements communication with C#, smart pointers, the message system, and in general code that doesn't directly have to do with the simulation, but keep things running in the background. Simulation code, which will end up as the bulk of code, will actually implement the game world and how it evolves through time.


 * libsote.hxx and libsote.cxx contain the core of the structure code, including the communication with C#.
 * expose.hxx and expose.cxx are script-generated and allow the interface to "see" the information in the sim.
 * message.hxx and message.cxx are also script-generated and allow various types of game-objects to send messages to each other.
 * tasks.hxx and tasks.cxx contain the code relating to specific tasks ran in separate threads.
 * config.hxx and config.cxx contains code relating to the configuration of the game. The information it contains is usable even if there is no world loaded, and can be used to store parameters for world-generation.
 * tile.hxx and tile.cxx contain all code relating to Tiles.
 * tostring.cxx is script-generated and contains the ToString code.
 * varenum.cs is script-generated and contains enumerations that keep the simulation and interface in sync with each other.
 * sysenum.cs is its hand-written friend. These two files are compiled into both sim and iface, how cool is that!
 * genExpose.lua is the script that generates the expose files and varenum, as well as incrementing the version.
 * genMessage.lua is the script that generates the message files.
 * genToString is the script that generates tostring.cxx.
 * VERSION.txt is used to keep track of the version.