-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
161 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,3 +5,4 @@ | |
:maxdepth: 2 | ||
|
||
mails | ||
map |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
Карта мира и работа с ней | ||
========================= | ||
|
||
На этой странице в общих чертах описывается техническое устройство карты мира. | ||
|
||
Карта изменяется раз в час под влиянием параметров, задаваемых действиями игроков, и своего предыдущего состояния. | ||
|
||
Карта всегда представляется клеточным полем. | ||
|
||
Весь код (кроме низкоуровневого моделирования ландшафта) можно найти: | ||
|
||
- Python: `модуль the_tale.game.map <https://github.com/the-tale/the-tale/tree/develop/src/the_tale/the_tale/game/map>`_. | ||
- JavaScript `модуль map2.js <https://github.com/the-tale/the-tale/blob/develop/src/the_tale/the_tale/static/game/map/map2.js>`_ | ||
|
||
Уровни формирования карты | ||
------------------------- | ||
|
||
Формирование карты можно разбить на несколько уровней, на каждом из которых она обрабатывается особым образом. | ||
|
||
- Моделирование базовых параметров мира. | ||
- Выделение биомов — узнаваемых типов ландшафта, которые лучше всего соответствуют параметрам клетки карты (горы, джунгли, равнина, etc.). | ||
- Фомирование схемы тайлового отображения карты — именно эта схема отдаётся браузеру и по ней рисуется карта. | ||
- Отображение карты браузером. | ||
|
||
Моделирование параметров мира | ||
----------------------------- | ||
|
||
Моделирование карты осуществляется отдельной библиотекой :ref:`deworld <deworld_project>`: | ||
|
||
- github: https://github.com/the-tale/deworld | ||
- :ref:`немного документации <deworld_project>` | ||
|
||
Моделируется несколько базовых параметров (высота, температура, растительность, etc.) с учётом влияния игровых объектов. | ||
|
||
На выходе этого этапа карта представлена набором слоёв, с нормированными величинами каждого параметра (например, температуры). | ||
|
||
Игровые объекты влияют на эти параметры, задавая «точки влияния». Кажая точка описывается: | ||
|
||
- координатами клетки на карте; | ||
- описанием области, на которую распространяются изменения; | ||
- слоем, который она изменяет; | ||
- величиной и правилами изменения параметра слоя. | ||
|
||
Описание «точек влияния» можно найти в `исходниках игры <https://github.com/the-tale/the-tale/blob/develop/src/the_tale/the_tale/game/map/generator/power_points.py>`_. | ||
|
||
Также, по этим данным формируется текстовое описание клетки. `Исходный код <https://github.com/the-tale/the-tale/blob/develop/src/the_tale/the_tale/game/map/generator/descriptors.py>`_. | ||
|
||
Выделение биомов | ||
---------------- | ||
|
||
Поскольку реализовать отображение карты для всех возможных сочетаний параметров сложно, у нас выделено несколько выделяющихся типов ландшафта, которые мы называем биомами. | ||
|
||
Для каждой клетки карты биом выбирается по следующему алгоритму: | ||
|
||
- Пространство значений каждого параметра бьётся на интервалы (например, влажность, измеряемая от 0 до 1 бьётся, на 10 интервалов с шагом 0.1). | ||
- Для каждого сочетания биома с интервалом значения в балансе игры прописано количество «очков», которое биом получит, если значение параметра в клетке попадает в интервал. | ||
- Для каждого биома считается сумма очков всех параметров клетки. | ||
- Биомом клетки выбирается биом с максимальным количеством очков. | ||
|
||
`Файл с очками биомов <https://github.com/the-tale/the-tale/blob/develop/src/the_tale/the_tale/game/map/fixtures/bioms.xls>`_ | ||
|
||
Фомирование схемы отображения карты | ||
----------------------------------- | ||
|
||
Данных о биомах и объектах карты уже хватило бы, чтобы нарисовать её в клиентах игры. Но, чтобы упростить реализацию новых клиентов, мы делаем предобработку данных карты. | ||
|
||
В итоге клиенту возвращается двухмерный массив. В каждой клетке массива находится список идентификаторов спрайтов, которые нужно отобразить и угол их поворота. Спрайты указаны в порядке отрисовки. | ||
|
||
Получение карты и её формат описаны :ref:`документации нашего API <external_api__region>`. | ||
|
||
Отображение карты клиентом | ||
-------------------------- | ||
|
||
Клиенту остаётся получить инструкцию по отрисовке карты и исполнить её. | ||
|
||
- `Python код с отрисовкой карыт <https://github.com/the-tale/the-tale/blob/develop/src/the_tale/the_tale/game/map/management/commands/map_visualize_region.py>`_ | ||
- `Javascript код с отрисовко карты <https://github.com/the-tale/the-tale/blob/develop/src/the_tale/the_tale/static/game/map/map2.js>`_ | ||
|
||
Обновление карты на сервере | ||
--------------------------- | ||
|
||
Для обновления карты на сервере есть отдельная команда. | ||
|
||
.. code-block: bash | ||
django-admin map_update_map --settings the_tale.settings |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters