Хочу запилить шкалу на экране, которая будет прибавляться или наоборот снижаться в зависимости от действий игрока.
И тут вопрос- через что или как лучше её отобразить на экране игрока.
Дальше попытаюсь сам.
Edited by TankiSD, 18 June 2015 - 19:18.
Posted 18 June 2015 - 17:45
Хочу запилить шкалу на экране, которая будет прибавляться или наоборот снижаться в зависимости от действий игрока.
И тут вопрос- через что или как лучше её отобразить на экране игрока.
Дальше попытаюсь сам.
Edited by TankiSD, 18 June 2015 - 19:18.
Posted 18 June 2015 - 17:49
Posted 18 June 2015 - 19:09
Примерно как то так
// config.cpp
class cfgScriptPaths {
A3SPL_IGUI = "A3SPL\ui\scripts\IGUI\";
};
class RscBackground;
class RscTitle;
class RscProgress;
class RscTitles {
class RscDisplayPlayerStatus {
idd = 6900;
movingEnable = 0;
duration = 1000000;
name = "DisplayPlayerStatus";
onLoad = "[""onLoad"",_this,""RscDisplayPlayerStatus"",'A3SPL_IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
onUnload = "[""onUnload"",_this,""RscDisplayPlayerStatus"",'A3SPL_IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class ControlsBackground {
class CA_ContainerBackground : RscBackground {
idc = 1001;
x = "47 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "26.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "5.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
colorBackground[] = {0.05, 0.05, 0.05, 0.55};
};
};
class controls {
class DammageTitle : RscTitle {
idc = 2000;
colorText[] = {0.5, 0.5, 0.5, 0.9};
text = "$STR_A3SPL_DAMMAGE";
x = "47.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "30.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "3.6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class BloodTitle : DammageTitle {
idc = 2001;
text = "$STR_A3SPL_BLOOD";
y = "29.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
class FoodTitle : DammageTitle {
idc = 2002;
text = "$STR_A3SPL_FOOD";
y = "28.4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
class DrinkTitle : DammageTitle {
idc = 2003;
text = "$STR_A3SPL_DRINK";
y = "27.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
class DammageProgress : RscProgress {
idc = 6300;
texture = "";
textureExt = "";
colorBar[] = {0.9, 0.9, 0.9, 0.2};
colorExtBar[] = {1, 1, 1, 1};
colorFrame[] = {1, 1, 1, 1};
x = "51 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "30.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class BloodProgress : DammageProgress {
idc = 6301;
y = "29.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
class FoodProgress : DammageProgress {
idc = 6302;
y = "28.4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
class DrinkProgress : DammageProgress {
idc = 6303;
y = "27.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
};
};
};
// A3SPL\ui\scripts\IGUI\RscDisplayPlayerStatus.sqf
#define CONTROL (_display displayctrl _idc)
disableserialization;
_mode = _this select 0;
_params = _this select 1;
_class = _this select 2;
switch _mode do {
case "onLoad": {
with missionNamespace do {
DisplayPlayerStatus = _params spawn PTm_fnc_playerMonitorDisplayStatus;
};
};
case "onUnload": {
terminate DisplayPlayerStatus;
};
};
Как такое выглядит смотрим на видео, правый нижний угол
http://arma3.ru/foru...atform/?p=39666
А ещё лучше, скачиваем архив и изучаем в более удобной форме аддон
ui.pbo
http://arma3.ru/foru...&attach_id=2896
Posted 18 June 2015 - 19:16

Posted 18 June 2015 - 19:19
Да, коллега, я вас понимаю!
Были времена когда я в зеркале видел такое отражение)
Posted 18 June 2015 - 19:25
Буду изучать.
Когда разбираться начинаешь, всё проще становится.
Posted 18 June 2015 - 19:29
Gui нервы по мотает однозначно, пока разберёшься что куда и как.
Posted 18 June 2015 - 19:34
Ну я сижу, пытаюсь понять, откуда начать)
Posted 18 June 2015 - 19:38
Спартанский минимум
class RscProgress;
class RscTitles {
class RscDisplayPlayerStatus {
idd = 6900;
movingEnable = 0;
duration = 1000000;
name = "DisplayPlayerStatus";
// Эта строка вызывает код который будет обновлять отображаемые данные, когда вы вызываете этот дисплей, дисплей вызывает указанный скрипт
onLoad = "[_this] call compile preprocessfilelinenumbers ""путьДоСкрипта\RscDisplayPlayerStatus.sqf""";
// Тоже самое только когда дисплей сворачивается
onUnload = "";
class ControlsBackground {
// основание (фон) на фоне которого будут отображаться остальные контролсы
class CA_ContainerBackground : RscBackground {
idc = 1001;
x = "47 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "26.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "5.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
colorBackground[] = {0.05, 0.05, 0.05, 0.55};
};
};
class controls {
// сам прогресс бар и его настройки
class DammageProgress : RscProgress {
idc = 6300;
texture = "";
textureExt = "";
colorBar[] = {0.9, 0.9, 0.9, 0.2};
colorExtBar[] = {1, 1, 1, 1};
colorFrame[] = {1, 1, 1, 1};
x = "51 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "30.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
};
};
};
Edited by SteelRat, 18 June 2015 - 19:39.
Posted 18 June 2015 - 19:42
ЗЫ
onLoad = "[_this] call compile preprocessfilelinenumbers ""путьДоСкрипта\RscDisplayPlayerStatus.sqf""";
_this это передаваемая в вызываемый скрипт ссылка на дисплей.
TankiSD, начните с простого диалога: нажми кнопочку что бы его закрыть, после создайте что то покрупнее и т д
В принципе то что ему нужно не далеко ушло от нажатой кнопки)
Posted 18 June 2015 - 19:44
Всё понял.
Сейчас буду разбираться товарищи!
О результатах доложу!
Posted 18 June 2015 - 21:26
Собственно... а что есть что?
т.е. что за RscDisplayPlayerStatus.sqf
и диалог прописывать как .hpp?
Потому что я по всякому прописывал, толку ноль.
Из дискрипшина вообще вылетает.

Edited by TankiSD, 18 June 2015 - 23:16.
Posted 19 June 2015 - 03:42
т.е. что за RscDisplayPlayerStatus.sqf
Код в этом скрипте будет обновлять показания вашего прогресс бара, можете дать ему какое угодно название.
и диалог прописывать как .hpp?
Это смотря куда и как его пихать.
Если в description.ext то
class RscProgress;
class RscBackground;
class RscTitles {
// Имя классу даёте какое по вкусу
class RscDisplayPlayerStatus {
// тут собственно описывается сам дисплей
};
};
Posted 19 June 2015 - 05:13
ЗЫ
Короче, я принимаю для себя простую истину, приятнее заниматься рисованием, по мне, через аддон, писанины меньше.
Posted 19 June 2015 - 21:48
Это я понял.
Я не понял то, как обзывается файл, в котором прописывается "спартанский минимум" и как его активировать?
Posted 19 June 2015 - 23:16
TankiSD, обычный description.ext
Так этот код вылетает их дискрипшина
class RscProgress;
class RscTitles {
class RscDisplayPlayerStatus {
idd = 6900;
movingEnable = 0;
duration = 1000000;
name = "DisplayPlayerStatus";
// Эта строка вызывает код который будет обновлять отображаемые данные, когда вы вызываете этот дисплей, дисплей вызывает указанный скрипт
onLoad = "[_this] call compile preprocessfilelinenumbers ""путьДоСкрипта\RscDisplayPlayerStatus.sqf""";
// Тоже самое только когда дисплей сворачивается
onUnload = "";
class ControlsBackground {
// основание (фон) на фоне которого будут отображаться остальные контролсы
class CA_ContainerBackground : RscBackground {
idc = 1001;
x = "47 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "26.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "5.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
colorBackground[] = {0.05, 0.05, 0.05, 0.55};
};
};
class controls {
// сам прогресс бар и его настройки
class DammageProgress : RscProgress {
idc = 6300;
texture = "";
textureExt = "";
colorBar[] = {0.9, 0.9, 0.9, 0.2};
colorExtBar[] = {1, 1, 1, 1};
colorFrame[] = {1, 1, 1, 1};
x = "51 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "30.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
};
};
};
Posted 20 June 2015 - 03:27
И так друзья мои, я частенько упускаю из виду один нюанс, файл миссии description.ext это такой умственно отсталый config.cpp.
То есть, что бы ваш GUI описанный в дескрипшен работал как надо нужно этот GUI описать так сказать от и до.
А если лепить GUI из аддона, то можно его лепить на базе уже готовых классов лежащих в ui_f.pbo армы.
Так что в том виде в каком я предложил не прокатит.
Edited by SteelRat, 20 June 2015 - 03:28.