Стандартный интерфейс — различия между версиями

(Стандартный интерфейс)
 
Строка 42: Строка 42:
 
     elements: {/* описание элементов */}
 
     elements: {/* описание элементов */}
 
}</syntaxhighlight>
 
}</syntaxhighlight>
 +
*Динамическое изменение шапки Gui при входе в мир. Например можно перевести название Gui.
 +
<syntaxhighlight lang="Javascript">
 +
var guiTest = new UI.StandartWindow({
 +
//...
 +
})
 +
Callback.addCallback("LevelLoaded", function(){
 +
    var header = guiTest.getWindow("header");
 +
    header.contentProvider.drawing[1].text = Translation.translate("Test Gui");
 +
});
 +
</syntaxhighlight>
  
 
=== Пример ===
 
=== Пример ===

Текущая версия на 13:49, 12 августа 2019

Стандартный интерфейс[править]

Самый простой в использовании и при этом эффективный и применимый в большинстве случаев.

Создается как объект класса UI.StandartWindow, которому может быть передан объект описания. Пример использования:

var testUiScreen = UI.StandartWindow({/* ... пустой объект описания ... */});
UI.testUI(testUiScreen); // откроет полностью пустой интерфейс

Для Callback'ов нужно вне Callback'а присваивать переменную, а сам запуск осуществлять вместо testUI -> openAs


Формат объекта описания стандартного типа интерфейса:

{
     standart: { // стандартные параметы, поддерживаемые данным типом интерфейса, позволяют быстро задавать базовые элементы, такие как заголовок, фон и инвентарь
          // если хотите определить какой то стандартный элемент, но оставить его без изменений, то пропишите там единственное значение - standart: true, например inventory: {standart: true} 
          header: { // задайте, если вам нужен заголовок, заголовок содержит кнопку закрытия
               text: { // обязательный параметр, если заголовок задан
                    text: "текст заголовка", // содержание текста, обязательный параметр
               },
​​​​​​​               font: {...}, // фонт текста, задайте, если хотите изменить стандартный
               color: цвет, // нужен только, если вы хотите изменить цвет заголовка
               frame: "текстура рамки", // нужно только, если вы хотите изменить текстуру рамки заголовка
               width: 80, // ширина заголовка в юнитах,
               height: 80, // высота заголовка в юнитах,
               hideButton: true, // задайте и установите значение на true, чтобы убрать кнопку закрытия окна интерфейса
          },
          inventory: { // для задания стандартного инвентаря используйте inventory: {standart: true} 
               width: 300, // ширина окна инвентаря 
               padding: 20, // паддинг окна инвентаря
          },
          background: { // для определения стандартного фона используйте background: {standart: true} 
               color: цвет, // задайте, если хотите изменить цвет фона
               bitmap: "текстура фона", // определите, если хотите добавить текстуру фона
               frame: "текстура рамки" // определите, если хотите добавить рамку
          },
          minHeight: 650, // если высота окна в юнитах меньше этого параметра, окно будет прокручиваться так, чтобы его внутренний размер составлял по высоте minHeight юнитов
     },
     params: {
          // стилизация (изменение стандартных текстур)
     },
     drawing: [/* элементы отрисовки фона */],
     elements: {/* описание элементов */}
}
  • Динамическое изменение шапки Gui при входе в мир. Например можно перевести название Gui.
var guiTest = new UI.StandartWindow({
//...
})
Callback.addCallback("LevelLoaded", function(){
    var header = guiTest.getWindow("header");
    header.contentProvider.drawing[1].text = Translation.translate("Test Gui");
});

Пример[править]

Как пример использован реальный интерфейс из таумкрафта (реактор аспектов).

Для того, чтобы пример работал, установите таумкрафт или скопируйте оттуда нужные текстуры интерфейса (которые используются в объекте описания интерфейса).

var aspectReactorGui = new UI.StandartWindow({
     standart: {
          header: {
               text: {
                    text: "Aspect reactor"
               },
               color: android.graphics.Color.rgb(0x47, 0x26, 0x0c),
               frame: "thaum_frame_header"
          },
          inventory: {
               standart: true
          },
          background: {
               bitmap: "thaum_background"
          },
          minHeight: 600
     },
     params: {
          textures: {
               slot: "thaum_slot",
               invSlot: "thaum_inv_slot",
               selection: "thaum_selection",
               closeButton: "thaum_close_button_up",
               closeButton2: "thaum_close_button_down",
               frame: "thaum_frame_default"
          }
     },
     drawing: [
          {type: "bitmap", x: 842, y: 104, bitmap: "aspect_scale_background", scale: 4},
          {type: "bitmap", x: 560, y: 100, bitmap: "aspect_reactor_background", scale: 360 / 128},
     ],
     elements: {
          "slot1": {type: "slot", x: 400, y: 100, size: 160},
          "slot2": {type: "slot", x: 400, y: 300, size: 160},
          "aspectScale": {type: "scale", x: 850, y: 120, direction: 1, scale: 8, value: 1, bitmap: "aspectScale_nitor", overlay: "aspect_scale_overlay_1", overlayScale: 4},
          "stateText": {type: "text", x: 625, y: 227, width: 90, height: 100, text: "", font: {color: android.graphics.Color.WHITE, shadow: .6, size: 25}}
     }
});
UI.testUI(aspectReactorGui); // тестовое открытие после создания
// добавляем созданный интерфейс нашему tile entity из прошлых глав
IDRegistry.genBlockID("testBlock");

// ...
// создаем блок
TileEntity.registerPrototype(BlockID.testBlock, {
     defaultValues: {
          someValue: 0 // сохраняемое значение someValue, по умолчанию 0
     },
     tick: function(){
          // что то сделать каждый тик, к примеру выводим someValue
          Debug.message(this.data.someValue);
     },
     click: function(id, count, data, coords){
          this.data.someValue = 1; // установить значение someValue на 1
     },
     getGuiScreen: function(){
          return aspectReactorGui; // при попытке открыть интерфейс, возвращаем наш объект интерфейса
     }
     // остальные события не трогаем
});