/* 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; }; };