Braf_Air2 atualizado

This commit is contained in:
2026-06-14 21:25:45 -03:00
parent e4ac56b038
commit 63626ca260
62 changed files with 1734 additions and 306 deletions

View File

@@ -1,48 +1,76 @@
/*
Author: Brazilian Armed Forces
File: BRAF_AirOptics.hpp
Purpose:
Define a UI (InGame Optics) do A-29 com elementos vanilla + elementos custom (IDCs 9901..9905)
e instala um EventHandler para atualizar os controles em tempo real enquanto a optics estiver ativa.
Correções lógicas aplicadas (padrão Arma 3):
1) onLoad usa _this (minúsculo), não _This
2) EH 'Draw' entrega CONTROL; chamamos a função passando DISPLAY via ctrlParent
3) onUnload remove o EH, evitando acumular handlers após abrir/fechar optics
4) Caminhos usam barra simples '\' (padrão Arma 3), sem inventar '\\'
=======================================================================
BRAF A-29 STARSAPHIRE - DICIONÁRIO DE IDCs (REFERÊNCIA)
=======================================================================
IDDs
300 - Display do optics A-29 (BRAF_RscOptics_A29)
Grupos (ControlsGroup)
170 - CA_IGUI_elements_group (grupo principal do optics)
CUSTOM (BRAF)
9901 - Seta: indicador de elevação (trilho vertical)
9902 - Texto: valor numérico da elevação (ex: -12.3°)
9903 - Seta: indicador de direção (trilho horizontal)
9904 - Texto: valor numérico da direção (ex: -45°)
9905 - Seta: bússola (norte geográfico relativo ao apontamento)
*/
class ScrollBar;
class RscUnitInfo;
class RscControlsGroup
{
class VScrollbar;
class HScrollbar;
class Controls;
};
class RscControlsGroup;
class RscControlsGroupNoScrollbars;
class CA_HUDRscControlsGroup;
class RscText;
class RangeText: RscText{};
class RscPicture;
class RscOpticsText;
class RscOpticsValue;
class RscIGProgress;
class RscInGameUI
{
class RscOptics_MBT_01_gunner;
class BRAF_RscOptics_A29: RscUnitInfo
{
idd=300;
controls[]=
{
"CA_IGUI_elements_group"
};
class CA_IGUI_elements_group: RscControlsGroup
{
idc=170;
class VScrollbar: VScrollbar
{
width=0;
};
class HScrollbar: HScrollbar
{
height=0;
};
x="0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
y="0 * (0.025 * SafezoneH) + (SafezoneY)";
w="70";
h="40 * (0.025 * SafezoneH)";
class controls
{
class ValueDistance: RscText
class BRAF_RscOptics_A29: RscUnitInfo
{
idd = 300;
controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"};
class VScrollbar;
class HScrollbar;
onLoad = "[""onLoad"",_this,""RscUnitInfo"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay'); _this call BRAF_fnc_initRSC;";
onUnload = "[""onUnload"",_this,""RscUnitInfo"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')";
class CA_IGUI_elements_group: RscControlsGroup
{
idc = 170;
class VScrollbar: VScrollbar { width = 0; };
class HScrollbar: HScrollbar { height = 0; };
x = "-4 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH)/2))";
y = "000 * (0.02500 * SafezoneH) + (SafezoneY)";
w = "100 * (0.01875 * SafezoneH)";
h = "080 * (0.02500 * SafezoneH)";
class controls
{
class ValueDistance: RscText
{
style=1;
sizeEx="0.038*SafezoneH";
shadow=0;
font="EtelkaMonospacePro";
idc=198; //idc=183;
idc=198;
text="245678";
colorText[] = {0,0,0,1};
colorBackground[] = {0,0,0,0};
@@ -66,7 +94,7 @@ class RscInGameUI
x="10 * (0.01875 * SafezoneH)";
y="34 * (0.025 * SafezoneH)";
};
class Textweapon: ValueGrid
class TextGrid: ValueGrid
{
style=0;
idc=1801;
@@ -144,6 +172,22 @@ class RscInGameUI
y="35.75 * (0.025 * SafezoneH)";
w="6.5 * (0.01875 * SafezoneH)";
};
class braf_fov_mode: RscText
{
idc = 154;
text = "WFOV";
sizeEx="0.03*SafezoneH";
style=0;
shadow=0;
font="EtelkaMonospacePro";
x = "0 * (0.01875 * SafezoneH)";
y="3 * (0.025 * SafezoneH)";
w="5 * (0.01875 * SafezoneH)";
h="1.2 * (0.025 * SafezoneH)";
colorText[] = {0,0,0,1};
};
class CA_VisionMode: RscText
{
idc=152;
@@ -151,18 +195,19 @@ class RscInGameUI
style=0;
shadow=0;
font="EtelkaMonospacePro";
text="DAY";
x="1 * (0.01875 * SafezoneH)";
text="DTV";
x="4.5 * (0.01875 * SafezoneH)";
y="3 * (0.025 * SafezoneH)";
w="5 * (0.01875 * SafezoneH)";
h="1.2 * (0.025 * SafezoneH)";
colorText[] = {0,0,0,1};
};
class CA_FlirMode: CA_VisionMode
{
idc=153;
text="BHOT";
x="5 * (0.01875 * SafezoneH)";
x="7 * (0.01875 * SafezoneH)";
};
class CA_Laser: RscText
{
@@ -173,73 +218,251 @@ class RscInGameUI
shadow=0;
font="EtelkaMonospacePro";
text="\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
x="31.1 * (0.01875 * SafezoneH)";
y="12.85 * (0.025 * SafezoneH)";
x="33 * (0.01875 * SafezoneH)";
y="8 * (0.025 * SafezoneH)";
w="3.5 * (0.01875 * SafezoneH)";
h="1.5 * (0.025 * SafezoneH)";
};
//class braf_tri_vert: RscPicture
//{
// idc = 1806;
// text = "rhsusf\addons\rhsusf_optics\data\tex\tri_vert.paa";
// x = "12.9 * (0.01875 * SafezoneH)";
// y = "14.65 * (0.025 * SafezoneH)";
// w = "0.7 * (0.01875 * SafezoneH)";
// h = "1.1 * (0.025 * SafezoneH)";
//};
//class braf_tri_horiz: braf_tri_vert
//{
// idc = 1807;
// text = "rhsusf\addons\rhsusf_optics\data\tex\tri_hor.paa";
// x = "26.1 * (0.01875 * SafezoneH)";
// y = "26.8 * (0.025 * SafezoneH)";
// w = "1.1 * (0.01875 * SafezoneH)";
// h = "0.7 * (0.025 * SafezoneH)";
//};
};
};
class braf_arrow_vert: RscPicture
{
idc = 1901;
text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_vert_ca.paa";
shadow = 0;
sizeEx = "0.03*SafezoneH";
x = "-0.5 * (0.01875 * SafezoneH)";
y = "16.6 * (0.025 * SafezoneH)";
w = "2.1 * (0.01875 * SafezoneH)";
h = "2.1 * (0.025 * SafezoneH)";
color[] = {1,1,1,1};
colorBackground[] = {0,0,0,0};
};
class braf_elev_value: RscText
{
idc = 1902;
style = 0;
shadow = 0;
sizeEx = "0.03*SafezoneH";
colorText[] = {1,1,1,1};
colorBackground[] = {0,0,0,0};
x = "1 * (0.01875 * SafezoneH)";
y = "16.6 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "2.1 * (0.025 * SafezoneH)";
text = "-120";
};
class braf_arrow_horiz: braf_arrow_vert
{
idc = 1903;
text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_hor_ca.paa";
x = "-12 * (0.01875 * SafezoneH)";
y = "30 * (0.025 * SafezoneH)";
};
class braf_dir_value: braf_elev_value
{
idc = 1904;
style = 2;
x = "-12.95 * (0.01875 * SafezoneH)";
y = "20 * (0.025 * SafezoneH)";
w = "4.0 * (0.01875 * SafezoneH)";
h = "2.1 * (0.025 * SafezoneH)";
text = "-180";
};
class braf_compass_arrow: RscPicture
{
idc = 1905;
style = 144;
shadow = 0;
text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_north_ca.paa";
x = "57.5 * (0.01875 * SafezoneH)";
y = "25.5 * (0.02500 * SafezoneH)";
w = "10 * (0.01875 * SafezoneH)";
h = "10 * (0.02500 * SafezoneH)";
};
class braf_compass_n: braf_elev_value
{
idc = -1;
style = 2;
sizeEx = "0.03*SafezoneH";
x = "60 * (0.01875 * SafezoneH)";
y = "28 * (0.02500 * SafezoneH)";
w = "05 * (0.01875 * SafezoneH)";
h = "05 * (0.02500 * SafezoneH)";
text = "N";
};
class BRAF_AirData_Label_HDG: RscText
{
idc = 1906;
style = 2;
shadow = 0;
font = "EtelkaMonospacePro";
sizeEx = "0.02*SafezoneH";
colorText[] = {1,1,1,1};
colorBackground[] = {0,0,0,0};
text = "HDG:";
x="60 * (0.01875 * SafezoneH)";
y = "4.4 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Value_HDG: BRAF_AirData_Label_HDG
{
idc = 1907;
style = 1;
text = "000";
x = "60 * (0.01875 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
};
class BRAF_AirData_Label_IAS: BRAF_AirData_Label_HDG
{
idc = 1908;
text = "IAS:";
y = "5 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Value_IAS: BRAF_AirData_Value_HDG
{
idc = 1909;
text = "000";
y = "5 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Label_GS: BRAF_AirData_Label_HDG
{
idc = 1910;
text = "GS:";
y = "5.6 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Value_GS: BRAF_AirData_Value_HDG
{
idc = 1911;
text = "000";
y = "5.6 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Label_RALT: BRAF_AirData_Label_HDG
{
idc = 1912;
text = "RALT:";
y = "6.2 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Value_RALT: BRAF_AirData_Value_HDG
{
idc = 1913;
text = "0000";
y = "6.2 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Label_BARO: BRAF_AirData_Label_HDG
{
idc = 1914;
text = "BARO:";
y = "6.8 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Value_BARO: BRAF_AirData_Value_HDG
{
idc = 1915;
text = "0000";
y = "6.8 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Label_ROLL: BRAF_AirData_Label_HDG
{
idc = 1916;
text = "ROLL:";
y = "7.4 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Value_ROLL: BRAF_AirData_Value_HDG
{
idc = 1917;
text = "0";
y = "7.4 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Label_PTCH: BRAF_AirData_Label_HDG
{
idc = 1918;
text = "PTCH:";
y = "8 * (0.025 * SafezoneH)";
};
class BRAF_AirData_Value_PTCH: BRAF_AirData_Value_HDG
{
idc = 1919;
text = "0";
y = "8 * (0.025 * SafezoneH)";
};
};
};
};
class BRAF_RscOptics_Fennec: BRAF_RscOptics_A29
{
};
};
};
class BRAF_A29_Gunner_Optics: Optics_Armored
{
class Wide: RCWSOptics
class Wide: RCWSOptics
{
initFov = 0.5236;
minFov = 0.5236;
maxFov = 0.5236;
opticsDisplayName = "WFOV";
visionMode[] = { "Normal", "TI" };
thermalMode[] = { 0, 1 };
thermalNoise[] = { 0.5, 1.25, 2.5, 0.75, 1, 0, 0, 0.95 };
gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_w.p3d";
gunnerOpticsEffect[] = {};
directionStabilized = 1;
};
class Medium: Wide
{
opticsDisplayName = "MFOV";
gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_m.p3d";
initFov = 0.0593;
minFov = 0.0593;
maxFov = 0.0593;
};
class Narrow: Wide
{
opticsDisplayName = "NFOV";
gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_n.p3d";
initFov = 0.0140;
minFov = 0.0140;
maxFov = 0.0140;
};
class Narrower: Narrow
{
initFov=0.4;
minFov=0.4;
maxFov=0.4;
visionMode[]=
{
"Normal",
"TI"
};
thermalMode[]={0,1};
thermalNoise[]=
{
0.5, //intensity,
1.25, //sharpness,
2.5, //grainSize,
0.75, //intensityX0,
1, //intensityX1,
0, //monochromatic,
0, //static,
0.95 //blurCoef
};
gunnerOpticsModel="\braf\braf_air2\BRAF_Optics_Air2\A29\braf_a29_gunner_w.p3d";
gunnerOpticsEffect[]={};
directionStabilized=1;
opticsDisplayName = "NFOV 2X";
initFov = 0.0070;
minFov = 0.0070;
maxFov = 0.0070;
};
class Medium: Wide
class UltraNarrow: Narrow
{
gunnerOpticsModel="\braf\braf_air2\BRAF_Optics_Air2\A29\braf_a29_gunner_m.p3d";
initFov=0.07;
minFov=0.07;
maxFov=0.07;
opticsDisplayName = "NFOV 4X";
initFov = 0.0035;
minFov = 0.0035;
maxFov = 0.0035;
};
class Narrow: Wide
{
gunnerOpticsModel="\braf\braf_air2\BRAF_Optics_Air2\A29\braf_a29_gunner_n.p3d";
initFov=0.014;
minFov=0.014;
maxFov=0.014;
};
};
};
class BRAF_Fennec_Gunner_Optics: BRAF_A29_Gunner_Optics
{
class Wide;
class Medium;
class Narrow;
class Narrower;
class UltraNarrow;
};