From e867e54de9aa05fec2305842b40e9541f8bb6488 Mon Sep 17 00:00:00 2001 From: Sotirios Pupakis Date: Thu, 25 Apr 2024 20:32:37 +0200 Subject: [PATCH] Towing --- .hemtt/missions/test.Stratis/mission.sqm | Bin 9480 -> 11698 bytes .hemtt/missions/~test.stratis/mission.sqm | Bin 0 -> 11379 bytes .hemtt/project.toml | 1 + addons/m119/XEH_PREP.hpp | 3 ++ addons/m119/XEH_postInit.sqf | 44 ++++++++++++++++++ addons/m119/functions/fnc_canBeTowed.sqf | 54 ++++++++++++++++++++++ addons/m119/functions/fnc_detach.sqf | 38 +++++++++++++++ addons/m119/functions/fnc_tow.sqf | 54 ++++++++++++++++++++++ addons/m119/script_component.hpp | 3 ++ addons/m119/stringtable.xml | 10 ++++ addons/m119/tbd_m119/CfgVehicles.hpp | 20 ++++++++ 11 files changed, 227 insertions(+) create mode 100644 .hemtt/missions/~test.stratis/mission.sqm create mode 100644 addons/m119/functions/fnc_canBeTowed.sqf create mode 100644 addons/m119/functions/fnc_detach.sqf create mode 100644 addons/m119/functions/fnc_tow.sqf diff --git a/.hemtt/missions/test.Stratis/mission.sqm b/.hemtt/missions/test.Stratis/mission.sqm index d484f2e902fe6a8d89dca99bbb97343034c8db8d..14cb1c55f544a82d6f80d384368571cdf8da57cc 100644 GIT binary patch literal 11698 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 delta 2804 zcmZ8jdu&rx82|3s)^^?2QP#EH)_1${6xMbdD&jV_IbaNMJVg0pUhD;KwmxX@+z3lB zQKJx1$T4Oy{DCn(5)_1pO3;Buj4^7!NJJ6+#~6u<;wwP`{mysq?Z75C{eACqzVrL; zxkolUzRUr6c@^N#hEHkZUPnM$w)Yml~)rm-Iwca*qy{KL@PC8w3V42}{26(5i!mQlvErQNU=C32Zk z{f#Q&38gHTEkKF%N&4Gv>HRe&os#wX@g9~^^Qb(u-FK&Sb>*Q+X=osQf{o-*r_M_) zl9Gj7yVPWTb&|;iHMK)Q{oVV=Pe{2RKWvqfylGNj0W4Pw8f?QlA+dpJ5>quLU4Uv7 zU@5|8Xe~8h9Nsfw0{Y4fZ4%Cyum##JhPD-sn6M4zSY<=K0G_lO@K*TCgtx)CXtyXA zZ-&c79EY)TQ=fqIMVy2_yQy!1qlobk!j(1rgVHhfUMa!VWg6=%BlvaMR(7V0H(Oo& z0n2*UZb9hdUs~3(BLa>}bNGB~Eq}+_FFi>pWE)_ASt<50+g3JiqgY4zAiHcsZ9U&v zKE%e#No%+Fv-3Jk+wWt2cG6z3uVF`Z*jur79`#m|KpxSyWb>d7Z&WkN5D;f1q=lwz z&gQqpVL6_`DhGeFD&&0xA=0B$)AH)Z5ltz8gj+`AFI5ZOr^pXw2~vWIXZ5%aN5FDL zhp*Lp7A&YVn*^E(6JV<{v`GjeO$AlWG`;AhRq`{wkU!eBxN~qx=jtU8z)G4psIt(~H;iCw3 zlEB6P1)M_pVin&rE#ed=b3<2z8$ax*;rpD^T%z)nZ9Z+DpL7Pp)B^@fGnz6CS>e-@ z(Ns;vray~=P}+E8`YcHn5Nzgv2<{pKazz-3ywHn92qxfModJ`ur`~`qu&BX+t?-8l z+u(qY-WU682CDCyCeB?=fw1Nmkj5<0ipTFJO7rQwE#j3Ng?h?~rr8WLJACtF zw2P9d)*uJOzKX4i!@4>y`&B*P%c;Jpi5vZFYCw3;`l7Q58I7Y1jtKN`3aY_nYw&N!6hk@nGgU-0qY(BpuQ z`$BED7jQ}eXO)Qdrx1$WE5P-bvGCQX$Gcyg!gM6v^%!k$!cRnd%g?LBiKcl`VL->5 z7SDgj#eY=sT8A|7?(rUU-4PD;e}g%MJ5)d}ucqbvwtEyghnw9OK;;%WliECz0VRln z$EmK<#al`T-l_7c!5j?`J>UhYU@OmDLRj$cq~K>XhS#};@6_>4F5z+p4N?G7|;iY zL3M_2ihex;a19@@nr~Y19YN`vK{0*f@S+J5aKVI0aEeH=loseVVJnOyd_988n9J8U z*02}DJl)vJE`(`}oDmwM?g)+1c!b6Xy~S$JU?6r)j1m6f7%ijbl};UeGdw5`r$~f2 zT)jz7z!(wZ#*4fJ1CSPC%1)v)1sGFynq-=?t5KS=#TYJ9m{T@DvY0Z9n6j}LZ=ZRm n`)$cI2577 diff --git a/.hemtt/missions/~test.stratis/mission.sqm b/.hemtt/missions/~test.stratis/mission.sqm new file mode 100644 index 0000000000000000000000000000000000000000..445979b3e24e5f04665f151afc119708d0da6cd2 GIT binary patch literal 11379 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 literal 0 HcmV?d00001 diff --git a/.hemtt/project.toml b/.hemtt/project.toml index 4c8c4ff..e48cd9d 100644 --- a/.hemtt/project.toml +++ b/.hemtt/project.toml @@ -24,6 +24,7 @@ workshop = [ "463939057", # ACE "2369477168", # Advanced Developer Tools "3058335345", # TBD Mortars + "843577117", # RHSUSAF ] mission = "test.Stratis" diff --git a/addons/m119/XEH_PREP.hpp b/addons/m119/XEH_PREP.hpp index 0c253c5..f51f69c 100644 --- a/addons/m119/XEH_PREP.hpp +++ b/addons/m119/XEH_PREP.hpp @@ -13,3 +13,6 @@ PREP(canLoad); PREP(canUnload); PREP(load); PREP(unload); +PREP(canBeTowed); +PREP(tow); +PREP(detach); diff --git a/addons/m119/XEH_postInit.sqf b/addons/m119/XEH_postInit.sqf index 421c54b..637df1e 100644 --- a/addons/m119/XEH_postInit.sqf +++ b/addons/m119/XEH_postInit.sqf @@ -1 +1,45 @@ #include "script_component.hpp" + +// Array of all towable vehicles and the offsets +GVAR(towingList) = [ + ["B_Truck_01.*", [0.025, -4.7, -0.8], -0.21], + ["B_MRAP_01.*", [0.01, -4.33, -0.8], -0.14], + ["rhsusf_M977A4.*", [-0.05, -4.8, -0.8], -0.14], + ["rhsusf_M1117.*", [0.03, -2.72, -0.9], -0.14], + ["rhsusf_M1078.*", [-0.03, -2.77, -0.98], -0.16], + ["rhsusf_M1083.*", [-0.01, -3.32, -0.98], -0.16], + ["rhsusf_M1084.*", [-0.03, -3.82, -0.88], -0.155], + ["rhsusf_M1220.*", [-0.04, -3.4, -1.44], -0.195], + ["rhsusf_M1230.*", [-0.04, -3.6, -2.02], -0.195], + ["rhsusf_M1232.*", [-0.04, -3.52, -0.37], -0.335], + ["rhsusf_M1237.*", [-0.04, -4.37, -0.44], -0.334], + ["rhsusf_m1240a1_usarmy_.*", [0.01, -3.1, -1.78], -0.25], + ["rhsusf_m1240a1.*", [0.01, -3.76, -1.78], -0.25], + ["rhsusf_m1025.*", [-0.065, -2.48, -1.17], -0.12], + ["rhsusf_m1043.*", [-0.065, -2.48, -1.17], -0.12], + ["rhsusf_m1045.*", [-0.065, -2.48, -0.98], -0.12], + ["rhsusf_m998.*", [0, -2.4, -0.88], -0.115], + ["rhsusf_m1151.*", [-0.05, -2.53, -0.7], -0.1], + ["rhsusf_m1152.*", [-0.05, -2.52, -0.7], -0.105], + ["rhsusf_m113d.*", [0.37, -1.93, -1.69], -0.035] +]; + +[QGVAR(detached), { + private _arty = _this#0; + [_arty, true, [0, 1.2, 0], 0, true] call ace_dragging_fnc_setDraggable; +}] call CBA_fnc_addEventHandler; + +[QGVAR(towed), { + private _arty = _this#0; + [_arty, false] call ace_dragging_fnc_setDraggable; +}] call CBA_fnc_addEventHandler; + +[QGVAR(tow), { + params ["_arty", "_veh", "_offX", "_offY", "_offZ", "_offRot"]; + private _offset = _arty selectionPosition "towing_point"; + private _offset = [_offset#0 + _offX, _offset#1 + _offY, _offZ]; + _arty attachTo [_veh, _offset]; + _arty setDir -180; + _arty animateSource ["rest_rotation_source", _offRot]; + _arty setPosWorld getPosWorld _arty; +}] call CBA_fnc_addEventHandler; diff --git a/addons/m119/functions/fnc_canBeTowed.sqf b/addons/m119/functions/fnc_canBeTowed.sqf new file mode 100644 index 0000000..c397f2f --- /dev/null +++ b/addons/m119/functions/fnc_canBeTowed.sqf @@ -0,0 +1,54 @@ +/* + FILE: fnc_canBeTowed.sqf + + Name: tbd_m119_m119_fnc_canBeTowed + + Author(s): + ilbinek + + Description: + Check if the M119 can be towed + + Parameters: + _arty - object - M119 to be checked + + Returns: + bool - true if the M119 can be towed + + Examples: + > [_arty] call tbd_m119_m119_fnc_canBeTowed; + + Public: + No +*/ + +#include "..\script_component.hpp" + +params ["_arty"]; + +// check if being towed +if (_arty getVariable [QGVAR(towed), false]) exitWith {false}; + +// Check if folded +if !(_arty getVariable [QGVAR(folded), false]) exitWith {false}; + +// Get pos of the towing point +private _pos = _arty modelToWorld (_arty selectionPosition ["towing_point", "Memory"]); +private _radius = TOW_RADIUS; +private _vehicles = _pos nearEntities _radius; + + +private _canBeTowed = false; +{ + private _veh = _x; + private _class = typeOf _veh; + { + if (_class regexMatch _x#0) then { + private _p = _veh modelToWorldVisual [_x#1#0, _x#1#1, _x#1#2]; + if (_p distance _pos < ATTACH_RADIUS) exitWith { _canBeTowed = true;}; + }; + } forEach GVAR(towingList); + if (_canBeTowed) exitWith {}; +} forEach _vehicles; + +_canBeTowed diff --git a/addons/m119/functions/fnc_detach.sqf b/addons/m119/functions/fnc_detach.sqf new file mode 100644 index 0000000..2495c0f --- /dev/null +++ b/addons/m119/functions/fnc_detach.sqf @@ -0,0 +1,38 @@ +/* + FILE: fnc_detach.sqf + + Name: tbd_m119_m119_fnc_detach + + Author(s): + ilbinek + + Description: + Detach the M119 from the object + + Parameters: + _arty - object - M119 to detach + + Returns: + Nothing + + Examples: + > [_arty] call tbd_m119_m119_fnc_detach; + + Public: + No +*/ + +#include "..\script_component.hpp" + +params ["_arty"]; + +_arty setVariable [QGVAR(towed), false, false]; + +[QGVAR(detached), [_arty], QGVAR(towJIP)] call CBA_fnc_globalEventJIP; +_arty animateSource ["rest_rotation_source", 0, 10]; + +detach _arty; + +_pos = getPos _arty; +_pos set [2, 0]; +_arty setPos _pos diff --git a/addons/m119/functions/fnc_tow.sqf b/addons/m119/functions/fnc_tow.sqf new file mode 100644 index 0000000..711fb86 --- /dev/null +++ b/addons/m119/functions/fnc_tow.sqf @@ -0,0 +1,54 @@ +/* + FILE: fnc_tow.sqf + + Name: tbd_m119_m119_fnc_tow + + Author(s): + ilbinek + + Description: + Start towing the M119 howitzer + + Parameters: + _arty - object - M119 to be towed + + Returns: + Nothing + + Examples: + > [_arty] call tbd_m119_m119_fnc_tow; + + Public: + No +*/ + +#include "..\script_component.hpp" + +params ["_arty"]; + +if (!([_arty] call FUNC(canBeTowed))) exitWith {}; + +// Find the vehicle I need to attach to +// Get pos of the towing point +private _pos = _arty modelToWorld (_arty selectionPosition ["towing_point", "Memory"]); +private _radius = TOW_RADIUS; +private _vehicles = _pos nearEntities _radius; + +private _canBeTowed = false; +{ + private _veh = _x; + private _class = typeOf _veh; + { + if (_class regexMatch _x#0) then { + private _p = _veh modelToWorldVisual [_x#1#0, _x#1#1, _x#1#2]; + if (_p distance _pos < ATTACH_RADIUS) exitWith { + _canBeTowed = true; + [QGVAR(tow), [_arty, _veh, _x#1#0, _x#1#1, _x#1#2, _x#2]] call CBA_fnc_serverEvent; + }; + }; + } forEach GVAR(towingList); + if (_canBeTowed) exitWith {}; +} forEach _vehicles; + +_arty setVariable [QGVAR(towed), true, true]; +[QGVAR(towed), [_vasil], QGVAR(towJIP)] call CBA_fnc_globalEventJIP; diff --git a/addons/m119/script_component.hpp b/addons/m119/script_component.hpp index ae76a3c..747eed1 100644 --- a/addons/m119/script_component.hpp +++ b/addons/m119/script_component.hpp @@ -38,3 +38,6 @@ #define TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_5 tbd_mortars_105mm_round_he_charge_mag_5 #define TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_6 tbd_mortars_105mm_round_he_charge_mag_6 #define TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_7 tbd_mortars_105mm_round_he_charge_mag_7 + +#define TOW_RADIUS 10 +#define ATTACH_RADIUS 2 \ No newline at end of file diff --git a/addons/m119/stringtable.xml b/addons/m119/stringtable.xml index 8d2f8a4..487de82 100644 --- a/addons/m119/stringtable.xml +++ b/addons/m119/stringtable.xml @@ -36,5 +36,15 @@ Vybít Разрядить + + Tow + Zaháknout + Прицепить + + + Detach + Odpojit + Отсоединить + diff --git a/addons/m119/tbd_m119/CfgVehicles.hpp b/addons/m119/tbd_m119/CfgVehicles.hpp index 10010c4..b5ff3ea 100644 --- a/addons/m119/tbd_m119/CfgVehicles.hpp +++ b/addons/m119/tbd_m119/CfgVehicles.hpp @@ -229,6 +229,8 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { + selection = "interact"; + class TBD_Fold { distance = 2.5; condition = QUOTE([ARR_1(_target)] call FUNC(canFold)); @@ -337,6 +339,24 @@ class CfgVehicles { statement = QUOTE([ARR_2(_target,0)] call FUNC(unload)); icon = "x\tbd_mortars\addons\main\data\unload.paa"; }; + + class TBD_Tow { + selection = "towing_point"; + distance = 2.5; + condition = QUOTE([ARR_1(_target)] call FUNC(canBeTowed)); + showDisabled = 0; + displayName = CSTRING(TOW); + statement = QUOTE([ARR_1(_target)] call FUNC(tow)); + }; + + class TBD_Detach { + selection = "towing_point"; + distance = 2.5; + condition = QUOTE(_target getVariable [ARR_2(QUOTE(QGVAR(towed)),false)]); + showDisabled = 0; + displayName = CSTRING(DETACH); + statement = QUOTE([ARR_1(_target)] call FUNC(detach)); + }; }; }; };