diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index fc89a0f2ec..13f84bd5d0 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -368,6 +368,40 @@ class CfgVehicles { }; }; + class Car_F: Car{}; + class Quadbike_01_base_F: Car_F { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + class GVAR(flip) { + displayName = CSTRING(Flip); + condition = QUOTE(call DFUNC(canFlip)); + statement = QUOTE([ARR_3(QQGVAR(flip),_target,_target)] call CBA_fnc_targetEvent); + }; + class GVAR(push) { + displayName = CSTRING(Push); + condition = QUOTE(_target call FUNC(canPush)); + statement = QUOTE(call FUNC(push)); + }; + }; + }; + }; + class Kart_01_Base_F: Car_F { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + class GVAR(flip) { + displayName = CSTRING(Flip); + condition = QUOTE(call DFUNC(canFlip)); + statement = QUOTE([ARR_3(QQGVAR(flip),_target,_target)] call CBA_fnc_targetEvent); + }; + class GVAR(push) { + displayName = CSTRING(Push); + condition = QUOTE(_target call FUNC(canPush)); + statement = QUOTE(call FUNC(push)); + }; + }; + }; + }; + class Tank: LandVehicle { class ACE_Actions { class ACE_MainActions { @@ -545,6 +579,11 @@ class CfgVehicles { exceptions[] = {"isNotSwimming"}; insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; + class GVAR(flip) { + displayName = CSTRING(Flip); + condition = QUOTE(call DFUNC(canFlip)); + statement = QUOTE([ARR_3(QQGVAR(flip),_target,_target)] call CBA_fnc_targetEvent); + }; }; }; diff --git a/addons/interaction/XEH_PREP.hpp b/addons/interaction/XEH_PREP.hpp index 1a70de8831..06dd7acbe0 100644 --- a/addons/interaction/XEH_PREP.hpp +++ b/addons/interaction/XEH_PREP.hpp @@ -42,4 +42,5 @@ PREP(openDoor); PREP(canPush); PREP(push); +PREP(canFlip); PREP(switchLamp); diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index a93f5461b2..3604f94511 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -28,6 +28,14 @@ ACE_Modifier = 0; {_lamp setHit [_x select 0, (_x select 1) max _disabledLampDMG];nil} count _hitPointsDamage; }] call CBA_fnc_addEventHandler; + +[QGVAR(flip), { + params ["_vehicle"]; + private _position = getPosATL _vehicle; + _vehicle setVectorUp surfaceNormal _position; + _vehicle setPosATL _position; +}] call CBA_fnc_addEventHandler; + [QGVAR(setCollisionLight), { (_this select 0) setCollisionLight (_this select 1); }] call CBA_fnc_addEventHandler; diff --git a/addons/interaction/functions/fnc_canFlip.sqf b/addons/interaction/functions/fnc_canFlip.sqf new file mode 100644 index 0000000000..70c004920c --- /dev/null +++ b/addons/interaction/functions/fnc_canFlip.sqf @@ -0,0 +1,25 @@ +/* + * Author: Dystopian + * Checks if vehicle can be flipped. + * + * Arguments: + * 0: Vehicle + * + * Return Value: + * Can Flip + * + * Example: + * [cursorObject] call ace_interaction_fnc_canFlip + * + * Public: No + */ +#include "script_component.hpp" + +params ["_vehicle"]; + +// most suitable mass for all vanilla, CUP and RHS statics ATM (ZU-23 suits, D-30 and M119 don't suit) +#define FLIP_MAX_STATICWEAPON_MASS 2000 + +1 < (vectorUp _vehicle) vectorDistance (surfaceNormal getPosATL _vehicle) +&& {0 == {alive _x} count crew _vehicle || {isAutonomous _vehicle}} +&& {getMass _vehicle <= FLIP_MAX_STATICWEAPON_MASS} diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index c0fd822f86..50c086a8fa 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -832,7 +832,7 @@ Pchnij Tlačit Tolás - Толкать + Толкнуть Empurrar Spingere 押す @@ -840,6 +840,10 @@ + + Flip + Перевернуть + Interact Interagir