[ AmberSkyNet VR ]Итак, начнём разработку собственно классов движка. И начнём с главного класса, на который можно будет постепенно наращивать классы менеджеров и сцен различной конфигурации В начале, конечно, полагается прикинуть какие классы мы будем использовать и нарисовать примерную схему классов (хорошо в виде UML-диаграммы) но в данном случае схема классов будет строится по ходу разработки самого движка :) Это наложит отпечаток как на архитектуру движка так и на функционал самих классов
Т.к. схемы нет и мы не можем сказать какие классы еще появятся и какие переменные в них мы будем использовать, то напишем базовый класс с учётом лёгкого добавления указателей на классы и переменных окружения. Конечно, если мы выигрываем в универсальности, но и теряем в чем-то.. Например - в быстродействии и несколько суживаем возможности оптимизации. IEngineНапишем для начала простенький интерфейс к главному классу под названием IEngine, чтобы не тащить описание внутреннего устройства нашего класса в прочие. Да и править сам CEngine будет проще - не надо адаптировать все остальные классы к его изменениям. Для начала в IEngine опишем всего лишь универсальные операции установки переменных
окружения и указателей на различные менеджеры.
Потом, конечно, функционал расширится. Наверное.. Указатели будем хранить типа void*. Это может указывать на что угодно,
контроля нет, и если, скажем, мы установили указатель на менеджер сцены,
а читаем его как менеджер звука, то всё может рухнуть со страшной силой :) CEngineВнутреннюю реализацию переменных окружения сделал через std::map<string,string>. Потом может быть заменю на специальный класс, который бы при изменении какого-нибудь параметра запускал бы ф-цию обработки этого изменения (например - установили переменной ScreenWH значение "800x600" и у нас запустилась функция смены разрешения экрана). Исходники этого шага выложены в SVN. Скачать их можно набрав команду: svn co https://svn.sourceforge.net/svnroot/ambernet/tags/AmberSkyNet-0.2 ambernet_0.2В main.cpp мы создаём экземпляр класса CEngine и пробуем устанавливать, читать и удалять указатели и переменные окружения движка. Main.cpp видит экземпляр как IEngihe, но "знает" про CEngine. Далее планирую отучить его от этой пагубной привычки путём введения классов поддержки плагинов, и тогда вынесем CEngine в отдельную DLL, оставив в main.cpp только #include "IEngine.h"; P.S. ну или в отдельную so, я помню про линуксоидов.. |