mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
75f7ed7532
* Utilize isNotEqualTo * undo changes to some files * redo some changes, fix based on @Vdauphin 's comment * fix validator issues Co-authored-by: PabstMirror <pabstmirror@gmail.com>
71 lines
2.5 KiB
Plaintext
71 lines
2.5 KiB
Plaintext
#include "script_component.hpp"
|
|
/*
|
|
* Author: TheDrill, PabstMirror
|
|
* On keypress, point and send position to nearby players
|
|
*
|
|
* Arguments:
|
|
* None
|
|
*
|
|
* Return Value:
|
|
* Key Handeled <BOOL>
|
|
*
|
|
* Example:
|
|
* [] call ace_finger_fnc_keyPress;
|
|
*
|
|
* Public: No
|
|
*/
|
|
|
|
|
|
if (!alive ACE_player) exitWith {false};
|
|
// Conditions: canInteract
|
|
if !([ACE_player, ACE_player, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
|
//make sure player is dismounted or in a static weapon:
|
|
if ((ACE_player != vehicle ACE_player) && {!((vehicle ACE_player) isKindOf "StaticWeapon")}) exitWith {false};
|
|
//Check camera view (not in GUNNER)
|
|
if !(cameraView in ["INTERNAL", "EXTERNAL"]) exitWith {false};
|
|
//Exit if run recently (run every 1 seconds)
|
|
if (diag_tickTime < (GVAR(lastFPTime) + FP_ACTION_TIMEOUT)) exitWith {true};
|
|
|
|
GVAR(lastFPTime) = diag_tickTime;
|
|
|
|
// Find where is the finger pointing
|
|
private _originASL = AGLtoASL positionCameraToWorld [0, 0, 0];
|
|
private _fingerPosASL = AGLtoASL positionCameraToWorld [0, 0, FP_DISTANCE];
|
|
private _intersections = lineIntersectsSurfaces [_originASL, _fingerPosASL, ACE_player, vehicle ACE_player, true, 1];
|
|
if (_intersections isNotEqualTo []) then {
|
|
_fingerPosASL = _intersections select 0 select 0;
|
|
};
|
|
|
|
// Find who should the finger be sent to
|
|
private _playerEyePosASL = eyePos ACE_player;
|
|
private _sendFingerToPlayers = [];
|
|
private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]);
|
|
{
|
|
_nearbyMen append (crew _x);
|
|
} count (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]);
|
|
{
|
|
if ((((eyePos _x) vectorDistance _playerEyePosASL) < GVAR(maxRange)) &&
|
|
{alive _x} &&
|
|
{(_x == (vehicle _x)) || {(vehicle _x) isKindOf "StaticWeapon"}} &&
|
|
{GVAR(indicatorForSelf) || {_x != ACE_player}} &&
|
|
{((lineIntersectsSurfaces [(eyePos _x), _playerEyePosASL, vehicle ACE_player, vehicle _x]) isEqualTo [])} &&
|
|
{[_x] call EFUNC(common,isPlayer)}) then {
|
|
|
|
_sendFingerToPlayers pushBack _x;
|
|
};
|
|
true
|
|
} count _nearbyMen;
|
|
|
|
TRACE_1("sending finger to",_sendFingerToPlayers);
|
|
|
|
[QGVAR(fingered), [ACE_player, _fingerPosASL, _originASL vectorDistance _fingerPosASL], _sendFingerToPlayers] call CBA_fnc_targetEvent;
|
|
|
|
// BI gestures do not work underwater, play custom "point" gesture if loaded
|
|
if (["ace_gestures"] call EFUNC(common,isModLoaded)) then {
|
|
QEGVAR(gestures,point) call EFUNC(gestures,playSignal); // Works underwater
|
|
} else {
|
|
[ACE_player, "GestureGo"] call EFUNC(common,doGesture); // Does not work underwater
|
|
};
|
|
|
|
true
|