Ресурсы по проекту "Осваиваем SDK".

Раздел по SDK на "модиках"

* Уроки C++ - вопросы-ответы по основам SDK
* Связь SDK и Python. Вызов функций, описанных в СДК, через Питон.
* Добавление новых XML атрибутов и их использование в SDK

* * * * *


Сколько месяцев прошло, а про SDK в модиках не написано ни слова. Возможно это происходит потому, что там лежит слишком огромный объем информации и осмыслить его одному человеку, за такое короткое время, практически не под силу. Поэтому я попытаюсь начать осмысливание той информации, что лежит в SDK. Оговорюсь сразу – одному мне это тоже не под силу, ведь кроме того, что надо копаться в SDK – надо еще ходить на работу, заниматься с семьей и т.д. и т.п. (А еще надо хоть иногда и поспать).
ПОЭТОМУ – я призываю всех, кто хоть в чем то разобрался в SDK писать в эту тему. Потом, по возможности, можно будет переносить законченные блоки в «модики».
Кстати – это касается не только тех, кто программирует на Cpp, но и тех, кто программирует на Питоне. Ведь практически все классы и функции из SDK передаются в Питон. А SDK использует некоторые функции Питона. А управлять SDK – лучше все –таки из Питона.
Если программисты будут знать, как работает та, или иная функция, написанная в SDK, то они смогут делать более качественные моды, и новых функций у этих модов будет гораздо больше.

НАЧАЛО:

Если кто видел весь пакет SDK, он наверное обратил внимание, на то, что одни файлы начинаются с букв Cv…, а другие с букв Cy… . Может это и не новость, но в Visual Studio 2003 (в дальнейшем VS) – файлы, которые начинаются с Cy вынесены в отдельную папку – CyPython. А если рассматривать их более внимательно, то можно заметить, что названия классов и функций, содержащихся в файлах Cv…, повторяются в файлах Cy… (только с приставкой Cy). Это скорее всего сделано описание классов и функций SDK для Питона. Значит для изучения у нас осталась всего лишь половина файлов (приблизительно). И разобраться с «чего же начинается Родина» можно только, если заберешься в само SDK.
А начинается она с класса CvGame. Именно в этом классе есть функции, которые не вызываются больше ниоткуда. (см. список функций и переменных класса CvGame в файле CvGame.h).

Как видите функций очень много (и так в каждом файле). Поэтому описать их в одиночку практически невозможно. Лучше будет, если описывать их будут все, кто может это сделать. У всех функций описание дано в их названии. Практически надо только перевести название функций и все станет ясно. Правда если что то надо уточнить придется смотреть всю функцию.
Из файла заголовка (благо там есть какие то комментарии) видно, что часть экспортируемых функций не передается в Питон (DllExport). Часть этих функций – (setInitialItems, regenerateMap,… ) вызывается из других функций SDK. Другая часть – (initDiplomacy, update,…) вероятнее всего вызываются из самого движка.(Кстати первая часть тоже скорее всего используется движком). Третья часть функций используется самим классом (или SDK, если они public). Так вот, те функции которые вызываются из движка наверное и будут начальными (для SDK). Если мы уже вошли в игру, то будет выполняться функция update() класса CvGame.

[codebox]void CvGame::update()
{
PROFILE("CvGame::update");

if (!gDLL->GetWorldBuilderMode())
{
sendPlayerOptions();

// sample generic event
CyArgsList pyArgs;
pyArgs.add(getTurnSlice());
gDLL->getEventReporterIFace()->genericEvent("gameUpdate", pyArgs.makeFunctionArgs());

if (getTurnSlice() == 0)
{
gDLL->getEngineIFace()->AutoSave(true);
}

if (getNumGameTurnActive() == 0)
{
if (!isPbem() || !getPbemTurnSent())
{
doTurn();
}
}

updateScore();

updateWar();

updateMoves();

updateTimers();

updateTurnTimer();

AI_updateAssignWork();

testAlive();

if ((getAIAutoPlay() == 0) && !(gDLL->GetAutorun()))
{
if (countHumanPlayersAlive() == 0)
{
setGameState(GAMESTATE_OVER);
}
}

changeTurnSlice(1);
}
}
[/codebox]


Как видите она, при определенных условиях вызывает функцию doTurn (), что практически означает нажать кнопку End Of Turn. Начало Turnа найдено, дальше можно смотреть, как оно (это начало) активирует все остальные объекты Цивы (очень многие классы в своем теле имеют свою функцию doTurn() (например: CvPlot, CvCity, CvUnit,…)
На этом пока все. (жара не дает сосредоточиться). Дальше будем рассматривать уже конкретные классы и возможно с примерами. Если Вы что то знаете о функциях и классах SDK, то пишите прямо в эту тему. Если я где-то ошибся, тоже пишите в эту тему, буду поправляться.