Extending RoboTour
------------------

RoboTour 3 was designed from ground up so that it can be extended easily. 
However, there are so many possibilities to extend it that there can be
confusion, so here's a guide to all of them.

1) ProgramLoaders
-----------------
ProgramLoaders are used to load programs (bots) from files or possibly from
elsewhere. 
Implement ProgramLoader in a class and add the example loader of your loader
to the exampleLoaders list (in robotour.cpp:rtMain()).

2) SimSupervisors
-----------------
SimSupervisors can supervise simulations: they can add bots to them at the 
beginning, can influence them during running, and can even end them. 
Implement SimSupervisor in a class. You will have to insert the supervisor from
a sim manager or from a frontend plugin. 

3) SimManagers
--------------
SimManagers manage a tournament: they set up simulations given some options.
Implement SimManager in a class. Add your manager to Frontend::getManager()
and make the frontend recognize it (possibly using a frontend plugin).

4) TourDisplayers
-----------------
TourDisplayers display tournament results (partial results after each simulation
and/or the complete results after finishing). (They may also write them down,
send them via e-mail, or speak them out loudly, of course.)
Implement TourDisplayer in a class. You will have to insert the displayer from
a sim manager or from a frontend plugin.

5) FrontendPlugins
------------------
FrontendPlugins extend Frontends to parse some special parameters and add 
special SimSupervisors and TourDisplayers to the tournament and simulations.
Implement FrontendPlugin in a class and add it to Frontend::initPlugins() (if
your plugin can be used with any frontend) or to xxxFrontend::initPlugins()
(if your plugin can only be used with frontend xxx).

6) Frontends
------------
Frontends get all the information required to start a tournament (i.e. the
programs which are part of it, the tournament and simulation options, etc.)
from the user, and manage result and error display to the user.
Implement Frontend in a class. Instantiate your frontend instead of the 
ConsoleFrontend in robotour.cpp:rtMain(). 