До "полоски прогресса" пока не дошел, потому что сначала хотел закончить свой вариант расположения информации вверху городского экрана.
Для начала я отвязал информацию о состоянии городского склада от названия города и перенес ее в левый верхний угол. Плюс добавил к ней иконку склада. Одновременно на освободившееся место рядом с названием города перенес данные об "очках рождаемости". Для них это самое подходящее место. В итоге получилось так:
Пока не идеально, но мне кажется выглядит уже поприличнее. Этот вариант работает стабильно и вылетов нет. Но нет и подсказки при наведении мышки на данные склада (зеленые цифры и иконка). А хотелось бы!
Для того, чтобы эта подсказка появилась я подредактировал пять файлов. Ниже я привожу новые участки кода, плюс строки до и после них, чтобы было ясно куда конкретно я внес добавления.
1. В CvEnums.h добавил
2. В CyEnumsInterface.cpp:Код:WIDGET_HELP_POPULATION, //KJ Warehouse START WIDGET_HELP_WAREHOUSE, //KJ Warehouse END WIDGET_HELP_REBEL
3. В CvDLLWidgetData.h:Код:.value("WIDGET_HELP_POPULATION", WIDGET_HELP_POPULATION) //KJ Warehouse START .value("WIDGET_HELP_WAREHOUSE", WIDGET_HELP_WAREHOUSE) //KJ Warehouse END .value("WIDGET_HELP_REBEL", WIDGET_HELP_REBEL)
4. В CvDLLWidgetData.cpp:Код:void parsePopulationHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer); //KJ Warehouse START void parseWarehouseHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer); //KJ Warehouse END void parseRebelHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer);
иКод:case WIDGET_HELP_POPULATION: parsePopulationHelp(widgetDataStruct, szBuffer); break; //KJ Warehouse START case WIDGET_HELP_WAREHOUSE: parseWarehouseHelp(widgetDataStruct, szBuffer); break; //KJ Warehouse END case WIDGET_HELP_REBEL: parseRebelHelp(widgetDataStruct, szBuffer); break;
5. CvDLLWidgetData.h:Код:void CvDLLWidgetData::parsePopulationHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer) { CvCity* pHeadSelectedCity; pHeadSelectedCity = gDLL->getInterfaceIFace()->getHeadSelectedCity(); if (pHeadSelectedCity != NULL) { // szBuffer.assign(gDLL->getText("TXT_KEY_MISC_FOOD_THRESHOLD", pHeadSelectedCity->getFood(), pHeadSelectedCity->growthThreshold())); //original, closed by KJ szBuffer.assign(gDLL->getText("TXT_KEY_MISC_BIRTHPOINTS_THRESHOLD", pHeadSelectedCity->getBirthPoints(), pHeadSelectedCity->currentBirthPoints(), pHeadSelectedCity->growthThreshold())); //KJ addon } } //KJ Warehouse START void CvDLLWidgetData::parseWarehouseHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer) { CvCity* pHeadSelectedCity; pHeadSelectedCity = gDLL->getInterfaceIFace()->getHeadSelectedCity(); if (pHeadSelectedCity != NULL) { szBuffer.assign(gDLL->getText("TXT_KEY_MISC_WAREHOUSE", pHeadSelectedCity->getTotalYieldStored(), pHeadSelectedCity->getMaxYieldCapacity())); } } //KJ Warehouse END void CvDLLWidgetData::parseRebelHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer) { if (widgetDataStruct.m_iData1 == 1) { CvCity* pHeadSelectedCity = gDLL->getInterfaceIFace()->getHeadSelectedCity(); if (pHeadSelectedCity != NULL) { szBuffer.assign(gDLL->getText("TXT_KEY_MISC_REBEL_HELP", pHeadSelectedCity->getRebelPercent())); } } else { szBuffer.assign(gDLL->getText("TXT_KEY_MISC_REBEL_HELP", GET_TEAM(GC.getGameINLINE().getActiveTeam()).getRebelPercent())); } }
Компилируем без ошибок, запускаем мод тоже без проблем. А дальше начинается какая-то мистика.Код:void parsePopulationHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer); //KJ Warehouse START void parseWarehouseHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer); //KJ Warehouse END void parseRebelHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer);
Если я работаю мышкой и после наведения ею на кнопку "Continue" я получаю немедленный вылет на десктоп.
Если же я использую клавиатуру и просто нажимаю на этом экране кнопку "Enter", то могу спокойно продолжать игру.
Итак, стоим город, селим в нем пару жителей. Верхняя часть экрана после небольшого редактирования теперь выглядит так:
Я оставил только данные об изменении запасов на складе за ход. Все остальное - а именно текущее наполнение склада и его максимальная емкость - перемещены в подсказку.
Когда склад пополняется, это выглядит так
Когда склад опорожняется, так:
Можно конечно радоваться, ибо это именно тот вариант, что мне хотелось бы иметь, но на выходе меня ждут вторые грабли.
Снова, как и в случае с кнопкой "Continue", стоит мне навести курсор мыши на кнопку "Exit", следует моментальный вылет на десктоп.
И опять же, если выходить с городского экране не мышкой, а с помощью клавиатуры (кнопка "Esc"), то вылета нет и можно спокойно продолжать игру.
Лично я с таким встречаюсь впервые. Вчера весь вечер потратил на поиск этих "граблей", но так и не нашел.
WIDGET_HELP_WAREHOUSE прописал в кодах правильно, остальное тоже вроде бы все нормально. В конце концов весь с клавиатурой все же работает именно так, как и должно быть! А лишь при наведении мышькой на кнопки "Continue" и "Exit" следует немедленный вылет. Почему?











Ответить с цитированием