Dimensions — различия между версиями

(Слои генерации)
 
(не показано 7 промежуточных версий 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>
  
<syntaxhighlight lang="Javascript">IMPORT("dimensions");</syntaxhighlight>
+
== Генерация ==
  
==Генерация==
 
 
Для генерации измерения используется объект<span><span class="fctbNone">Dimension. В конструктор передаются параметры, связанные с измерением в следующем формате:</span></span>
 
Для генерации измерения используется объект<span><span class="fctbNone">Dimension. В конструктор передаются параметры, связанные с измерением в следующем формате:</span></span>
  
<span><span class="fctbNone"><syntaxhighlight lang="Javascript">
+
&nbsp;
 +
<syntaxhighlight lang="Javascript">
 
var dim007 = new Dimension({
 
var dim007 = new Dimension({
 
     name: "dim007", // Название измерения
 
     name: "dim007", // Название измерения
Строка 46: Строка 66:
 
         }
 
         }
 
});
 
});
</syntaxhighlight></span></span>
+
</syntaxhighlight>
===Слои генерации===
+
 
 +
<div class="mw-parser-output"><div class="mw-parser-output">
 +
=== Слои генерации ===
 +
 
 
Основной единицей генерации является слой. Слоев может быть несколько и каждый из них отвечает за отдельную часть генерации ландшафта: различные биомы, слой бедрока, метеориты, парящие в воздухе. Каждый слой представляет из себя json-объект следующего содержания:
 
Основной единицей генерации является слой. Слоев может быть несколько и каждый из них отвечает за отдельную часть генерации ландшафта: различные биомы, слой бедрока, метеориты, парящие в воздухе. Каждый слой представляет из себя json-объект следующего содержания:
 
