Редактирование:Dimensions

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
<div class="mw-parser-output">Dimensions - библиотека, значительно упрощающая процесс создания измерений. В этой документации будут описаны ее основные возможности и функционал.  
+
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>
 
  
== Генерация ==
+
<syntaxhighlight lang="Javascript">IMPORT("dimensions");</syntaxhighlight>
  
 +
==Генерация==
 
Для генерации измерения используется объект<span><span class="fctbNone">Dimension. В конструктор передаются параметры, связанные с измерением в следующем формате:</span></span>
 
Для генерации измерения используется объект<span><span class="fctbNone">Dimension. В конструктор передаются параметры, связанные с измерением в следующем формате:</span></span>
  
&nbsp;
+
<span><span class="fctbNone"><syntaxhighlight lang="Javascript">
<syntaxhighlight lang="Javascript">
 
 
var dim007 = new Dimension({
 
var dim007 = new Dimension({
 
     name: "dim007", // Название измерения
 
     name: "dim007", // Название измерения
Строка 62: Строка 42:
 
         },
 
         },
  
         unloaded: function() {
+
         loaded: function() {
 
             // Выгрузка  измерения
 
             // Выгрузка  измерения
 
         }
 
         }
 
});
 
});
</syntaxhighlight>
+
</syntaxhighlight></span></span>
 
+
===Слои генерации===
<div class="mw-parser-output"><div class="mw-parser-output">
 
=== Слои генерации ===
 
 
 
 
Основной единицей генерации является слой. Слоев может быть несколько и каждый из них отвечает за отдельную часть генерации ландшафта: различные биомы, слой бедрока, метеориты, парящие в воздухе. Каждый слой представляет из себя json-объект следующего содержания:
 
Основной единицей генерации является слой. Слоев может быть несколько и каждый из них отвечает за отдельную часть генерации ландшафта: различные биомы, слой бедрока, метеориты, парящие в воздухе. Каждый слой представляет из себя json-объект следующего содержания:
 
<syntaxhighlight lang="Javascript">{  
 
<syntaxhighlight lang="Javascript">{  
Строка 92: Строка 69:
 
     }
 
     }
 
},</syntaxhighlight>
 
},</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">&nbsp;</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">&nbsp;</div> </div> </div>
 
 
=== Карты шума ===
 
 
Как уже было сказано выше, генерация поверхности происходит по принципу шума Перлина. Подробную информацию о нем можно найти [https://habr.com/post/265775/ здесь ].Каждая карта состоит из октав. Октавы - шум разного масштаба. Подробнее в той же статье.
 
 
В библиотеке dimensions октавы для генерации (octaves) задаются двумя способами: одним объектом описания для программной генерации нескольких октав или массивом описаний отдельных октав. Начнем с первого случая, при этом поля у объекта октав будут следующие:
 
 
*count - количество октав. Чем больше октав, тем мельче и труднопроходимее будет рельеф. Чаще всего используют 4 октавы.
 
*weight -&nbsp;?
 
*scale -&nbsp;?
 
*mt -&nbsp;?
 
*mw -&nbsp;?
 
 
Всему шуму (не отдельным октавам) также можно задавать следующие параметры:
 
 
*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) -&nbsp;?
 
*setupTransfer(description) -&nbsp;?
 
*setupEnvironment(description) -&nbsp;?
 
*setupCallbacks(callbacks) - устанавливает коллбеки в формате, описанном выше.
 
*getName() - возвращает имя измерения, заданное при его создании.
 
*getId() - получает уникальное id биома.
 
*getWrappedObject() - получает лежащий в основе библиотеки java-объект CustomDimention.
 
*getRegion() -&nbsp;?
 
*getTeleporter() - возвращает телепортер из обічного мира в измерение.
 
*getTeleporterBack() - возвращает телепортер из измерения в обычный мир.
 
*getAllTeleporters() - возвращает массив из getTeleporter() и getTeleporterBack().
 
*transferTo(tp) - переносит вас в место, заданное телепортером tp.
 
*transferIn() - переносит игрока в измерение.
 
*transferOut() - переносит игрока из измерения.
 
*isInDimension() - проверяет, находинся ли игрок в данном измерении.
 
 
Следующие два метода слишком важны, чтобы оставить их в списке наравне с остальными, поскольку позволяют ускорить процесс отладки генерации в разы. stride в обоих случаях показывает, сколько блоков будет соответствовать одному пикселю битмапы:
 
 
*debugTerrainMap(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу с видом на сгенерированный ландшафт сверху размером size*size.
 
*debugTerrainSlice(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу со срезом сгенерированного ландшафтавысотой size (вид сбоку).
 
 
== PortalRegistry ==
 
 
Объект&nbsp;PortalRegistry позволяет создавать и управлять блоками порталов с их анимациями.
 
 
Для создания нового блока порталда используется метод&nbsp;''newPortalBlock''. Он принимает следующие аргументы:
 
  
*id - строковой id блока портала
+
Рассмотрим каждую часть кода подробнее:<ul><li class="mw_paragraph">range - диапазон высоты, в котором работает генерация. В данном примере ландшафт будет генерироваться на высоте 0-80 блоков. Единственный обязательный параметр.</li><li class="mw_paragraph">noise - описание [https://ru.wikipedia.org/wiki/Шум_Перлина шума Перлина], лежащего в основе генерации Подробнее в разделе [#h17sjgmldkil1on4brwi27i3pubts6s Карты шума]. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться.</li><li class="mw_paragraph">heights - сродни noise, но накладывается поверх шума. Имеет такой же формат. Используется для генерации мелких биомов (речки, горы)<div class="mw-parser-output"></div><div class="mceNonEditableOverlay"></div></li><li class="mw_paragraph">gradient - описание функции [https://ru.wikipedia.org/wiki/Градиент градиента], которая будет применена к шуму. Отвечает за то, как примерно будет выглядеть ландшафт. Задается в виде набора точек. Между точками интерполируется (соединяется плавной кривой).</li><li class="mw_paragraph"><br class="single_linebreak"/>​</li></ul><h3 class="mw_paragraph" id="h17sjgmldkil1on4brwi27i3pubts6s">Карты шума</h3>
*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>
 

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии GNU Free Documentation License 1.3 или более поздняя (см. Mineprogramming wiki:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!