Есть открыто-свободная игра на C++. Есть года 2 как неактивный патчсет. Я пытаюсь его перенести на последнюю версию движка, но почему-то не получается объявить переменную.
В патченном есть строка, которая теперь не компилируется:
getTileEngine()->calculateUnitLighting();
void TileEngine::calculateUnitLighting(GraphSubset gs)
GraphSubset объявляется как структура из 4 целых, но с кучей функций GraphSubset() внутри:
namespace OpenXcom
{
struct GraphSubset
{
int beg_x, end_x;
int beg_y, end_y;
GraphSubset(int max_x, int max_y):
beg_x(0), end_x(max_x),
beg_y(0), end_y(max_y)
{
}
GraphSubset(std::pair<int, int> range_x, std::pair<int, int> range_y):
beg_x(range_x.first), end_x(range_x.second),
beg_y(range_y.first), end_y(range_y.second)
{
}
GraphSubset(const GraphSubset& r):
beg_x(r.beg_x), end_x(r.end_x),
beg_y(r.beg_y), end_y(r.end_y)
{
}
inline GraphSubset offset(int x, int y) const
{
GraphSubset ret = *this;
ret.beg_x += x;
ret.end_x += x;
ret.beg_y += y;
ret.end_y += y;
return ret;
}
inline int size_x() const
{
return end_x - beg_x;
}
inline int size_y() const
{
return end_y - beg_y;
}
/* половина функций вырезана */
};
}//namespace OpenXcom
При попытках объявить переменную типа GraphSubset получаю ошибку о неверном числе параметров — похоже это воспринимается как вызов одной из функций GraphSubset().
Объявление calculateUnitLighting: TileEngine.h, TileEngine.cpp. Объявление GraphSubset: GraphSubset.h.
В том же TileEngine.cpp есть функция
GraphSubset mapArea(Position position, int radius)
namespace OpenXcom
{
namespace
{
/* много пропущено */
GraphSubset mapArea(Position position, int radius)
{
return { std::make_pair(position.x - radius, position.x + radius + 1), std::make_pair(position.y - radius, position.y + radius + 1) };
}
} // namespace
Вопрос: как вызвать эту функцию calculateUnitLighting() с параметром GraphSubset?
Ответ: mapArea — в анонимном пространстве имён, поэтому проще всего её повторить при создании экземпляра GraphSubset.
GraphSubset t1 =
GraphSubset(
std::make_pair( target.x - horiz_dist, target.x + horiz_dist + 1 ),
std::make_pair( target.y - horiz_dist, target.y + horiz_dist + 1 ) );