<syntaxhighlight lang="Javascript">{  
 
<syntaxhighlight lang="Javascript">{  
Строка 68: Строка 91:
 
         },
 
         },
 
     }
 
     }
},</syntaxhighlight><div class="mw-parser-output"><div class="mw-highlight mw-content-ltr" dir="ltr"></div><div class="mw-highlight mw-content-ltr" dir="ltr">Рассмотрим каждую часть кода подробнее:</div></div><div class="mw-parser-output">
+
},</syntaxhighlight>
* range - диапазон высоты, в котором работает генерация. В данном примере ландшафт будет генерироваться на высоте 0-80 блоков. Единственный обязательный параметр.
+
<div class="mw-parser-output"><div class="mw-highlight mw-content-ltr" dir="ltr">Рассмотрим каждую часть кода подробнее:</div> </div> <div class="mw-parser-output">
* noise - описание [https://ru.wikipedia.org/wiki/Шум_Перлина шума Перлина ], лежащего в основе генерации Подробнее в разделе [#h3sjgmm4cjj1vj7gh5ho77941crzwlb Карты шума]. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться.
+
*range - диапазон высоты, в котором работает генерация. В данном примере ландшафт будет генерироваться на высоте 0-80 блоков. Единственный обязательный параметр.  
* heights - сродни noise, но накладывается поверх шума. Имеет такой же формат. Используется для генерации мелких биомов (речки, горы)<div class="mceNonEditableOverlay">
+
*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 Карты шума]. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться.  
* gradient - описание функции [https://ru.wikipedia.org/wiki/Градиент градиента ], которая будет применена к шуму. Отвечает за то, как примерно будет выглядеть ландшафт. Задается в виде набора точек. Между точками интерполируется (соединяется плавной кривой).
+
*heights - сродни noise, но накладывается поверх шума. Имеет такой же формат. Используется для генерации мелких биомов (речки, горы) <div class="mceNonEditableOverlay">&nbsp;</div> 
* terrain - настройки блоков нашей генерации, могут содержать следующее:
+
*gradient - описание функции [https://ru.wikipedia.org/wiki/Градиент градиента ], которая будет применена к шуму. Отвечает за то, как примерно будет выглядеть ландшафт. Задается в виде набора точек. Между точками интерполируется (соединяется плавной кривой).  
** base - блок, служащий основанием для генерации. В данном случае, камень. Можно указать как id и дату (в виде массива из двух элементов либо объекта с полями id, deata), так и просто id.
+
*terrain - настройки блоков нашей генерации, могут содержать следующее:  
** cover - слои блоков, покрывающих генерацию сверху (в нормальной генерации мира это земля и трава). Объект cover имеет три поля: height - высота верхнего слоя, block - основной блок покрытия, top - самый верхний слой. Все блоки задаются таким же образом, как и base.
+
**base - блок, служащий основанием для генерации. В данном случае, камень. Можно указать как id и дату (в виде массива из двух элементов либо объекта с полями id, deata), так и просто id.  
** filling - параметры заполнения пустот в генерации чем-либо. Пример - вода в обычном мире и лава в нижнем. Объект состоит из полей height - высота, до которой будет заполнен слой, и block - непосредственно сам блок, которым производится заполнение.
+
**cover - слои блоков, покрывающих генерацию сверху (в нормальной генерации мира это земля и трава). Объект cover имеет три поля: height - высота верхнего слоя, block - основной блок покрытия, top - самый верхний слой. Все блоки задаются таким же образом, как и base.  
</div>
+
**filling - параметры заполнения пустот в генерации чем-либо. Пример - вода в обычном мире и лава в нижнем. Объект состоит из полей height - высота, до которой будет заполнен слой, и block - непосредственно сам блок, которым производится заполнение.  
 +
</div> <div class="mceNonEditableOverlay">&nbsp;</div> </div> </div>
  
</div>
+
=== Карты шума ===
  
<div class="mceNonEditableOverlay"></div>
 
 
===Карты шума===
 
 
Как уже было сказано выше, генерация поверхности происходит по принципу шума Перлина. Подробную информацию о нем можно найти [https://habr.com/post/265775/ здесь ].Каждая карта состоит из октав. Октавы - шум разного масштаба. Подробнее в той же статье.
 
Как уже было сказано выше, генерация поверхности происходит по принципу шума Перлина. Подробную информацию о нем можно найти [https://habr.com/post/265775/ здесь ].Каждая карта состоит из октав. Октавы - шум разного масштаба. Подробнее в той же статье.
  
 
В библиотеке dimensions октавы для генерации (octaves) задаются двумя способами: одним объектом описания для программной генерации нескольких октав или массивом описаний отдельных октав. Начнем с первого случая, при этом поля у объекта октав будут следующие:
 
В библиотеке dimensions октавы для генерации (octaves) задаются двумя способами: одним объектом описания для программной генерации нескольких октав или массивом описаний отдельных октав. Начнем с первого случая, при этом поля у объекта октав будут следующие:
* count - количество октав. Чем больше октав, тем мельче и труднопроходимее будет рельеф. Чаще всего используют 4 октавы.
+
 
* weight - ?
+
*count - количество октав. Чем больше октав, тем мельче и труднопроходимее будет рельеф. Чаще всего используют 4 октавы.  
* scale - ?
+
*weight -&nbsp;?  
* mt - ?
+
*scale -&nbsp;?  
* mw - ?
+
*mt -&nbsp;?  
 +
*mw -&nbsp;?  
 +
 
 
Всему шуму (не отдельным октавам) также можно задавать следующие параметры:
 
Всему шуму (не отдельным октавам) также можно задавать следующие параметры:
* gradient - градиент для данной карты шума.
 
* seed - зерно генерации (сид).
 
*:
 
<p class="mw_paragraph">
 
<div style="display: inline !important;">При создании карты шума отдельными октавами (octaves - массив), каждая октава будет иметь следующие параметры:<div class="mw-parser-output"><ul><li>weight -?</li><li>offset -?</li><li>scale -?</li></ul>
 
<h3>Environment</h3>Объект environment предлагает инструменты для настройки среды, а именно цвета неба и туман. Может содержать следующие поля:
 
<ul><li>sky - цвет неба, задается массивом из трех составляющих RGB (от 0 до 1), каждая из которых может быть как значением, так и массивом из двух значений для более тонкой настройки цветов.</li><li>fog - цвет тумана, имеет аналогичный sky массив описания.</li></ul></div></div>
 
  
==Объект Dimensions и его методы==
+
*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. От будет использоваться для дальнейшей работы с измерением и имеет для этого следующие методы:
 
Результатом создания нового измерения будет объект Dimension. От будет использоваться для дальнейшей работы с измерением и имеет для этого следующие методы:
  
* setupGeneration(description) - ?
+
*setupGeneration(description) -&nbsp;?  
* setupTransfer(description) - ?
+
*setupTransfer(description) -&nbsp;?  
* setupEnvironment(description) - ?
+
*setupEnvironment(description) -&nbsp;?  
* setupCallbacks(callbacks) - устанавливает коллбеки в формате, описанном выше.
+
*setupCallbacks(callbacks) - устанавливает коллбеки в формате, описанном выше.  
* getName() - возвращает имя измерения, заданное при его создании.
+
*getName() - возвращает имя измерения, заданное при его создании.  
* getId() - получает уникальное id биома.
+
*getId() - получает уникальное id биома.  
* getWrappedObject() - получает лежащий в основе библиотеки java-объект CustomDimention.
+
*getWrappedObject() - получает лежащий в основе библиотеки java-объект CustomDimention.  
* getRegion() - ?
+
*getRegion() -&nbsp;?  
* getTeleporter() - возвращает телепортер из обічного мира в измерение.
+
*getTeleporter() - возвращает телепортер из обічного мира в измерение.  
* getTeleporterBack() - возвращает телепортер из измерения в обычный мир.
+
*getTeleporterBack() - возвращает телепортер из измерения в обычный мир.  
* getAllTeleporters() - возвращает массив из getTeleporter() и getTeleporterBack().
+
*getAllTeleporters() - возвращает массив из getTeleporter() и getTeleporterBack().  
* transferTo(tp) - переносит вас в место, заданное телепортером tp.
+
*transferTo(tp) - переносит вас в место, заданное телепортером tp.  
* transferIn() - переносит игрока в измерение.
+
*transferIn() - переносит игрока в измерение.  
* transferOut() - переносит игрока из измерения.
+
*transferOut() - переносит игрока из измерения.  
*:
+
*isInDimension() - проверяет, находинся ли игрок в данном измерении.  
* isInDimension() - проверяет, находинся ли игрок в данном измерении.
+
 
 
Следующие два метода слишком важны, чтобы оставить их в списке наравне с остальными, поскольку позволяют ускорить процесс отладки генерации в разы. stride в обоих случаях показывает, сколько блоков будет соответствовать одному пикселю битмапы:
 
Следующие два метода слишком важны, чтобы оставить их в списке наравне с остальными, поскольку позволяют ускорить процесс отладки генерации в разы. stride в обоих случаях показывает, сколько блоков будет соответствовать одному пикселю битмапы:
  
* debugTerrainMap(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу с видом на сгенерированный ландшафт сверху размером size*size.
+
*debugTerrainMap(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу с видом на сгенерированный ландшафт сверху размером size*size.  
* debugTerrainSlice(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу со срезом сгенерированного ландшафтавысотой size (вид сбоку).
+
*debugTerrainSlice(size, stride) - генерирует и показывает всплывающим окном при загрузке InnerCore битмапу со срезом сгенерированного ландшафтавысотой size (вид сбоку).  
 +
 
 +
== PortalRegistry ==
 +
 
 +
Объект&nbsp;PortalRegistry позволяет создавать и управлять блоками порталов с их анимациями.
 +
 
 +
Для создания нового блока порталда используется метод&nbsp;''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>

Текущая версия на 20:11, 7 августа 2020

Dimensions - библиотека, значительно упрощающая процесс создания измерений. В этой документации будут описаны ее основные возможности и функционал.

Загрузка[править]

Версия Ссылка Список изменений
2 Скачать Фикс ошибки получения координат в функции генерации чанка (by IchZerowan)

Подключение[править]

Для подключения данной библиотеки используется следующая строка:

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
        },
    }
},
Рассмотрим каждую часть кода подробнее:
  • range - диапазон высоты, в котором работает генерация. В данном примере ландшафт будет генерироваться на высоте 0-80 блоков. Единственный обязательный параметр.
  • noise - описание шума Перлина , лежащего в основе генерации Подробнее в разделе Карты шума. Таких шумов может несколько, в таком случае их следует записывать в виде массива и они будут накладываться.
  • 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 (вид сбоку).

PortalRegistry[править]

Объект PortalRegistry позволяет создавать и управлять блоками порталов с их анимациями.

Для создания нового блока порталда используется метод newPortalBlock. Он принимает следующие аргументы:

  • id - строковой id блока портала
  • texture - параметры текстуры в формате [name, data]
  • portal - объект типа Portal, возвращаемый метдом dimension..getPortal()
  • portalRenderParams - параметры рендера портала, имеет следующий формат:
    • frameId - ?
    • type - одна из следующих констант
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";