From 20dd8f34fcc771c7922a75150777beee7f2b4d5e Mon Sep 17 00:00:00 2001 From: commy2 Date: Thu, 26 Mar 2015 15:06:51 +0100 Subject: [PATCH] fall down after getting shot while moving --- addons/hitreactions/$PBOPREFIX$ | 1 + addons/hitreactions/CfgEventHandlers.hpp | 14 +++++ addons/hitreactions/XEH_preInit.sqf | 7 +++ addons/hitreactions/config.cpp | 15 +++++ .../hitreactions/functions/fnc_fallDown.sqf | 57 +++++++++++++++++++ .../functions/script_component.hpp | 1 + addons/hitreactions/script_component.hpp | 12 ++++ 7 files changed, 107 insertions(+) create mode 100644 addons/hitreactions/$PBOPREFIX$ create mode 100644 addons/hitreactions/CfgEventHandlers.hpp create mode 100644 addons/hitreactions/XEH_preInit.sqf create mode 100644 addons/hitreactions/config.cpp create mode 100644 addons/hitreactions/functions/fnc_fallDown.sqf create mode 100644 addons/hitreactions/functions/script_component.hpp create mode 100644 addons/hitreactions/script_component.hpp diff --git a/addons/hitreactions/$PBOPREFIX$ b/addons/hitreactions/$PBOPREFIX$ new file mode 100644 index 0000000000..b2a9a05ac5 --- /dev/null +++ b/addons/hitreactions/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\hitreactions \ No newline at end of file diff --git a/addons/hitreactions/CfgEventHandlers.hpp b/addons/hitreactions/CfgEventHandlers.hpp new file mode 100644 index 0000000000..1eea968973 --- /dev/null +++ b/addons/hitreactions/CfgEventHandlers.hpp @@ -0,0 +1,14 @@ + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_Hit_EventHandlers { + class CAManBase { + class ADDON { + hit = QUOTE(_this call FUNC(fallDown)); + }; + }; +}; diff --git a/addons/hitreactions/XEH_preInit.sqf b/addons/hitreactions/XEH_preInit.sqf new file mode 100644 index 0000000000..d3c0973ee7 --- /dev/null +++ b/addons/hitreactions/XEH_preInit.sqf @@ -0,0 +1,7 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(fallDown); + +ADDON = true; diff --git a/addons/hitreactions/config.cpp b/addons/hitreactions/config.cpp new file mode 100644 index 0000000000..33d2665311 --- /dev/null +++ b/addons/hitreactions/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"commy2"}; + authorUrl = "https://github.com/commy2"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" diff --git a/addons/hitreactions/functions/fnc_fallDown.sqf b/addons/hitreactions/functions/fnc_fallDown.sqf new file mode 100644 index 0000000000..dc6b9703fd --- /dev/null +++ b/addons/hitreactions/functions/fnc_fallDown.sqf @@ -0,0 +1,57 @@ +// by commy2 +#include "script_component.hpp" + +private "_unit"; + +_unit = _this select 0; +_firer = _this select 1; +_damage = _this select 2; + +// don't fall on collision damage +if (_unit == _firer) exitWith {}; + +// don't fall after minor damage +if (_damage < 0.1) exitWith {}; + +// this checks most things, so it doesn't mess with being inside vehicles or while dragging etc. +if !([_unit, vehicle _unit] call EFUNC(common,canInteractWith)) exitWith {}; + +// only play animation when standing due to lack of animations, sry +if !(stance _unit in ["CROUCH", "STAND"]) exitWith {}; + +private "_velocity"; +_velocity = vectorMagnitude velocity _unit; + +// only fall when moving +if (_velocity < 2) exitWith {}; + +// get correct animation by weapon +private "_anim"; +_anim = switch (currentWeapon _unit) do { + case (""): {"AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon"}; + case (primaryWeapon _unit): { + [ + ["AmovPercMsprSlowWrfldf_AmovPpneMstpSrasWrflDnon_2", "AmovPercMsprSlowWrfldf_AmovPpneMstpSrasWrflDnon"] select (_velocity > 4), + ["AmovPercMsprSlowWrfldf_AmovPpneMstpSrasWrflDnon_2", "AmovPercMsprSlowWrfldf_AmovPpneMstpSrasWrflDnon"] select (_velocity > 4), + "AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDleft", + "AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDright" + ] select floor random 4; + }; + case (handgunWeapon _unit): { + [ + "AmovPercMsprSlowWpstDf_AmovPpneMstpSrasWpstDnon", + "AmovPercMsprSlowWpstDf_AmovPpneMstpSrasWpstDnon", + "AmovPercMstpSrasWpstDnon_AadjPpneMstpSrasWpstDleft", + "AmovPercMstpSrasWpstDnon_AadjPpneMstpSrasWpstDright" + ] select floor random 4; + }; + default {""}; +}; + +// exit if no animation for this weapon exists, i.E. binocular or rocket launcher +if (_anim == "") exitWith {}; + +// don't mess with transitions. don't fall then. +if ([_unit] call EFUNC(common,inTransitionAnim)) exitWith {}; + +[_unit, _anim, 2] call EFUNC(common,doAnimation); diff --git a/addons/hitreactions/functions/script_component.hpp b/addons/hitreactions/functions/script_component.hpp new file mode 100644 index 0000000000..ba26402e2b --- /dev/null +++ b/addons/hitreactions/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\hitreactions\script_component.hpp" \ No newline at end of file diff --git a/addons/hitreactions/script_component.hpp b/addons/hitreactions/script_component.hpp new file mode 100644 index 0000000000..011a3b6c31 --- /dev/null +++ b/addons/hitreactions/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT hitreactions +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_HITREACTIONS + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_HITREACTIONS + #define DEBUG_SETTINGS DEBUG_ENABLED_HITREACTIONS +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file