diff --git a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_m.p3d b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_m.p3d deleted file mode 100644 index 2402697..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_m.p3d +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7271c58365c9d7a7fedba246804c947628c3a72ac69b673e19940de5d2e3dc88 -size 2879 diff --git a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_n.p3d b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_n.p3d deleted file mode 100644 index 2f844fc..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_n.p3d +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a27fc05cc694c93e2200a1cb679f0e25be3816ca72a017439446bc0624e8cf3b -size 2879 diff --git a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_w.p3d b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_w.p3d deleted file mode 100644 index ea4cc14..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_w.p3d +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:24d642e908da49902f2546d5bd6fcba82214254651a40ccf1e5be5f972906427 -size 2879 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.paa deleted file mode 100644 index 1dd40aa..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.paa +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:12cf8777f266e4e08488d3a9b43a7c09f60b957ec681d7c63f1595976aad56a4 -size 40541 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.png deleted file mode 100644 index 6090ca6..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ecfa454a18886f6c75ebb139d9039ac2abc86aa25afc43d7b1d3580e7092ca80 -size 18460 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.paa deleted file mode 100644 index b2eebab..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.paa +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:265bcb0566edf4fba248ae6e09670db617adfe5b2d1d62c2f4d51d619f6cd0ae -size 41337 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.png deleted file mode 100644 index 93804d6..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0bf83102858c7de3588424436272490c8aacbeaf6b9aa965c400c8045a10a27c -size 18634 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.paa deleted file mode 100644 index a522395..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.paa +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:65f28f9fd8ffacbd67a6555bec414094cb38baeb5386160d8185b1854855ff3b -size 40001 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.png deleted file mode 100644 index a53b318..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3bdff952278fd32fb2f4d81bb56dd1c94013d0ec440928b0036efa8ea445df5 -size 18238 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_hor_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_hor_ca.paa deleted file mode 100644 index 376c3c4..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_hor_ca.paa +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1e79b9d65ca3e8932669efcc2b75cdc2fdec22d47767d243194aee4f02ce10d7 -size 24979 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.paa deleted file mode 100644 index 981bd22..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.paa +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2f161192d030e93f0bab84ffa43cb9a74627315211695f1c48a4e26d7d514dd8 -size 31656 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.png deleted file mode 100644 index d56c3e9..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:28319e61200c556c9fccf402abfd336b6eb06331e7cbdd0bd012489c74f50944 -size 5587 diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_vert_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_vert_ca.paa deleted file mode 100644 index 34d55b7..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_vert_ca.paa +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60bd305866228b30c3d99af290028a7dc933a9800d1dec9b554cbe227842d13e -size 24934 diff --git a/braf_air2/BRAF_Optics_Air2/A29/model.cfg b/braf_air2/BRAF_Optics_Air2/A29/model.cfg deleted file mode 100644 index e2b2002..0000000 --- a/braf_air2/BRAF_Optics_Air2/A29/model.cfg +++ /dev/null @@ -1,57 +0,0 @@ -class CfgSkeletons -{ - class braf_A29_Flir - { - isDiscrete=0; - skeletonInherit=""; - skeletonBones[]={}; - }; -}; -class CfgModels -{ - class braf_a29_gunner_n - { - htMin=0; - htMax=0; - afMax=0; - mfMax=0; - mFact=0; - tBody=0; - skeletonName="braf_A29_Flir"; - sectionsInherit=""; - sections[]={}; - class Animations - { - }; - }; - class braf_a29_gunner_m - { - htMin=0; - htMax=0; - afMax=0; - mfMax=0; - mFact=0; - tBody=0; - skeletonName="braf_A29_Flir"; - sectionsInherit=""; - sections[]={}; - class Animations - { - }; - }; - class braf_a29_gunner_w - { - htMin=0; - htMax=0; - afMax=0; - mfMax=0; - mFact=0; - tBody=0; - skeletonName="braf_A29_Flir"; - sectionsInherit=""; - sections[]={}; - class Animations - { - }; - }; -}; diff --git a/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics.hpp b/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics.hpp deleted file mode 100644 index 16b5482..0000000 --- a/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics.hpp +++ /dev/null @@ -1,468 +0,0 @@ -/* - 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; -}; diff --git a/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp b/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp index 40ad35e..5b2295c 100644 --- a/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp +++ b/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp @@ -1580,7 +1580,7 @@ class braf_A29B: BRAF_A29_base maxTurn=180; initTurn=0; gunnerName="$STR_A3_COPILOT"; - turretInfoType="BRAF_RscOptics_A29"; + turretInfoType="BRAF_RscOptics_Air_FLIR"; isCopilot=1; weapons[]= { @@ -1622,22 +1622,56 @@ class braf_A29B: BRAF_A29_base class ViewOptics: RCWSOptics { }; - class OpticsIn: BRAF_A29_Gunner_Optics + class OpticsIn { - class Wide: Wide + class Wide { + initAngleX = 0; + minAngleX = -120; + maxAngleX = 30; + initAngleY = 0; + minAngleY = -180; + maxAngleY = 180; + 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_optics_air\StarSaphire\braf_StarSaphire_w.p3d"; + gunnerOpticsEffect[] = {}; + directionStabilized = 1; }; - class Medium: Medium + class Medium: Wide { + opticsDisplayName = "MFOV"; + gunnerOpticsModel = "\braf\braf_optics_air\StarSaphire\braf_StarSaphire_m.p3d"; + initFov = 0.0593; + minFov = 0.0593; + maxFov = 0.0593; }; - class Narrow: Narrow + class Narrow: Wide { + opticsDisplayName = "NFOV"; + gunnerOpticsModel = "\braf\braf_optics_air\StarSaphire\braf_StarSaphire_n.p3d"; + initFov = 0.0140; + minFov = 0.0140; + maxFov = 0.0140; }; - class Narrower: Narrower + class Narrower: Narrow { + opticsDisplayName = "NFOV 2X"; + initFov = 0.0070; + minFov = 0.0070; + maxFov = 0.0070; }; - class UltraNarrow: UltraNarrow + class UltraNarrow: Narrow { + opticsDisplayName = "NFOV 4X"; + initFov = 0.0035; + minFov = 0.0035; + maxFov = 0.0035; }; }; class OpticsOut @@ -2460,4 +2494,4 @@ class braf_ejection_chute: braf_ejection_chute_base "\braf\braf_air2\braf_airplanes\braf_super_tucano\Dataa\ejection_chute_co.paa" }; }; -*/ \ No newline at end of file +*/ diff --git a/braf_air2/braf_fnc/braf_constants.h b/braf_air2/braf_fnc/braf_constants.h deleted file mode 100644 index 76a866d..0000000 --- a/braf_air2/braf_fnc/braf_constants.h +++ /dev/null @@ -1,28 +0,0 @@ -#define IGUI_GROUP 170 - -// IDCs (seus) -#define BRAF_ELEV_ARROW 1901 -#define BRAF_ELEV_TXT 1902 -#define BRAF_AZ_ARROW 1903 -#define BRAF_AZ_TXT 1904 -#define BRAF_NORTH_ARROW 1905 - -// RANGES da régua (fixos do seu pod) -#define BRAF_MIN_TURN -180 -#define BRAF_MAX_TURN 180 -#define BRAF_MIN_ELEV -120 -#define BRAF_MAX_ELEV 30 - -// ====== CONSTANTES DO TAPE (mesmo conceito do USAF) ====== -// Azimute (horizontal): X do ponto onde está -180 (início da régua) -// e distância total até +180 (largura da régua) -#define BRAF_AZ_BEG (0.035 * safeZoneW) -#define BRAF_AZ_DIS (0.5375 * safeZoneW) -#define BRAF_AZ_NUM_OFFSET (-0.009 * safeZoneW) -#define BRAF_AZ_TXT_Y_OFFSET (-0.5 * 0.025 * safeZoneH) - -// Elevação (vertical): Y do ponto onde está +30 (topo) e distância total até -120 (base) -// (no USAF eles mapeiam para Y) -#define BRAF_EZ_BEG (0.196289 * safeZoneH) -#define BRAF_EZ_DIS (0.684570 * safeZoneH) -#define BRAF_EZ_NUM_OFFSET (0 * safeZoneH) diff --git a/braf_air2/braf_fnc/fn_flirControls.sqf b/braf_air2/braf_fnc/fn_flirControls.sqf deleted file mode 100644 index 61ba05d..0000000 --- a/braf_air2/braf_fnc/fn_flirControls.sqf +++ /dev/null @@ -1,290 +0,0 @@ -/* - Author: Brazilian Armed Forces - File: fn_flirControls.sqf - - Objetivo: - - Atualizar indicadores de AZ (direção) e EZ (elevação) do POD FLIR em relação ao corpo da aeronave - - Atualizar indicação de Norte geográfico relativa ao centro do apontamento (compasso) - - Padrão adotado: - - Mesmo padrão (carrot/tape): - * ler ctrlPosition - * calcular posição com BEG/DIS/OFFSET - * ctrlSetPosition + ctrlCommit 0 - - Observação: - - Este script assume que: - * os controles estão acessíveis via _display displayCtrl - * existem constantes BEG/DIS/OFFSET para a régua horizontal (AZ) e vertical (EZ) -*/ - -#define IGUI_GROUP 170 -#define BRAF_ELEV_ARROW 1901 -#define BRAF_ELEV_TXT 1902 -#define BRAF_AZ_ARROW 1903 -#define BRAF_AZ_TXT 1904 -#define BRAF_NORTH_ARROW 1905 - -#define BRAF_HDG_VALUE 1907 -#define BRAF_IAS_VALUE 1909 -#define BRAF_GS_VALUE 1911 -#define BRAF_RALT_VALUE 1913 -#define BRAF_BARO_VALUE 1915 -#define BRAF_ROLL_VALUE 1917 -#define BRAF_PTCH_VALUE 1919 - -#define BRAF_MIN_TURN -180 -#define BRAF_MAX_TURN 180 -#define BRAF_MIN_ELEV -120 -#define BRAF_MAX_ELEV 30 -#define BRAF_AZ_BEG (0.04 * safeZoneW) -#define BRAF_AZ_DIS (0.5375 * safeZoneW) -#define BRAF_AZ_NUM_OFFSET (0.5 * safeZoneW) -#define BRAF_AZ_TXT_Y_OFFSET (-1 * 0.025 * safeZoneH) -#define BRAF_EZ_BEG (0.215 * safeZoneH) -#define BRAF_EZ_DIS (0.52 * safeZoneH) -#define BRAF_EZ_NUM_OFFSET (0 * safeZoneH) -disableSerialization; - -params ["_display"]; - -// Segurança: display inválido -if (isNull _display) exitWith {}; - -// Segurança: só atualiza quando estiver em optics -if (cameraView != "GUNNER") exitWith {}; - -// Veículo base (corpo) -private _veh = vehicle player; -if (isNull _veh) exitWith {}; - -// CORREÇÃO: Validar que os controles customizados existem antes de acessá-los -// Previne crashes se os IDCs não foram criados corretamente na config -if (isNull (_display displayCtrl BRAF_ELEV_ARROW)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle de seta de elevação (IDC 1901) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_AZ_ARROW)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle de seta de azimute (IDC 1903) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_ELEV_TXT)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle de texto de elevação (IDC 1902) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_AZ_TXT)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle de texto de azimute (IDC 1904) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_NORTH_ARROW)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle da bússola norte (IDC 1905) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_HDG_VALUE)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle HDG (IDC 1907) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_IAS_VALUE)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle IAS (IDC 1909) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_GS_VALUE)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle GS (IDC 1911) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_RALT_VALUE)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle RALT (IDC 1913) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_BARO_VALUE)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle BARO (IDC 1915) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_ROLL_VALUE)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle ROLL (IDC 1917) não encontrado!"; -}; -if (isNull (_display displayCtrl BRAF_PTCH_VALUE)) exitWith { - systemChat "[BRAF A-29] ERRO: Controle PTCH (IDC 1919) não encontrado!"; -}; -// ====================================================================== -// 1) Captura da direção REAL da câmera (mundo) e conversão para o corpo -// ====================================================================== - -// Vetor forward real da câmera ativa (mundo) -private _p0 = positionCameraToWorld [0, 0, 0]; -private _p1 = positionCameraToWorld [0, 0, 1]; -private _vW = _p1 vectorDiff _p0; - -private _lenW = vectorMagnitude _vW; -if (_lenW < 0.0001) exitWith {}; -_vW = _vW vectorMultiply (1/_lenW); - -// Direção absoluta (mundo) em RADIANOS para o compasso -// atan2 retorna radianos: 0 = norte, π/2 = leste, π ou -π = sul, -π/2 = oeste -private _absDir_rad = (_vW select 0) atan2 (_vW select 1); - -// Normalizar para [0, 2π) para ficar positivo - if (_absDir_rad < 0) then { - _absDir_rad = _absDir_rad + (2 * pi); - }; - - // Converte vetor para o referencial do veículo (corpo) - private _vM = _veh vectorWorldToModel _vW; - - private _lenM = vectorMagnitude _vM; - if (_lenM < 0.0001) exitWith {}; - _vM = _vM vectorMultiply (1/_lenM); - - private _x = _vM select 0; - private _y = _vM select 1; - private _z = _vM select 2; - - // AZIMUTH (yaw) relativo ao corpo: [-180..+180] em GRAUS - private _azimuth = (_x atan2 _y); - if (_azimuth > 180) then { - _azimuth = _azimuth - 360; - }; - if (_azimuth < -180) then { - _azimuth = _azimuth + 360; - }; - - // ELEVATION (pitch) relativo ao corpo, permitindo < -90 em GRAUS - private _h = sqrt (_x*_x + _y*_y); - private _signY = if (_y < 0) then { - -1 - } else { - 1 - }; - private _yPrime = _h * _signY; - private _elevation = (_z atan2 _yPrime); - - // Clamp nos limites do POD - _azimuth = _azimuth max BRAF_MIN_TURN min BRAF_MAX_TURN; // -180..+180 - _elevation = _elevation max BRAF_MIN_ELEV min BRAF_MAX_ELEV; // -120..+30 - - // ====================================================================== - // 2) TURRET AZ (Azimute/Direção Horizontal) - // ====================================================================== - - private _turretAZcarrotCtrlPos = ctrlPosition (_display displayCtrl BRAF_AZ_ARROW); - private _turretAZtextCtrlPos = ctrlPosition (_display displayCtrl BRAF_AZ_TXT); - - // X do carrot na régua de -180..+180 - // CORREÇÃO: Referências de constantes alteradas para BRAF_AZ_BEG e BRAF_AZ_DIS - private _azPosX = BRAF_AZ_BEG + (((_azimuth + 180) / 360) * BRAF_AZ_DIS); - - // Atualizar posição da seta horizontal (carrot) - IDC 1903 - (_display displayCtrl BRAF_AZ_ARROW) ctrlSetPosition [ - _azPosX, - _turretAZcarrotCtrlPos select 1, - _turretAZcarrotCtrlPos select 2, - _turretAZcarrotCtrlPos select 3 - ]; - (_display displayCtrl BRAF_AZ_ARROW) ctrlCommit 0; - - // Atualizar valor numérico do azimute - IDC 1904 - // O texto usa o mesmo centro X da seta e fica acima dela. - (_display displayCtrl BRAF_AZ_TXT) ctrlSetText str (round _azimuth); - - private _azArrowW = _turretAZcarrotCtrlPos select 2; - private _azTextW = _turretAZtextCtrlPos select 2; - - (_display displayCtrl BRAF_AZ_TXT) ctrlSetPosition [ - _azPosX + ((_azArrowW - _azTextW) / 2), - (_turretAZcarrotCtrlPos select 1) + BRAF_AZ_TXT_Y_OFFSET, - _azTextW, - _turretAZtextCtrlPos select 3 - ]; - (_display displayCtrl BRAF_AZ_TXT) ctrlCommit 0; - - // ====================================================================== - // 3) TURRET EZ (Elevação/pitch Vertical) - // Régua: +30 (topo) -> -120 (base) - // ====================================================================== - - private _turretEZcarrotCtrlPos = ctrlPosition (_display displayCtrl BRAF_ELEV_ARROW); - private _turretEZtextCtrlPos = ctrlPosition (_display displayCtrl BRAF_ELEV_TXT); - - // tEl: 0 no topo (+30), 1 na base (-120) - private _tEl = (BRAF_MAX_ELEV - _elevation) / (BRAF_MAX_ELEV - BRAF_MIN_ELEV); - if (_tEl < 0) then { - _tEl = 0; - }; - if (_tEl > 1) then { - _tEl = 1; - }; - - // Y da régua - // CORREÇÃO: Referências de constantes alteradas para BRAF_EZ_BEG e BRAF_EZ_DIS - private _elevPos = BRAF_EZ_BEG + (_tEl * BRAF_EZ_DIS); - - // Atualizar posição da seta vertical (carrot) - IDC 1901 - (_display displayCtrl BRAF_ELEV_ARROW) ctrlSetPosition [ - _turretEZcarrotCtrlPos select 0, - _elevPos, - _turretEZcarrotCtrlPos select 2, - _turretEZcarrotCtrlPos select 3 - ]; - (_display displayCtrl BRAF_ELEV_ARROW) ctrlCommit 0; - - // Atualizar valor numérico da elevação - IDC 1902 - (_display displayCtrl BRAF_ELEV_TXT) ctrlSetText str (round _elevation); - (_display displayCtrl BRAF_ELEV_TXT) ctrlSetPosition [ - _turretEZtextCtrlPos select 0, - _elevPos + BRAF_EZ_NUM_OFFSET, - _turretEZtextCtrlPos select 2, - _turretEZtextCtrlPos select 3 - ]; - // CORREÇÃO: Referência de constante alterada para BRAF_EZ_NUM_OFFSET - (_display displayCtrl BRAF_ELEV_TXT) ctrlCommit 0; - - // ====================================================================== - // 4) AIRCRAFT DATA - HDG / IAS / GS / RALT / BARO / ROLL / PTCH - // ====================================================================== - - private _hdg = round (getDir _veh); - private _ias = round (speed _veh); - private _gs = round ((vectorMagnitude (velocity _veh)) * 3.6); - private _ralt = round ((getPosATL _veh) select 2); - private _baro = round ((getPosASL _veh) select 2); - - private _pitchBank = _veh call BIS_fnc_getPitchBank; - private _ptch = round (_pitchBank select 0); - private _roll = round (_pitchBank select 1); - - private _ctrlHDG = _display displayCtrl BRAF_HDG_VALUE; - private _ctrlIAS = _display displayCtrl BRAF_IAS_VALUE; - private _ctrlGS = _display displayCtrl BRAF_GS_VALUE; - private _ctrlRALT = _display displayCtrl BRAF_RALT_VALUE; - private _ctrlBARO = _display displayCtrl BRAF_BARO_VALUE; - private _ctrlROLL = _display displayCtrl BRAF_ROLL_VALUE; - private _ctrlPTCH = _display displayCtrl BRAF_PTCH_VALUE; - - if (!isNull _ctrlHDG) then { - _ctrlHDG ctrlSetText format ["%1", _hdg]; - }; - if (!isNull _ctrlIAS) then { - _ctrlIAS ctrlSetText format ["%1", _ias]; - }; - if (!isNull _ctrlGS) then { - _ctrlGS ctrlSetText format ["%1", _gs]; - }; - if (!isNull _ctrlRALT) then { - _ctrlRALT ctrlSetText format ["%1", _ralt]; - }; - if (!isNull _ctrlBARO) then { - _ctrlBARO ctrlSetText format ["%1", _baro]; - }; - if (!isNull _ctrlROLL) then { - _ctrlROLL ctrlSetText format ["%1", _roll]; - }; - if (!isNull _ctrlPTCH) then { - _ctrlPTCH ctrlSetText format ["%1", _ptch]; - }; - - // ====================================================================== - // 5) COMPASS N (Bússola Norte Geográfico) - // ====================================================================== - - // CORREÇÃO: Referência de IDC alterada: - // COMPASS_N_ARROW → BRAF_NORTH_ARROW (IDC 1905) - // Motivo: Alinhar com nomenclatura definida em braf_constants.h - // - // A fórmula: rotação_seta = -_absDir_rad - // Isso faz a seta apontar para o NORTE true em relação ao que a câmera vê: - // - Se câmera aponta NORTE: -0° → seta aponta PARA CIMA (norte) - // - Se câmera aponta LESTE: -π/2 → seta aponta PARA A ESQUERDA (norte relativo) - // - Se câmera aponta SUL: -π → seta aponta PARA BAIXO (norte relativo) - // - Se câmera aponta OESTE: -(-π/2) = +π/2 → seta aponta PARA A DIREITA (norte relativo) - - (_display displayCtrl BRAF_NORTH_ARROW) ctrlSetAngle [ -_absDir_rad, 0.5, 0.5 ]; \ No newline at end of file diff --git a/braf_air2/braf_fnc/fn_initRSC.sqf b/braf_air2/braf_fnc/fn_initRSC.sqf deleted file mode 100644 index 0a8de01..0000000 --- a/braf_air2/braf_fnc/fn_initRSC.sqf +++ /dev/null @@ -1,48 +0,0 @@ -/* - Author: Brazilian Armed Forces - File: fn_initRSC.sqf - - Objetivo: - - Cria e gerencia o loop EachFrame que chama uma função de atualização BRAF_fnc_flirControls - -*/ - -disableSerialization; - -params ["_display"]; - -// Diagnóstico: Verificar se a função está definida -if (isNil "BRAF_fnc_flirControls") then { - systemChat "[BRAF A-29] AVISO: BRAF_fnc_flirControls não foi carregada!"; -}; - -uiNamespace setVariable ["BRAF_A29_UI_Display", _display]; - -if ((uiNamespace getVariable ["BRAF_A29_PFH_eachFrame", -1]) > -1) then { - removeMissionEventHandler ["EachFrame", (uiNamespace getVariable "BRAF_A29_PFH_eachFrame")]; - uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", nil]; -}; - -private _pfh = addMissionEventHandler ["EachFrame", { - if (cameraView != "GUNNER") exitWith {}; - - private _display = uiNamespace getVariable ["BRAF_A29_UI_Display", displayNull]; - - if (isNull _display) exitWith { - removeMissionEventHandler ["EachFrame", (uiNamespace getVariable "BRAF_A29_PFH_eachFrame")]; - uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", nil]; - uiNamespace setVariable ["BRAF_A29_UI_Display", nil]; - }; - - private _veh = vehicle player; - if (isNull _veh) exitWith { - removeMissionEventHandler ["EachFrame", (uiNamespace getVariable "BRAF_A29_PFH_eachFrame")]; - uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", nil]; - uiNamespace setVariable ["BRAF_A29_UI_Display", nil]; - }; - - [_display] call BRAF_fnc_flirControls; -}]; - -uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", _pfh]; -//systemChat "[BRAF A-29] Sistema FLIR iniciado com sucesso"; diff --git a/braf_air2/config.cpp b/braf_air2/config.cpp index 84d86f0..afd58db 100644 --- a/braf_air2/config.cpp +++ b/braf_air2/config.cpp @@ -13,6 +13,7 @@ class CfgPatches { "BRAF_Insignia", "BRAF_Soft", "BRAF_Air", + "BRAF_Optics_Air", }; requiredVersion = 0.1; units[] = { @@ -79,11 +80,6 @@ class CfgFunctions { file = "braf\braf_air2\braf_fnc\fn_remove_before_flight.sqf"; };*/ }; - class UI { - file = "braf\braf_air2\braf_fnc"; - class initRSC {}; - class flirControls {}; - }; }; }; @@ -147,9 +143,7 @@ class VehicleSystemsTemplateRightGunner class components; }; class RCWSOptics; -class Optics_Armored; #include "braf_air_anim\CfgMovesBasic.hpp" -#include "braf_optics_air2\BRAF_AirOptics.hpp" class CfgVehicles { class Air; class ParachuteBase; diff --git a/braf_air2/textures.lst b/braf_air2/textures.lst index db98c2e..5e80c38 100644 --- a/braf_air2/textures.lst +++ b/braf_air2/textures.lst @@ -1,4 +1 @@ braf_air2\braf_airplanes\braf_super_tucano\data\a29_sms_co.png -braf_air2\braf_optics_air2\a29\data\braf_a29_reticulo_m_white_ca.png -braf_air2\braf_optics_air2\a29\data\braf_a29_reticulo_n_white_ca.png -braf_air2\braf_optics_air2\a29\data\braf_a29_reticulo_w_white_ca.png