Ogre3d без Example Application. Свой каркас

После ознакомлениями с примерами - стало понятно, что использование ExampleApplication для дальнейших проектов мне не подходит. Все равно, потом придется переходить на другой "каркас", так не проще, ли заранее сделать такой каркас, который мне понравится, и в нем будет удобно работать. Именно так я рассуждал, после того, как начал использовать OGRE.

В это время я увидел статейку - Managing Game States with OGRE, и решил посмотреть, что это такое. Сама организация структуры мне понравилось, но в описании не было ничего сказано ни про, мышь ни про CEGUI. В общем, я решил переделать этот каркас, так что б мне было удобно с ним работать. В этой статье я расскажу, что такое Managing Game States, и как его использовать в своих проектах.

Для использования этого каркаса потребуется OGRE 1.2.0 "Dagon". Внимание если вы используете OGRE версии меньше 1.2 программа не скомпилится, потому, что в версии 1.2 используется функция createSceneManager, а в старых версиях использовалась getSceneManager. Поэтому для использования этого каркаса, в старых версиях OGRE, вам необходимо будет заменить весь код, который связан с SceneManager.

Ну а теперь обо всем по порядку.

Идея базируется на том, что программа может иметь несколько статусов, и в процессе использования мы будем менять статусы. В процессе выполнения программы, выполняется только один статус, остальные либо записаны в очередь, либо еще не инициализированные и могут быть использованные в любой момент. Все статусы создаем на основе базового виртуально класса GameState, в котором опишем все методы, которые должен иметь лююбой «статус-класс». Эти методы описывают базовой функционал нашого класса, такой как обработка нажатий клавиш клавиатуры и мыши, методы которые вызываются при запуске, выходе, приостновлении и возобновлении работы «статус - класса».

Например, для любой игры можно создать такие статусы:
- PlayState
- PauseState
- OptionsState
- IntroState
- AboutState

Для управления «статус - классами» будем использовать класс GameManager.
class GameManager - public Ogre::Singleton<GameManager>.

Singleton – это класс для которого, в один момент времени может быть только один экземпляр (instance). К этому экземпляру можно обратится с любой точки программы без использования ссылок на него.