469 lines
12 KiB
C++
469 lines
12 KiB
C++
/*
|
|
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 = "-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;
|
|
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 TextGrid: 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 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;
|
|
sizeEx="0.03*SafezoneH";
|
|
style=0;
|
|
shadow=0;
|
|
font="EtelkaMonospacePro";
|
|
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="7 * (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 = 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
|
|
{
|
|
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
|
|
{
|
|
opticsDisplayName = "NFOV 2X";
|
|
initFov = 0.0070;
|
|
minFov = 0.0070;
|
|
maxFov = 0.0070;
|
|
};
|
|
class UltraNarrow: Narrow
|
|
{
|
|
opticsDisplayName = "NFOV 4X";
|
|
initFov = 0.0035;
|
|
minFov = 0.0035;
|
|
maxFov = 0.0035;
|
|
};
|
|
};
|
|
class BRAF_Fennec_Gunner_Optics: BRAF_A29_Gunner_Optics
|
|
{
|
|
class Wide;
|
|
class Medium;
|
|
class Narrow;
|
|
class Narrower;
|
|
class UltraNarrow;
|
|
};
|