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

@@ -0,0 +1,315 @@
/*
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 RscControlsGroupNoScrollbars;
class CA_HUDRscControlsGroup;
class RscText;
class RangeText: RscText{};
class RscPicture;
class RscOpticsText;
class RscOpticsValue;
class RscIGProgress;
class RscInGameUI
{
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 = "000 * (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;
text="245678";
colorText[] = {0,0,0,1};
colorBackground[] = {0,0,0,0};
x="45.5 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
w="8 * (0.01875 * SafezoneH)";
h="1.2 * (0.025 * SafezoneH)";
};
class TextDistance: ValueDistance
{
style=0;
idc=1800;
text="Laser dist:";
x="42 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
};
class ValueGrid: ValueDistance
{
idc=171;
text="245678";
x="10 * (0.01875 * SafezoneH)";
y="34 * (0.025 * SafezoneH)";
};
class Textweapon: ValueGrid
{
style=0;
idc=1801;
text="GPS grid:";
x="4.45 * (0.01875 * SafezoneH)";
y="34 * (0.025 * SafezoneH)";
};
class ValueWeapon: ValueDistance
{
idc=172;
text="245678";
x="10 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
};
class TextTarget: ValueGrid
{
style=0;
idc=1802;
text="Target grid:";
x="4.45 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
};
class TextElev: ValueGrid
{
style=0;
idc=1803;
text="Elev:";
x="32 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
};
class ValueElev: ValueDistance
{
idc=175;
text="245";
x="32 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
};
class TextAz: ValueGrid
{
style=0;
idc=1804;
text="Az:";
x="24.5 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
};
class ValueAz: ValueDistance
{
idc=156;
text="245";
x="23 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
};
class TextAlt: ValueGrid
{
style=0;
idc=1805;
text="Alt:";
x="24.5 * (0.01875 * SafezoneH)";
y="34 * (0.025 * SafezoneH)";
};
class ValueAlt: ValueDistance
{
idc=189;
text="245678";
x="24 * (0.01875 * SafezoneH)";
y="34 * (0.025 * SafezoneH)";
};
class CA_Time: ValueGrid
{
idc=190;
style=0;
shadow=0;
text="XX:XX:xx";
x="54 * (0.01875 * SafezoneH)";
y="35.75 * (0.025 * SafezoneH)";
w="6.5 * (0.01875 * SafezoneH)";
};
class CA_VisionMode: RscText
{
idc=152;
sizeEx="0.03*SafezoneH";
style=0;
shadow=0;
font="EtelkaMonospacePro";
text="DTV";
x="1 * (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)";
};
class CA_Laser: RscText
{
idc=158;
style="0x30 + 0x800";
sizeEx="0.038*SafezoneH";
colorText[]={0.70599997,0.074500002,0.0196,1};
shadow=0;
font="EtelkaMonospacePro";
text="\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
x="33 * (0.01875 * SafezoneH)";
y="8 * (0.025 * SafezoneH)";
w="3.5 * (0.01875 * SafezoneH)";
h="1.5 * (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 = 2;
sizeEx = "0.06*SafezoneH";
x = "0 * (0.01875 * SafezoneH)";
y = "16.6 * (0.025 * SafezoneH)";
w = "4.2 * (0.01875 * SafezoneH)";
h = "4.2 * (0.025 * SafezoneH)";
color[] = {1,1,1,1};
colorBackground[] = {0,0,0,0};
};
class braf_arrow_horiz: braf_arrow_vert
{
idc = 1903;
text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_hor_ca.paa";
x = "24.45 * (0.01875 * SafezoneH)";
y = "29 * (0.025 * SafezoneH)";
w = "4.2 * (0.01875 * SafezoneH)";
};
class braf_compass_arrow: RscPicture
{
idc = 1905;
style = 144;
text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_north_ca.paa";
x = "56 * (0.01875 * SafezoneH)";
y = "28 * (0.02500 * SafezoneH)";
w = "05 * (0.01875 * SafezoneH)";
h = "05 * (0.02500 * SafezoneH)";
};
class braf_elev_value: RscText
{
idc = 1902;
style = 2;
shadow = 2;
sizeEx = "0.06*SafezoneH";
colorText[] = {1,1,1,1};
colorBackground[] = {0,0,0,0};
x = "0 * (0.01875 * SafezoneH)";
y = "16.6 * (0.025 * SafezoneH)";
w = "4.2 * (0.01875 * SafezoneH)";
h = "1.5 * (0.025 * SafezoneH)";
text = "-120";
};
class braf_dir_value: braf_elev_value
{
idc = 1904;
x = "24.15 * (0.01875 * SafezoneH)";
y = "28.45 * (0.025 * SafezoneH)";
w = "4.2 * (0.01875 * SafezoneH)";
h = "1.5 * (0.025 * SafezoneH)";
text = "-180";
};
class braf_compass_n: braf_elev_value
{
idc = -1;
style = 1;
x = "56 * (0.01875 * SafezoneH)";
y = "29.5 * (0.02500 * SafezoneH)";
w = "05 * (0.01875 * SafezoneH)";
h = "2 * (0.02500 * SafezoneH)";
text = "N";
};
};
};
};
};
class BRAF_A29_Gunner_Optics: Optics_Armored
{
class Wide: RCWSOptics
{
initFov = 0.4;
minFov = 0.4;
maxFov = 0.4;
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
{
gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_m.p3d";
initFov = 0.07;
minFov = 0.07;
maxFov = 0.07;
};
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;
};
};