Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Новичкам (http://mangos.ytdb.ru/forumdisplay.php?f=40)
-   -   Сетка Mangos (http://mangos.ytdb.ru/showthread.php?t=8042)

worldqq 24.05.2014 19:54

Сетка Mangos
 
Всем привет! Я занимаюсь изучением Mangos и не могу понять:
Mangos использует сетку для загрузки объектов в мирах клиентов, но я не могу определить:
1) Какого размера эта сетка?
2) Какой реальный размер одной ячейки в масштабе карты?
3) Размер сетки одинаков или зависит от размера карты?

Vladimir 25.05.2014 21:37

Все константы геометрии карты заданы в
src/game/GridDefines.h

условно размер считается в ярдах, но учитывая
(1 ярд = 0.9144 метра), можно и метрами обзывать

worldqq 26.05.2014 09:20

С размером сетки/ячейки я разобрался. Но как 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 центральной ячейки?


Vladimir 27.05.2014 15:18

Это вычисляется Cell к которой относится координата - карта порезана на 64x64 или меньше Grid-ов и каждый из них порезан еще на 8x8 Cell.

Grid - минимальная ячейка хранения и загрузки геометрии
Cell - минимальная ячейка обработки активности объектов в мире

worldqq 10.06.2014 09:10

Константы в src/game/GridDefines.h заданы такие же как и в клиенте?
И ещё: в какую сторону направлен X сетки мангоса?

Vladimir 11.06.2014 15:23

Кроме максимального размера карты остальное чисто серверные заморочки.
Сетка клиента как вы нарисовали в удаленном посте. Но координаты в файлах данных используют другие ориентации осей.

worldqq 11.06.2014 15:43

В удалённом посте я сетку не рисовал. То, что размер клетки - это "серверные заморочки" я не согласен, так как map файлы созданы на базе ADT файлов клиента.

Vladimir 11.06.2014 16:11

Вы там оси координат рисовали (я могу смотреть удаленные посты ;) )

worldqq 11.06.2014 16:49

Т.е Вы хотите сказать, что направление XY сетки совпадает с направлением XY координат wow?

Vladimir 11.06.2014 17:12

http://www.pxr.dk/wowdev/wiki/index.php?title=ADT/v18

worldqq 11.06.2014 17:24

А, ну это я читал. Но из этой инфы непонятно почему в названиях ADT файлов XY стоит обратном порядке по отношению к .map файлам.


Текущее время: 19:12. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS