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
},
}
},
Рассмотрим каждую часть кода подробнее:
- range - диапазон высоты, в котором работает генерация. В данном примере ландшафт будет генерироваться на высоте 0-80 блоков. Единственный обязательный параметр.
- noise - описание шума Перлина , лежащего в основе генерации Подробнее в разделе [#h3sjgmm4cjj1vj7gh5ho77941crzwlb Карты шума]. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться.
- heights - сродни noise, но накладывается поверх шума. Имеет такой же формат. Используется для генерации мелких биомов (речки, горы)
- gradient - описание функции градиента , которая будет применена к шуму. Отвечает за то, как примерно будет выглядеть ландшафт. Задается в виде набора точек. Между точками интерполируется (соединяется плавной кривой).
- terrain - настройки блоков нашей генерации, могут содержать следующее:
- base - блок, служащий основанием для генерации. В данном случае, камень. Можно указать как id и дату (в виде массива из двух элементов либо объекта с полями id, deata), так и просто id.
- cover - слои блоков, покрывающих генерацию сверху (в нормальной генерации мира это земля и трава). Объект cover имеет три поля: height - высота верхнего слоя, block - основной блок покрытия, top - самый верхний слой. Все блоки задаются таким же образом, как и base.
- filling - параметры заполнения пустот в генерации чем-либо. Пример - вода в обычном мире и лава в нижнем. Объект состоит из полей height - высота, до которой будет заполнен слой, и block - непосредственно сам блок, которым производится заполнение.
Карты шума
Как уже было сказано выше, генерация поверхности происходит по принципу шума Перлина. Подробную информацию о нем можно найти здесь .Каждая карта состоит из октав. Октавы - шум разного масштаба. Подробнее в той же статье.
В библиотеке dimensions октавы для генерации (octaves) задаются двумя способами: одним объектом описания для программной генерации нескольких октав или массивом описаний отдельных октав. Начнем с первого случая, при этом поля у объекта октав будут следующие:
- count - количество октав. Чем больше октав, тем мельче и труднопроходимее будет рельеф. Чаще всего используют 4 октавы.
- weight - ?
- scale - ?
- mt - ?
- mw - ?
Всему шуму (не отдельным октавам) также можно задавать следующие параметры:
- gradient - градиент для данной карты шума.
- seed - зерно генерации (сид).
-
При создании карты шума отдельными октавами (octaves - массив), каждая октава будет иметь следующие параметры:
- weight -?
- offset -?
- scale -?
Environment
Объект environment предлагает инструменты для настройки среды, а именно цвета неба и туман. Может содержать следующие поля:
- sky - цвет неба, задается массивом из трех составляющих RGB (от 0 до 1), каждая из которых может быть как значением, так и массивом из двух значений для более тонкой настройки цветов.
- fog - цвет тумана, имеет аналогичный sky массив описания.
Объект 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 (вид сбоку).