Итак, на днях я успешно синхронизировал данные о статике на клиенте и сервере (там, правда еще делать дофига). Этот плагин так или иначе будет доступен на гугль коде чуть позже, когда косяки поправлю... Сейчас-же я хотел поговорить о комплексном плагине работы с картами.

Итак... Пока-что "хотелки":
1) Количество карт не ограниченно (ладно, ограниченно... 256, допустим).
2) Размеры карт не ограниченны (Ну опять, протокол смотреть надо, хотя и это обходится).
3) Изменение карты на лету с сервера.

Архитектура такая:
1) Во время инита говорим клиенту что у него только 2 карты размером 384*384 (128*3, дальше понятно будет почему)...
2) Размер статики под эти карты... 27Кб под индексы, 4,7Мб под данные (32 айтема в каждом тайле. Если учесть что там вообще обычно пусто - это до жопы). А... Умножить на 2... Короче 10Мб на все.

Алгоритм:
Вся карта не грузится в АП клиента. Грузится только ее часть через маппинг памяти внутри MapViewOfFile. Фактически я делаю 2 буфера... Один под карту, которая есть сейчас. Другой под карту, на которую будет прыжок при смене карты.

Внутри одной-же карты происходит следующее... Пользователь ходит внутри блока тайлов... Как только он приближается к границе во вторую карту грузится новая порция текущей карты и происходит смена карты (все мобы и т.д. переезжают на новую карту). Фактически таким путем можно делать бесконечную карту чего угодно...

Трудности понятны... Постоянно помнить всех мобов и серверную статику, которые видны клиенту, все это правильно пересчитывать и прочее.

Плюсы - адресное пространство разгружено и нету проблемы 2-х Гб.
Вверх