fn_open.sqf 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*
  2. Name: cTab_fnc_open
  3. Author(s):
  4. Gundy
  5. Description:
  6. Handles dialog / display startup and registering of event handlers
  7. This function will define cTabIfOpen, using the following format:
  8. Parameter 0: Interface type, 0 = Main, 1 = Secondary, 2 = Tertiary
  9. Parameter 1: Name of uiNameSpace variable for display / dialog (i.e. "cTab_Tablet_dlg")
  10. Parameter 2: Unit we registered the killed eventhandler for
  11. Parameter 3: ID of registered eventhandler for killed event
  12. Parameter 4: Vehicle we registered the GetOut eventhandler for (even if no EH is registered)
  13. Parameter 5: ID of registered eventhandler for GetOut event (nil if no EH is registered)
  14. Parameter 6: ID of registered eventhandler for Draw3D event (nil if no EH is registered)
  15. Parameter 7: ID of registered eventhandler A.C.E medical_onUnconscious event (nil if no EH is registered)
  16. Parameter 8: ID of registered eventhandler A.C.E playerInventoryChanged event (nil if no EH is registered)
  17. Parameters:
  18. 0: INTEGER - Interface type, 0 = Main, 1 = Secondary
  19. 1: STRING - Name of uiNameSpace variable for display / dialog (i.e. "cTab_Tablet_dlg")
  20. 2: OBJECT - Unit to register killed eventhandler for
  21. 3: OBJECT - Vehicle to register GetOut eventhandler for
  22. Returns:
  23. BOOLEAN - TRUE
  24. Example:
  25. // open TAD display as main interface type
  26. [0,"cTab_TAD_dsp",player,vehicle player] call cTab_fnc_open;
  27. */
  28. #include "\ClonecTab\shared\cTab_gui_macros.hpp"
  29. private ["_interfaceType","_displayName","_player","_vehicle","_playerKilledEhId","_vehicleGetOutEhId"];
  30. if (cTabIfOpenStart || (!isNil "cTabIfOpen")) exitWith {false};
  31. cTabIfOpenStart = true;
  32. _interfaceType = _this select 0;
  33. _displayName = _this select 1;
  34. _player = _this select 2;
  35. _vehicle = _this select 3;
  36. _isDialog = [_displayName] call cTab_fnc_isDialog;
  37. cTabIfOpen = [_interfaceType,_displayName,_player,
  38. _player addEventHandler ["killed",{[] call cTab_fnc_close}],
  39. _vehicle,nil,nil,nil,nil];
  40. if (_vehicle != _player && (_isDialog || _displayName in ["cTab_TAD_dsp"])) then {
  41. cTabIfOpen set [5,
  42. _vehicle addEventHandler ["GetOut",{if (_this select 2 == cTab_player) then {[] call cTab_fnc_close}}]
  43. ];
  44. };
  45. // Set up event handler to update display header / footer
  46. if (_displayName in ["cTab_TAD_dsp","cTab_TAD_dlg"]) then {
  47. cTabIfOpen set [6,
  48. addMissionEventHandler ["Draw3D",{
  49. _display = uiNamespace getVariable (cTabIfOpen select 1);
  50. _veh = vehicle cTab_player;
  51. _playerPos = getPosASL _veh;
  52. // update time
  53. (_display displayCtrl IDC_CTAB_OSD_TIME) ctrlSetText call cTab_fnc_currentTime;
  54. // update grid position
  55. (_display displayCtrl IDC_CTAB_OSD_GRID) ctrlSetText format ["%1", mapGridPosition _playerPos];
  56. // update current heading
  57. (_display displayCtrl IDC_CTAB_OSD_DIR_DEGREE) ctrlSetText format ["%1°",[direction _veh,3] call CBA_fnc_formatNumber];
  58. // update current elevation (ASL) on TAD
  59. (_display displayCtrl IDC_CTAB_OSD_ELEVATION) ctrlSetText format ["%1m",[round (_playerPos select 2),4] call CBA_fnc_formatNumber];
  60. }]
  61. ];
  62. } else {
  63. cTabIfOpen set [6,
  64. addMissionEventHandler ["Draw3D",{
  65. _display = uiNamespace getVariable (cTabIfOpen select 1);
  66. _veh = vehicle cTab_player;
  67. _heading = direction _veh;
  68. // update time
  69. (_display displayCtrl IDC_CTAB_OSD_TIME) ctrlSetText call cTab_fnc_currentTime;
  70. // update grid position
  71. (_display displayCtrl IDC_CTAB_OSD_GRID) ctrlSetText format ["%1", mapGridPosition getPosASL _veh];
  72. // update current heading
  73. (_display displayCtrl IDC_CTAB_OSD_DIR_DEGREE) ctrlSetText format ["%1°",[_heading,3] call CBA_fnc_formatNumber];
  74. (_display displayCtrl IDC_CTAB_OSD_DIR_OCTANT) ctrlSetText format ["%1",[_heading] call cTab_fnc_degreeToOctant];
  75. }]
  76. ];
  77. };
  78. // If ace_medical is used, register with medical_onUnconscious event
  79. if (isClass (configfile >> "CfgPatches" >> "ace_medical")) then {
  80. cTabIfOpen set [7,
  81. ["medical_onUnconscious",{
  82. if (_this select 0 == cTab_player && _this select 1) then {
  83. [] call cTab_fnc_close;
  84. };
  85. }] call ace_common_fnc_addEventHandler
  86. ];
  87. };
  88. // If ace_common is used, register with playerInventoryChanged event
  89. if (isClass (configfile >> "CfgPatches" >> "ace_common")) then {
  90. cTabIfOpen set [8,
  91. ["playerInventoryChanged",{
  92. _this call cTab_fnc_onPlayerInventoryChanged;
  93. }] call ace_common_fnc_addEventHandler
  94. ];
  95. };
  96. if (_isDialog) then {
  97. // Check if map and / or a dialog is open and close them
  98. if (visibleMap) then {openMap false};
  99. while {dialog} do {
  100. closeDialog 0;
  101. };
  102. createDialog _displayName;
  103. } else {
  104. cTabRscLayer cutRsc [_displayName,"PLAIN",0, false];
  105. };
  106. true