(→Стандартный интерфейс) |
|||
Строка 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> | ||
=== Пример === | === Пример === |
Самый простой в использовании и при этом эффективный и применимый в большинстве случаев.
Создается как объект класса 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: {/* описание элементов */}
}
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; // при попытке открыть интерфейс, возвращаем наш объект интерфейса
}
// остальные события не трогаем
});