#ifndef MODULE_H #define MODULE_H #include "EventBase.h" namespace Engine { /** \brief Base class for the separate modules * * All Modules that are managed by the Engine::Engine base Module. Everything * else is a Submodule of that or a Submodule of a Submodule. */ class Module { public: /** \brief Initializes the Module * * \note This function must only return if it was able to initialize * successfully, otherwise it should log an error with LogError and exit * the program itself! * * In general at first the Submodules get initialized and then the Module * that has pointers to the Submodules. Exception: The main Module * Engine::Engine. * * \note * The function Engine::OnInit () performs the allocation * and Initialization of all its Submodules. */ virtual int Init (int argc, char* argv[]) { return OnInit (argc, argv); } /** \brief Frees the used memory of the Module * * The Destroy function is always called at first for the Module itself * and then for its submodules so that a Module is still completely * working. Again for the main Module Engine::Engine the reverse is the * case (such as in Module::Init). */ virtual void Destroy () { OnDestroy (); } /** \brief Calls the function that registers its commands to the * Commandsystem */ virtual void RegisterCommands () { OnRegisterCommands (); } virtual bool SendEvent (const EventBasePtr &event) { return OnReceiveEvent (event); } protected: /** \brief The actual function being called when Init () is called */ virtual int OnInit (int argc, char* argv[]) = 0; /** \brief Frees the memory */ virtual void OnDestroy () { }; /** \brief Registers the commands of the Module */ virtual void OnRegisterCommands () { }; /** \brief Reacts on a event that was sent to the module */ virtual bool OnReceiveEvent (const EventBasePtr &event) { return false; }; }; } #endif /* MODULE_H */