Admin (обсуждение | вклад) (Новая страница: «Dimensions - библиотека, значительно упрощающая процесс создания измерений. В этой документа…») |
|||
(не показана 21 промежуточная версия 2 участников) | |||
Строка 1: | Строка 1: | ||
− | Dimensions - библиотека, значительно упрощающая процесс создания измерений. В этой документации будут описаны ее основные возможности и функционал. | + | <div class="mw-parser-output">Dimensions - библиотека, значительно упрощающая процесс создания измерений. В этой документации будут описаны ее основные возможности и функционал. |
+ | <div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | == Загрузка == | ||
+ | |||
+ | {| border="1" cellpadding="1" cellspacing="1" | ||
+ | |- | ||
+ | | Версия | ||
+ | | Ссылка | ||
+ | | Список изменений | ||
+ | |- | ||
+ | | '''2''' | ||
+ | | [https://raw.githubusercontent.com/mineprogramming/APO_craft/d93907979d4113ec9d05da892502eee27264a848/lib/dimensions.js Скачать] | ||
+ | | Фикс ошибки получения координат в функции генерации чанка (by IchZerowan) | ||
+ | |} | ||
+ | </div> </div> | ||
+ | |||
+ | == Подключение == | ||
− | |||
Для подключения данной библиотеки используется следующая строка: | Для подключения данной библиотеки используется следующая строка: | ||
+ | <syntaxhighlight lang="Javascript">IMPORT("dimensions"); | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
− | + | == Генерация == | |
− | |||
Для генерации измерения используется объект<span><span class="fctbNone">Dimension. В конструктор передаются параметры, связанные с измерением в следующем формате:</span></span> | Для генерации измерения используется объект<span><span class="fctbNone">Dimension. В конструктор передаются параметры, связанные с измерением в следующем формате:</span></span> | ||
− | < | + | |
+ | <syntaxhighlight lang="Javascript"> | ||
+ | var dim007 = new Dimension({ | ||
+ | name: "dim007", // Название измерения | ||
+ | |||
+ | generation: { //Генерация | ||
+ | layers: [ | ||
+ | //Слои генерации | ||
+ | ], | ||
+ | |||
+ | decoration: { | ||
+ | |||
+ | } | ||
+ | }, | ||
+ | |||
+ | environment: { | ||
+ | |||
+ | }, | ||
+ | |||
+ | callbacks: { | ||
+ | // Основные коллбеки измерения | ||
+ | // Здесь приведены все коллбеки измерений, ненужные можно опустить. | ||
+ | tick: function() { | ||
+ | |||
+ | }, | ||
+ | |||
+ | generateChunk: function(chunkX, chunkZ) { | ||
+ | // Генерация чанка | ||
+ | }, | ||
+ | |||
+ | loaded: function() { | ||
+ | // Загрузка измерения | ||
+ | }, | ||
+ | |||
+ | unloaded: function() { | ||
+ | // Выгрузка измерения | ||
+ | } | ||
+ | }); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | === Слои генерации === | ||
+ | |||
+ | Основной единицей генерации является слой. Слоев может быть несколько и каждый из них отвечает за отдельную часть генерации ландшафта: различные биомы, слой бедрока, метеориты, парящие в воздухе. Каждый слой представляет из себя json-объект следующего содержания: | ||
+ | <syntaxhighlight lang="Javascript">{ | ||
+ | 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 | ||
+ | }, | ||
+ | } | ||
+ | },</syntaxhighlight> | ||
+ | <div class="mw-parser-output"><div class="mw-highlight mw-content-ltr" dir="ltr">Рассмотрим каждую часть кода подробнее:</div> </div> <div class="mw-parser-output"> | ||
+ | *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 Карты шума]. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться. | ||
+ | *heights - сродни noise, но накладывается поверх шума. Имеет такой же формат. Используется для генерации мелких биомов (речки, горы) <div class="mceNonEditableOverlay"> </div> | ||
+ | *gradient - описание функции [https://ru.wikipedia.org/wiki/Градиент градиента ], которая будет применена к шуму. Отвечает за то, как примерно будет выглядеть ландшафт. Задается в виде набора точек. Между точками интерполируется (соединяется плавной кривой). | ||
+ | *terrain - настройки блоков нашей генерации, могут содержать следующее: | ||
+ | **base - блок, служащий основанием для генерации. В данном случае, камень. Можно указать как id и дату (в виде массива из двух элементов либо объекта с полями id, deata), так и просто id. | ||
+ | **cover - слои блоков, покрывающих генерацию сверху (в нормальной генерации мира это земля и трава). Объект cover имеет три поля: height - высота верхнего слоя, block - основной блок покрытия, top - самый верхний слой. Все блоки задаются таким же образом, как и base. | ||
+ | **filling - параметры заполнения пустот в генерации чем-либо. Пример - вода в обычном мире и лава в нижнем. Объект состоит из полей height - высота, до которой будет заполнен слой, и block - непосредственно сам блок, которым производится заполнение. | ||
+ | </div> <div class="mceNonEditableOverlay"> </div> </div> </div> | ||
+ | |||
+ | === Карты шума === | ||
+ | |||
+ | Как уже было сказано выше, генерация поверхности происходит по принципу шума Перлина. Подробную информацию о нем можно найти [https://habr.com/post/265775/ здесь ].Каждая карта состоит из октав. Октавы - шум разного масштаба. Подробнее в той же статье. | ||
+ | |||
+ | В библиотеке dimensions октавы для генерации (octaves) задаются двумя способами: одним объектом описания для программной генерации нескольких октав или массивом описаний отдельных октав. Начнем с первого случая, при этом поля у объекта октав будут следующие: | ||
+ | |||
+ | *count - количество октав. Чем больше октав, тем мельче и труднопроходимее будет рельеф. Чаще всего используют 4 октавы. | ||
+ | *weight - ? | ||
+ | *scale - ? | ||
+ | *mt - ? | ||
+ | *mw - ? | ||
+ | |||
+ | Всему шуму (не отдельным октавам) также можно задавать следующие параметры: | ||
+ | |||
+ | *gradient - градиент для данной карты шума. | ||
+ | *seed - зерно генерации (сид). | ||
+ | <div style="display: inline !important;">При создании карты шума отдельными октавами (octaves - массив), каждая октава будет иметь следующие параметры: <div class="mw-parser-output"> | ||
+ | *weight -? | ||
+ | *offset -? | ||
+ | *scale -? | ||
+ | |||
+ | === Environment === | ||
+ | |||
+ | Объект environment предлагает инструменты для настройки среды, а именно цвета неба и туман. Может содержать следующие поля: | ||
+ | |||
+ | *sky - цвет неба, задается массивом из трех составляющих RGB (от 0 до 1), каждая из которых может быть как значением, так и массивом из двух значений для более тонкой настройки цветов. | ||
+ | *fog - цвет тумана, имеет аналогичный sky массив описания. | ||
+ | </div> </div> </div> | ||
+ | |||
+ | == Объект Dimensions и его методы == | ||
+ | |||
+ | Результатом создания нового измерения будет объект Dimension. От будет использоваться для дальнейшей работы с измерением и имеет для этого следующие методы: | ||
+ | |||
+ | *setupGeneration(description) - ? | ||
+ | *setupTransfer(description) - ? | ||
+ | *setupEnvironment(description) - ? | ||
+ | *setupCallbacks(callbacks) - устанавливает коллбеки в формате, описанном выше. | ||
+ | *getName() - возвращает имя измерения, заданное при его создании. | ||
+ | *getId() - получает уникальное id биома. | ||
+ | *getWrappedObject() - получает лежащий в основе библиотеки java-объект CustomDimention. | ||
+ | *getRegion() - ? | ||
+ | *getTeleporter() - возвращает телепортер из обічного мира в измерение. | ||
+ | *getTeleporterBack() - возвращает телепортер из измерения в обычный мир. | ||
+ | *getAllTeleporters() - возвращает массив из getTeleporter() и getTeleporterBack(). | ||
+ | *transferTo(tp) - переносит вас в место, заданное телепортером tp. | ||
+ | *transferIn() - переносит игрока в измерение. | ||
+ | *transferOut() - переносит игрока из измерения. | ||
+ | *isInDimension() - проверяет, находинся ли игрок в данном измерении. | ||
+ | |||
+ | Следующие два метода слишком важны, чтобы оставить их в списке наравне с остальными, поскольку позволяют ускорить процесс отладки генерации в разы. stride в обоих случаях показывает, сколько блоков будет соответствовать одному пикселю битмапы: | ||
+ | |||
+ | *debugTerrainMap(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу с видом на сгенерированный ландшафт сверху размером size*size. | ||
+ | *debugTerrainSlice(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу со срезом сгенерированного ландшафтавысотой size (вид сбоку). | ||
+ | |||
+ | == PortalRegistry == | ||
+ | |||
+ | Объект PortalRegistry позволяет создавать и управлять блоками порталов с их анимациями. | ||
+ | |||
+ | Для создания нового блока порталда используется метод ''newPortalBlock''. Он принимает следующие аргументы: | ||
− | + | *id - строковой id блока портала | |
+ | *texture - параметры текстуры в формате [name, data] | ||
+ | *portal - объект типа Portal, возвращаемый метдом ''dimension..getPortal()'' | ||
+ | *portalRenderParams - параметры рендера портала, имеет следующий формат: | ||
+ | **frameId - ? | ||
+ | **type - одна из следующих констант | ||
+ | <syntaxhighlight lang="Javascript">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"; | ||
+ | </syntaxhighlight> |
Для подключения данной библиотеки используется следующая строка:
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";