Тема: Сетка Mangos
Показать сообщение отдельно
Старый 26.05.2014, 09:20   #3
worldqq
Гость
 
Сообщений: n/a
По умолчанию

С размером сетки/ячейки я разобрался. Но как Mangos переводит XYZ в ярды – непонятно.
Вот тут начинается преобразование XY персонажа в CellPair:
Код:
void Map::MessageDistBroadcast(WorldObject const* obj, WorldPacket* msg, float dist)
{
    CellPair p = MaNGOS::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
Далее:
Код:
inline CellPair ComputeCellPair(float x, float y)
    {
        return Compute<CellPair, CENTER_GRID_CELL_ID>(x, y, CENTER_GRID_CELL_OFFSET, SIZE_OF_GRID_CELL);
    }
Далее:
Код:
template<class RET_TYPE, int CENTER_VAL>
    inline RET_TYPE Compute(float x, float y, float center_offset, float size)
    {
        // calculate and store temporary values in double format for having same result as same mySQL calculations
        double x_offset = (double(x) - center_offset) / size;
        double y_offset = (double(y) - center_offset) / size;

        int x_val = int(x_offset + CENTER_VAL + 0.5);
        int y_val = int(y_offset + CENTER_VAL + 0.5);
        return RET_TYPE(x_val, y_val);
    }
Всю суть преобразования я ещё не понял, но кое-что становится ясным:
Код:
double x_offset = (X персонажа - половина размера ячейки) / размер ячейки;
int x_val = int(x_offset + 512 + 0.5);
где 512 - CENTER_GRID_CELL_ID - ID центральной ячейки?

Последний раз редактировалось worldqq; 26.05.2014 в 10:35.
  Ответить с цитированием