GUI. Часть 1. Общее представление.

GUIgraphical user interface, что переводится, как «графический интерфейс пользователя». Для чего он нужен в игре?
Для взаимодействия игрока с игрой и ее отдельными элементами. Графические интерфейсы бывают простыми (например меню редактирования триггера), сложными (например инвентарь или виртуальный арсенал) и даже трехмерными (когда используется 3d модель, как в компасе и часах).

Для чего нужны GUI именно Вам?
Для кастомизации своих миссий, модов, проектов.
К примеру, Вы хотите сделать миссию, где нужно взломать ноутбук. Вот тут и придется написать интерфейс для ноутбука, в котором и будет происходить процесс взлома. 

Теперь перейдем к составляющим графического интерфейса.

Обычно я делю GUI на три составляющих:

— файл с описанием классов элементов интерфейса;

— файлы, которые рисуют интерфейс;

— скрипты, в которых обрабатываются данные, которые пользователь передал с помощью интерфейса, и совершаются определенные действия. 

Начнем по порядку. 

1. define.hpp

Это файл, в котором описываются классы эллементов интерфейса, такие как: текст, кнопки, список, картинки и т.п.

В этом файле определяется какого цвета будет элемент, размер и цвет шрифта, фона, рамки… Ну я думаю с этим понятно. 

Пример:

class RscButton

{

 access = 0;

 type = CT_BUTTON;

 style = ST_LEFT;

 x = 0; y = 0; w = 0.3; h = 0.1;

 text = "";

 font = "TahomaB";

 sizeEx = 0.04;

 colorText[] = {0,0,0,1};

 colorDisabled[] = {0.3,0.3,0.3,1};

 colorBackground[] = {0.6,0.6,0.6,1};

 colorBackgroundDisabled[] = {0.6,0.6,0.6,1};

 colorBackgroundActive[] = {1,0.5,0,1};

 offsetX = 0.004;

 offsetY = 0.004;

 offsetPressedX = 0.002;

 offsetPressedY = 0.002;

 colorFocused[] = {0,0,0,1};

 colorShadow[] = {0,0,0,1};

 shadow = 0;

 colorBorder[] = {0,0,0,1};

 borderSize = 0.008;

 soundEnter[] = {"",0.1,1};

 soundPush[] = {"",0.1,1};

 soundClick[] = {"",0.1,1};

 soundEscape[] = {"",0.1,1};

};

 

2. dialog.hpp

В этом файле описывается сам интерфейс.
Его размеры, расположение отдельных элементов (кнопки, картинки, текст), их содержимое, а так же действия, которые будут происходить от взаимодействия с ними (например нажатие кнопки). 

Пример:

class dialog

{

 idd = 5000;

 class controls

 {

  class BUTTON:rscButton

  {

    idc = 1;

    x = 0.5;

    y = 0.5;

    w = 0.1;

    h = 0.05;

    action = "execVM 'script.sqf'";

  };

 };

};

 

3. Script.sqf

В скрипте мы будем производить необходимые нам действия.
Например, при нажатии на кнопку интерфейса, запускается скрипт, который меняет вооружение игрока. Кроме этого, в скрипте мы можем «на лету» изменять сам интерфейс. Изменить цвет текста, расположение кнопки и т.п.

Читать продолжение: GUI. Часть 2. Пишем простой интерфейс.

Что-то не поняли? Заходите в наш Discord, там вам всегда помогут.