(→Слои генерации: карта шума фикс ссылки) |
|||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 2: | Строка 2: | ||
<div class="mw-parser-output"> | <div class="mw-parser-output"> | ||
<div class="mw-parser-output"> | <div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"><div class="mw-parser-output"> | ||
== Загрузка == | == Загрузка == | ||
Строка 11: | Строка 12: | ||
|- | |- | ||
| '''2''' | | '''2''' | ||
− | | [https:// | + | | [https://raw.githubusercontent.com/mineprogramming/APO_craft/d93907979d4113ec9d05da892502eee27264a848/lib/dimensions.js Скачать] |
| Фикс ошибки получения координат в функции генерации чанка (by IchZerowan) | | Фикс ошибки получения координат в функции генерации чанка (by IchZerowan) | ||
|} | |} | ||
+ | </div> </div> | ||
== Подключение == | == Подключение == | ||
Строка 92: | Строка 94: | ||
<div class="mw-parser-output"><div class="mw-highlight mw-content-ltr" dir="ltr">Рассмотрим каждую часть кода подробнее:</div> </div> <div class="mw-parser-output"> | <div class="mw-parser-output"><div class="mw-highlight mw-content-ltr" dir="ltr">Рассмотрим каждую часть кода подробнее:</div> </div> <div class="mw-parser-output"> | ||
*range - диапазон высоты, в котором работает генерация. В данном примере ландшафт будет генерироваться на высоте 0-80 блоков. Единственный обязательный параметр. | *range - диапазон высоты, в котором работает генерация. В данном примере ландшафт будет генерироваться на высоте 0-80 блоков. Единственный обязательный параметр. | ||
− | *noise - описание [https://ru.wikipedia.org/wiki/Шум_Перлина шума Перлина ], лежащего в основе генерации Подробнее в разделе [https://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/Dimensions#D0.9A.D0.B0.D1.80.D1.82.D1.8B_.D1.88.D1.83.D0.BC.D0.B0 Карты шума]. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться. | + | *noise - описание [https://ru.wikipedia.org/wiki/Шум_Перлина шума Перлина ], лежащего в основе генерации Подробнее в разделе [https://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/Dimensions#.D0.9A.D0.B0.D1.80.D1.82.D1.8B_.D1.88.D1.83.D0.BC.D0.B0 Карты шума]. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться. |
*heights - сродни noise, но накладывается поверх шума. Имеет такой же формат. Используется для генерации мелких биомов (речки, горы) <div class="mceNonEditableOverlay"> </div> | *heights - сродни noise, но накладывается поверх шума. Имеет такой же формат. Используется для генерации мелких биомов (речки, горы) <div class="mceNonEditableOverlay"> </div> | ||
*gradient - описание функции [https://ru.wikipedia.org/wiki/Градиент градиента ], которая будет применена к шуму. Отвечает за то, как примерно будет выглядеть ландшафт. Задается в виде набора точек. Между точками интерполируется (соединяется плавной кривой). | *gradient - описание функции [https://ru.wikipedia.org/wiki/Градиент градиента ], которая будет применена к шуму. Отвечает за то, как примерно будет выглядеть ландшафт. Задается в виде набора точек. Между точками интерполируется (соединяется плавной кривой). |
Для подключения данной библиотеки используется следующая строка:
IMPORT("dimensions");
Для генерации измерения используется объектDimension. В конструктор передаются параметры, связанные с измерением в следующем формате:
var dim007 = new Dimension({
name: "dim007", // Название измерения
generation: { //Генерация
layers: [
//Слои генерации
],
decoration: {
}
},
environment: {
},
callbacks: {
// Основные коллбеки измерения
// Здесь приведены все коллбеки измерений, ненужные можно опустить.
tick: function() {
},
generateChunk: function(chunkX, chunkZ) {
// Генерация чанка
},
loaded: function() {
// Загрузка измерения
},
unloaded: function() {
// Выгрузка измерения
}
});
Основной единицей генерации является слой. Слоев может быть несколько и каждый из них отвечает за отдельную часть генерации ландшафта: различные биомы, слой бедрока, метеориты, парящие в воздухе. Каждый слой представляет из себя json-объект следующего содержания:
{
range: [0, 80],
noise: {
octaves: {
count: 4,
weight: 0.6,
scale: [1, 0.4, 1]
}
},
gradient: [[-1, 0.8], [-0.6, 0.5], [-0.2, 0.2], [0.2, 0.9], [0.6, 0.7], [1, 0.1]],
terrain: {
base: 1,
cover: {
height: 4,
top: 2,
block: 3
},
}
},
Как уже было сказано выше, генерация поверхности происходит по принципу шума Перлина. Подробную информацию о нем можно найти здесь .Каждая карта состоит из октав. Октавы - шум разного масштаба. Подробнее в той же статье.
В библиотеке dimensions октавы для генерации (octaves) задаются двумя способами: одним объектом описания для программной генерации нескольких октав или массивом описаний отдельных октав. Начнем с первого случая, при этом поля у объекта октав будут следующие:
Всему шуму (не отдельным октавам) также можно задавать следующие параметры:
Объект environment предлагает инструменты для настройки среды, а именно цвета неба и туман. Может содержать следующие поля:
Результатом создания нового измерения будет объект Dimension. От будет использоваться для дальнейшей работы с измерением и имеет для этого следующие методы:
Следующие два метода слишком важны, чтобы оставить их в списке наравне с остальными, поскольку позволяют ускорить процесс отладки генерации в разы. stride в обоих случаях показывает, сколько блоков будет соответствовать одному пикселю битмапы:
Объект PortalRegistry позволяет создавать и управлять блоками порталов с их анимациями.
Для создания нового блока порталда используется метод newPortalBlock. Он принимает следующие аргументы:
PortalRegistry.RENDER_TYPE_FULL = "full";
PortalRegistry.RENDER_TYPE_VERTICAL_PLANE = "v-plane";
PortalRegistry.RENDER_TYPE_HORIZONTAL_PLANE = "h-plane";
PortalRegistry.RENDER_TYPE_UNIVERSAL_PLANE = "u-plane";