mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Add localUnits array and use that inside medical statemachines (#4836)
* Added localUnits EH Code by @Commy2 * Init localUnits Variable * use localUnits for medical_blood statemachine * use localUnits for medical_ai statemachine * Remove bracket hell * Add Deleted EH * Run at preInit, move to seperate file * Handle Respawns, Filter Dead * Add detection for Fake deleted EH * Use a getter function * delete all objNull at deletedEH * Cleanup header/comments * Move isBleeding check to inside statemachine * opps * debug off
This commit is contained in:
parent
4792e74b2b
commit
7f04d00b7f
@ -65,6 +65,7 @@ PREP(getFirstObjectIntersection);
|
||||
PREP(getFirstTerrainIntersection);
|
||||
PREP(getGunner);
|
||||
PREP(getInPosition);
|
||||
PREP(getLocalUnits);
|
||||
PREP(getMapData);
|
||||
PREP(getMapGridData);
|
||||
PREP(getMapGridFromPos);
|
||||
@ -156,6 +157,7 @@ PREP(setPitchBankYaw);
|
||||
PREP(setPlayerOwner);
|
||||
PREP(setProne);
|
||||
PREP(setSetting);
|
||||
PREP(setupLocalUnitsHandler);
|
||||
PREP(setVariableJIP);
|
||||
PREP(setVariablePublic);
|
||||
PREP(setVolume);
|
||||
|
@ -27,6 +27,8 @@ GVAR(statusEffect_isGlobal) = [];
|
||||
|
||||
GVAR(setHearingCapabilityMap) = [];
|
||||
|
||||
[] call FUNC(setupLocalUnitsHandler); // Add local units event handlers (ace_common_localUnits)
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Set up PlayerChanged eventhandler for pre init (EH is installed in postInit)
|
||||
//////////////////////////////////////////////////
|
||||
|
23
addons/common/functions/fnc_getLocalUnits.sqf
Normal file
23
addons/common/functions/fnc_getLocalUnits.sqf
Normal file
@ -0,0 +1,23 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: dedmen
|
||||
* Gets localUnits array filtering out nullObjects.
|
||||
* If you can handle null objects you can use the array `ace_common_localUnits` directly.
|
||||
* Should be equivalent to `allUnits select {local _x}`
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
*
|
||||
* Return Value:
|
||||
* Array of local Units <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_common_fnc_getLocalUnits
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
// Remove null objects
|
||||
GVAR(localUnits) = GVAR(localUnits) - [objNull];
|
||||
|
||||
GVAR(localUnits)
|
76
addons/common/functions/fnc_setupLocalUnitsHandler.sqf
Normal file
76
addons/common/functions/fnc_setupLocalUnitsHandler.sqf
Normal file
@ -0,0 +1,76 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: dedmen
|
||||
* Adds the local unit event handlers.
|
||||
* Access with function `ace_common_fnc_getLocalUnits` or array `ace_common_localUnits`
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_common_fnc_setupLocalUnitsHandler
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
GVAR(localUnits) = [];
|
||||
|
||||
// Eventhandlers to maintain array of localUnits
|
||||
["CAManBase", "init", {
|
||||
params ["_unit"];
|
||||
TRACE_2("unit init",_unit,local _unit);
|
||||
|
||||
if (local _unit) then {
|
||||
if (!alive _unit) exitWith {};
|
||||
GVAR(localUnits) pushBack _unit;
|
||||
};
|
||||
}] call CBA_fnc_addClassEventHandler;
|
||||
|
||||
["CAManBase", "respawn", {
|
||||
params ["_unit"];
|
||||
TRACE_2("unit respawn",_unit,local _unit);
|
||||
|
||||
if (local _unit) then {
|
||||
if (!alive _unit) exitWith {};
|
||||
GVAR(localUnits) pushBack _unit;
|
||||
};
|
||||
}] call CBA_fnc_addClassEventHandler;
|
||||
|
||||
["CAManBase", "local", {
|
||||
params ["_unit", "_local"];
|
||||
TRACE_2("unit local",_unit,_local);
|
||||
|
||||
if (_local) then {
|
||||
if (!alive _unit) exitWith {};
|
||||
GVAR(localUnits) pushBack _unit;
|
||||
} else {
|
||||
GVAR(localUnits) deleteAt (GVAR(localUnits) find _unit);
|
||||
};
|
||||
}] call CBA_fnc_addClassEventHandler;
|
||||
|
||||
["CAManBase", "deleted", {
|
||||
params ["_unit"];
|
||||
TRACE_2("unit deleted",_unit,local _unit);
|
||||
|
||||
if (local _unit) then {
|
||||
[{
|
||||
params ["_unit"];
|
||||
TRACE_3("unit deleted nextFrame",_unit,local _unit,isNull _unit);
|
||||
if (isNull _unit) then { // If it is not null then the deleted EH was Fake.
|
||||
GVAR(localUnits) = GVAR(localUnits) - [objNull];
|
||||
};
|
||||
}, [_unit]] call CBA_fnc_execNextFrame;
|
||||
};
|
||||
}] call CBA_fnc_addClassEventHandler;
|
||||
|
||||
["CAManBase", "killed", {
|
||||
params ["_unit"];
|
||||
TRACE_2("unit killed",_unit,local _unit);
|
||||
|
||||
if (local _unit) then {
|
||||
GVAR(localUnits) deleteAt (GVAR(localUnits) find _unit);
|
||||
};
|
||||
}] call CBA_fnc_addClassEventHandler;
|
@ -1,5 +1,5 @@
|
||||
class GVAR(stateMachine) {
|
||||
list = "allUnits select {local _x}";
|
||||
list = QUOTE(call EFUNC(common,getLocalUnits));
|
||||
skipNull = 1;
|
||||
|
||||
class Initial {
|
||||
|
@ -28,9 +28,9 @@ if (isServer) then {
|
||||
if ((GVAR(enabledFor) == 1) && {!hasInterface}) exitWith {}; // 1: enabledFor_OnlyPlayers
|
||||
|
||||
private _listcode = if (GVAR(enabledFor) == 1) then {
|
||||
{[ACE_player] select {[_x] call FUNC(isBleeding)}} // ace_player is only possible local player
|
||||
{[ACE_player]} // ace_player is only possible local player
|
||||
} else {
|
||||
{allUnits select {(local _x) && {[_x] call FUNC(isBleeding)}}}; // filter all local bleeding units
|
||||
EFUNC(common,getLocalUnits) // filter all local units
|
||||
};
|
||||
|
||||
private _stateMachine = [_listcode, true] call CBA_statemachine_fnc_create;
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
params ["_unit"];
|
||||
|
||||
if (!([_unit] call FUNC(isBleeding))) exitWith {};
|
||||
if (((vehicle _unit) != _unit) && {!((vehicle _unit) isKindOf "StaticWeapon")}) exitWith {}; // Don't bleed on ground if mounted
|
||||
|
||||
private _lastTime = _unit getVariable [QGVAR(lastTime), -10];
|
||||
|
Loading…
Reference in New Issue
Block a user