diff --git a/addons/chemical/CfgVehicles.hpp b/addons/chemical/CfgVehicles.hpp index 7773ee2f3..3dfc8842c 100644 --- a/addons/chemical/CfgVehicles.hpp +++ b/addons/chemical/CfgVehicles.hpp @@ -190,7 +190,6 @@ class CfgVehicles { }; }; - class Box_NATO_AmmoOrd_F; class ACE_Box_82mm_Mo_HE: Box_NATO_AmmoOrd_F { class TransportMagazines; diff --git a/addons/chemical/CfgWeapons.hpp b/addons/chemical/CfgWeapons.hpp index 81fc65409..f018c9070 100644 --- a/addons/chemical/CfgWeapons.hpp +++ b/addons/chemical/CfgWeapons.hpp @@ -28,6 +28,15 @@ class CfgWeapons { }; }; + class ItemWatch; + class KAT_ChemicalDetector: ItemWatch { + ACE_hideItemType = "Watch"; + author = "Mazinski"; + descriptionShort = CSTRING(ChemicalDetectorDescription); + displayName = CSTRING(ChemicalDetectorDisplayName); + picture = QPATHTOF(UI\kat_chemicalDet_icon.paa); + }; + class CannonCore; class mortar_82mm: CannonCore { magazines[] += { diff --git a/addons/chemical/RscTitles.hpp b/addons/chemical/RscTitles.hpp new file mode 100644 index 000000000..0415928cf --- /dev/null +++ b/addons/chemical/RscTitles.hpp @@ -0,0 +1,83 @@ +#define KAT_CHEM_GRID_WAbs (((safezoneW / safezoneH) min 0.7)) +#define KAT_CHEM_GRID_HAbs ((((safezoneW / safezoneH) min 1.2) / 1.6)) +#define KAT_CHEM_GRID_W ((((safeZoneW / safeZoneH) min 0.7) / 40)) +#define KAT_CHEM_GRID_H (((((safeZoneW / safeZoneH) min 1.2) / 1.2) / 25)) +#define KAT_CHEM_GRID_X ((safeZoneX + (safeZoneW - ((safeZoneW / safeZoneH) min 1.2)) / 11)) +#define KAT_CHEM_GRID_Y ((safeZoneY + (safeZoneH - (((safeZoneW / safeZoneH) min 1.2) / 1.2)) / 0.8)) + +#define KAT_CHEM_POS_H(N) ((N) * KAT_CHEM_GRID_H) + +#define ST_LEFT 0 +#define ST_CENTER 2 +#define ST_RIGHT 1 + +#define pixelW (1 / (getResolution select 2)) +#define pixelH (1 / (getResolution select 3)) +#define pixelScale 0.50 + +// pixel grids macros +#define UI_GRID_W (pixelW * pixelGridBase) +#define UI_GRID_H (pixelH * pixelGridBase) + +#define SAFEZONE_X_RIGHTEDGE ((safeZoneX - 1) * -1) +#define SAFEZONE_Y_LOWEDGE ((safeZoneY - 1) * -1) + +#define FRAME_W(N) ((UI_GRID_W * (N)) * (1.7777 / (getResolution select 4))) +#define FRAME_H(N) ((UI_GRID_H * (N))) + +class RscTitles +{ + class KAT_ChemicalDetector + { + idd = 18835; + enableSimulation = 1; + movingEnable = 0; + fadeIn=0; + fadeOut=1; + duration = 10e10; + onLoad = "uiNamespace setVariable ['KAT_ChemicalDetector', _this select 0];"; + class controls + { + class KatChemIcon: RscPicture + { + idc = 18801; + text = "\x\kat\addons\chemical\UI\kat_chemicalDet.paa"; + x = QUOTE(SAFEZONE_X_RIGHTEDGE - FRAME_W(25) - FRAME_W(15)); + y = QUOTE(SAFEZONE_Y_LOWEDGE - FRAME_H(25)); + w = QUOTE(FRAME_W(25)); + h = QUOTE(FRAME_H(25)); + }; + class KatChemTime: RscText + { + idc = 18804; + style = ST_CENTER; + shadow = 0; + font = "PuristaBold"; + text = "12:00"; //--- ToDo: Localize; + x = QUOTE(SAFEZONE_X_RIGHTEDGE - FRAME_W(25) - FRAME_W(7.2)); + y = QUOTE(SAFEZONE_Y_LOWEDGE - FRAME_H(6)); + w = QUOTE(FRAME_W(7.5)); + h = QUOTE(FRAME_H(4)); + colorBackground[] = {0,0,0,0}; + colorText[] = {0.3,0.3,0.3,0.8}; + sizeEx = QUOTE(FRAME_H(2)); + }; + class KatChemStrength: RscText + { + idc = 18805; + style = ST_RIGHT; + valign = "middle"; + shadow = 0; + font = "PuristaBold"; + text = "0"; //--- ToDo: Localize; + x = QUOTE(SAFEZONE_X_RIGHTEDGE - FRAME_W(25) - FRAME_W(2.1)); + y = QUOTE(SAFEZONE_Y_LOWEDGE - FRAME_H(7.5)); + w = QUOTE(FRAME_W(5)); + h = QUOTE(FRAME_H(3)); + colorBackground[] = {0,0,0,0}; + colorText[] = {0.3,0.3,0.3,0.8}; + sizeEx = QUOTE(FRAME_H(2.2)); + }; + }; + }; +}; diff --git a/addons/chemical/XEH_PREP.hpp b/addons/chemical/XEH_PREP.hpp index 7052ebf94..6ec1136ba 100644 --- a/addons/chemical/XEH_PREP.hpp +++ b/addons/chemical/XEH_PREP.hpp @@ -29,8 +29,10 @@ PREP(handleGasMaskDur); PREP(handleRespawn); PREP(hasGasmask); PREP(hasGasMaskON); +PREP(hideChemDetector); PREP(init); PREP(initModule); +PREP(showChemDetector); PREP(spawnSmoke); PREP(throwGrenade); PREP(treatmentAdvanced_AtropineLocal); diff --git a/addons/chemical/XEH_postInit.sqf b/addons/chemical/XEH_postInit.sqf index 4d65f1f2c..8d1202fb7 100644 --- a/addons/chemical/XEH_postInit.sqf +++ b/addons/chemical/XEH_postInit.sqf @@ -43,3 +43,16 @@ if (hasInterface) then { private _items = missionNamespace getVariable [QGVAR(availGasmask), "'G_AirPurifyingRespirator_01_F'"]; private _array = [_items, "CfgGlasses"] call FUNC(getList); missionNamespace setVariable [QGVAR(availGasmaskList), _array, true]; + +["KAT_ChemicalDetector", QGVAR(showChemDetector), "Show Chemical Detector", { + // Conditions: canInteract + if (!([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call ACEFUNC(common,canInteractWith)) || {!('KAT_ChemicalDetector' in assignedItems ACE_player)}) exitWith { false }; + + if !(GETMVAR(GVAR(ChemDetectorActive),false)) then { + [ACE_player] call FUNC(showChemDetector); + } else { + call FUNC(hideChemDetector); + }; + + true +}, { false }, [24, [false, false, false]], false] call CBA_fnc_addKeybind; diff --git a/addons/chemical/config.cpp b/addons/chemical/config.cpp index 24987709c..a8c873fb0 100644 --- a/addons/chemical/config.cpp +++ b/addons/chemical/config.cpp @@ -15,7 +15,8 @@ class CfgPatches { "kat_gasmaskFilter", "KAT_M7A3", "KAT_CAS_M43_Bomb", - "KAT_CAS_R_80mm_GAS_POD" + "KAT_CAS_R_80mm_GAS_POD", + "KAT_ChemicalDetector" }; ammo[] = { "KAT_Gas_TripWireMine_Ammo", @@ -60,5 +61,6 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgSounds.hpp" #include "ui\RscAttributes.hpp" +#include "RscTitles.hpp" #include "ACE_Medical_Treatment_Actions.hpp" #include "CfgGlasses.hpp" diff --git a/addons/chemical/functions/fnc_gasCheck.sqf b/addons/chemical/functions/fnc_gasCheck.sqf index bf2cbc5d0..f08c7d5e9 100644 --- a/addons/chemical/functions/fnc_gasCheck.sqf +++ b/addons/chemical/functions/fnc_gasCheck.sqf @@ -27,6 +27,7 @@ _radius_min = if (_radius_min isEqualTo 0) then {_radius_max / 2} else {_radius_ _logic setVariable [QGVAR(gas_active), true, true]; _logic setVariable [QGVAR(gas_playerArr), [], true]; _logic setVariable [QGVAR(gas_position), _position, true]; +_logic setVariable [QGVAR(gas_radius), _radius_max, true]; // Function to check players within the gas zone private _checkPlayers = { diff --git a/addons/chemical/functions/fnc_hideChemDetector.sqf b/addons/chemical/functions/fnc_hideChemDetector.sqf new file mode 100644 index 000000000..078732747 --- /dev/null +++ b/addons/chemical/functions/fnc_hideChemDetector.sqf @@ -0,0 +1,19 @@ +#include "..\script_component.hpp" +/* + * Author: Garth 'L-H' de Wet + * Modified: Mazinski + * Removes the KWatch from the screen. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call kat_watch_fnc_hideKWatch + * + * Public: No + */ +GVAR(ChemDetectorActive) = false; +"KAT_ChemicalDetector" cutText ["","PLAIN",0,true]; \ No newline at end of file diff --git a/addons/chemical/functions/fnc_showChemDetector.sqf b/addons/chemical/functions/fnc_showChemDetector.sqf new file mode 100644 index 000000000..6b0e51908 --- /dev/null +++ b/addons/chemical/functions/fnc_showChemDetector.sqf @@ -0,0 +1,70 @@ +#include "..\script_component.hpp" +/* + * Author: Garth 'L-H' de Wet + * Modified: Mazinski + * Displays the KWatch on screen. + * + * Arguments: + * 0: unit + * + * Return Value: + * None + * + * Example: + * [player] call kat_watch_fnc_showKWatch + * + * Public: Yes + */ + +params ["_unit"]; + +"KAT_ChemicalDetector" cutRsc ["KAT_ChemicalDetector", "PLAIN", 0, true]; + +if (isNull (uiNamespace getVariable ["KAT_ChemicalDetector", displayNull])) exitWith {}; + +GVAR(ChemDetectorActive) = true; + +private _display = uiNamespace getVariable ["KAT_ChemicalDetector", displayNull]; +private _background = _display displayCtrl 18801; +private _time = _display displayCtrl 18804; +private _exposure = _display displayCtrl 18805; + +[{ + _this params ["_args", "_pfhID"]; + _args params ["_unit", "_time", "_exposure"]; + + if !(GVAR(ChemDetectorActive)) exitWith { + _pfhID call CBA_fnc_removePerFrameHandler; + }; + + if !(alive _unit) exitWith { + call FUNC(hideChemDetector); + _pfhID call CBA_fnc_removePerFrameHandler; + }; + + if !("KAT_ChemicalDetector" in assignedItems _unit) exitWith { + call FUNC(hideChemDetector); + _pfhID call CBA_fnc_removePerFrameHandler; + }; + + private _hour = floor dayTime; + private _minute = floor ((dayTime - _hour) * 60); + + _time ctrlSetText (format ["%1:%2", [_hour, 2] call CBA_fnc_formatNumber, [_minute, 2] call CBA_fnc_formatNumber]); + + private _gas = nearestObjects [_unit, ["kat_module_zeus_gas"], 2000]; + + if ((count _gas) > 0) then { + private _distance = _unit distance (_gas select 0); + private _radius = (_gas select 0) getVariable [QGVAR(gas_radius), 0]; + + _exposure ctrlSetText ((linearConversion[0, _radius, _distance, 1, 0, true]) toFixed 2); + } else { + _exposure ctrlSetText str (0); + }; + +}, 1, [ + _unit, + _time, + _exposure +]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/chemical/stringtable.xml b/addons/chemical/stringtable.xml index 27b3712f1..7b61fed95 100644 --- a/addons/chemical/stringtable.xml +++ b/addons/chemical/stringtable.xml @@ -181,6 +181,12 @@ Герметик, который используется для герметизации предметов, например, при утечке токсичного вещества Afdichtmiddel dat gebruikt wordt om een object te dichten wanneer er bijvoorbeeld een giftige stof lekt + + JCAD Chemical Detector + + + Used to detect KAT toxic chemicals + Put on gas mask Poner mascara de gas diff --git a/addons/chemical/ui/RscAttributes.hpp b/addons/chemical/ui/RscAttributes.hpp index 969ac852f..ba9271f2c 100644 --- a/addons/chemical/ui/RscAttributes.hpp +++ b/addons/chemical/ui/RscAttributes.hpp @@ -12,8 +12,6 @@ class RscPicture; class ctrlToolbox; class RscButton; - - class RscDisplayAttributes { class Controls { class Background; diff --git a/addons/chemical/ui/kat_chemicalDet.paa b/addons/chemical/ui/kat_chemicalDet.paa new file mode 100644 index 000000000..5cd5c910d Binary files /dev/null and b/addons/chemical/ui/kat_chemicalDet.paa differ diff --git a/addons/chemical/ui/kat_chemicalDet_icon.paa b/addons/chemical/ui/kat_chemicalDet_icon.paa new file mode 100644 index 000000000..a8080a317 Binary files /dev/null and b/addons/chemical/ui/kat_chemicalDet_icon.paa differ