mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
476 lines
17 KiB
Plaintext
476 lines
17 KiB
Plaintext
|
#include "script_component.hpp"
|
||
|
|
||
|
ADDON = false;
|
||
|
|
||
|
PREP(menuDef_stake);
|
||
|
PREP(menuDef_stake_self);
|
||
|
|
||
|
PREP(isKindOf);
|
||
|
|
||
|
PREP(onPickupStake);
|
||
|
PREP(onPlaceStake);
|
||
|
PREP(onModifyStake);
|
||
|
|
||
|
PREP(onPlaceStakeConfirm);
|
||
|
PREP(onPlaceStakeCancel);
|
||
|
|
||
|
ACE_ARTY_COLLIMATORS = [];
|
||
|
ACE_ARTY_COLLIMATORS_PFH_ID = -1;
|
||
|
|
||
|
FUNC(milsFromGunBarrel) = {
|
||
|
private "_gunDir";
|
||
|
PARAMS_2(_gun,_obj);
|
||
|
// TODO: get relative directoin of placement from barrel in mils
|
||
|
};
|
||
|
|
||
|
FUNC(findGun) = {
|
||
|
private["_detectorPos", "_distance", "_target","_targets","_closeDist"];
|
||
|
_target = objNull;
|
||
|
_detectorPos = [0, 0, 0];
|
||
|
|
||
|
for [
|
||
|
{_distance = 10},
|
||
|
{(_distance <= viewdistance) && ((_detectorPos select 2) > -2) && isNull _target},
|
||
|
{_distance = _distance + 10}
|
||
|
] do {
|
||
|
_detectorPos = positionCameraToWorld [0, 0, _distance];
|
||
|
_targets = _detectorPos nearEntities ["StaticWeapon", 10];
|
||
|
|
||
|
if (count _targets > 0) exitWith {
|
||
|
private["_closeDist", "_dist"];
|
||
|
_closeDist = 9999;
|
||
|
{
|
||
|
private["_gun"];
|
||
|
_gun = _x;
|
||
|
_dist = player distance _gun;
|
||
|
if(_dist < _closeDist) then {
|
||
|
_closeDist = _dist;
|
||
|
_target = _gun;
|
||
|
};
|
||
|
} forEach _targets;
|
||
|
_target
|
||
|
};
|
||
|
};
|
||
|
_target
|
||
|
};
|
||
|
|
||
|
FUNC(collimatorHandler) = {
|
||
|
_gp = positionCameraToWorld [0,0,0];
|
||
|
_gp set[2, getTerrainHeightASL [_gp select 0, _gp select 1]];
|
||
|
_nearCollimators = (positionCameraToWorld [0,0,0]) nearEntities ["ACE_Arty_M1A1_Collimator", 20];
|
||
|
_moved = false;
|
||
|
{
|
||
|
_lastPos = _x getVariable [QGVAR(colLastPos), [0,0,0]];
|
||
|
if(_lastPos distance (getPosASL _x) > 0) exitWith {
|
||
|
_moved = true;
|
||
|
};
|
||
|
} forEach _nearCollimators;
|
||
|
_proxies = (positionCameraToWorld [0,0,0]) nearEntities ["ACE_Arty_Collimator_Proxy", 20];
|
||
|
if((count _proxies) != (count _nearCollimators)) then {
|
||
|
_moved = true;
|
||
|
};
|
||
|
if(_moved) then {
|
||
|
ACE_ARTY_COLLIMATORS = [];
|
||
|
{
|
||
|
deleteVehicle _x;
|
||
|
} forEach _proxies;
|
||
|
};
|
||
|
_newCollimators = _nearCollimators - ACE_ARTY_COLLIMATORS;
|
||
|
{
|
||
|
// player sideChat format["creating proxyaaaa"];
|
||
|
_collimatorProxy = "ACE_Arty_Collimator_Proxy" createVehicleLocal (getPos _x);
|
||
|
_collimatorProxy setDir 180;
|
||
|
_collimatorProxy attachTo [_x, [0,0,0], "optic_proxy"];
|
||
|
_x setVariable ["ace_collimator_proxy", _collimatorProxy];
|
||
|
} forEach _newCollimators;
|
||
|
_oldCollimators = ACE_ARTY_COLLIMATORS - _nearCollimators;
|
||
|
{
|
||
|
// player sideChat format["deleting proxy"];
|
||
|
_collimatorProxy = _x getVariable "ace_collimator_proxy";
|
||
|
detach _collimatorProxy;
|
||
|
deleteVehicle _collimatorProxy;
|
||
|
} forEach _oldCollimators;
|
||
|
ACE_ARTY_COLLIMATORS = _nearCollimators;
|
||
|
{
|
||
|
_collimatorProxy = _x getVariable "ace_collimator_proxy";
|
||
|
_x setVariable [QGVAR(colLastPos), (getPosASL _x)];
|
||
|
_cp = _collimatorProxy modelToWorld (_collimatorProxy selectionPosition "optic");
|
||
|
_cp set[2, getTerrainHeightASL [_cp select 0, _cp select 1]];
|
||
|
_dis = (_gp distance _cp);
|
||
|
_disDif = 0.59-(_dis * 0.062);
|
||
|
_collimatorProxy animate["expand_ul", _disDif];
|
||
|
_collimatorProxy animate["expand_ur", _disDif];
|
||
|
_collimatorProxy animate["expand_ll", _disDif];
|
||
|
_collimatorProxy animate["expand_lr", _disDif];
|
||
|
_offset = 0;
|
||
|
_relDir = [_collimatorProxy, _gp] call BIS_fnc_relativeDirTo;
|
||
|
_relDir = (_relDir-180);
|
||
|
_relDir = DEG2MIL(_relDir);
|
||
|
_cf = -0.0011*(_dis^2) + 0.1335*_dis - 1.005;
|
||
|
_relDir = _relDir + (_relDir*_cf);
|
||
|
_collimatorProxy animate["offset", _relDir];
|
||
|
_colRot = _x animationPhase "rotate_optic";
|
||
|
_collimatorProxy setDir MIL2DEG(_colRot);
|
||
|
// player sideChat format["ds: %1", _colRot];
|
||
|
// _wepVec = (vehicle player) weaponDirection ((weapons (vehicle player)) select 0);
|
||
|
// _wepDir = (_wepVec call CBA_fnc_vect2polar) select 1;
|
||
|
// _wepDir = DEG2MIL(_wepDir);
|
||
|
// player sideChat format["_wepDir: %1", _wepDir];
|
||
|
} forEach ACE_ARTY_COLLIMATORS;
|
||
|
};
|
||
|
|
||
|
FUNC(startCollimatorHandler) = {
|
||
|
ACE_ARTY_COLLIMATORS = [];
|
||
|
ACE_ARTY_COLLIMATORS_PFH_ID = [FUNC(collimatorHandler), 0.0, []] call CBA_fnc_addPerFrameHandler;
|
||
|
};
|
||
|
|
||
|
FUNC(endCollimatorHandler) = {
|
||
|
{
|
||
|
_collimatorProxy = _x getVariable "ace_collimator_proxy";
|
||
|
detach _collimatorProxy;
|
||
|
deleteVehicle _collimatorProxy;
|
||
|
} forEach ACE_ARTY_COLLIMATORS;
|
||
|
[ACE_ARTY_COLLIMATORS_PFH_ID] call CBA_fnc_removePerFrameHandler;
|
||
|
ACE_ARTY_COLLIMATORS = [];
|
||
|
};
|
||
|
|
||
|
FUNC(onAlignCollimator) = {
|
||
|
// player sideChat format["lol"];
|
||
|
GVAR(aligningCollimator) = _this select 0;
|
||
|
_pos = GVAR(aligningCollimator) modelToWorld (GVAR(aligningCollimator) selectionPosition "sight_begin");
|
||
|
_camera = "camera" camCreate _pos;
|
||
|
_camera cameraEffect ["internal", "back"];
|
||
|
_camera camSetTarget (GVAR(aligningCollimator) modelToWorld (GVAR(aligningCollimator) selectionPosition "sight_end"));
|
||
|
_camera camSetFov 0.2;
|
||
|
_camera camCommit 0.1;
|
||
|
|
||
|
|
||
|
showCinemaBorder false;
|
||
|
GVAR(collimatorAlignHorz) = GVAR(aligningCollimator) animationPhase "rotate_optic";
|
||
|
GVAR(collimatorAlignVert) = GVAR(aligningCollimator) animationPhase "elevate_optic";
|
||
|
[] call FUNC(addKeys);
|
||
|
_func = {
|
||
|
_camera = (_this select 0) select 0;
|
||
|
if(GVAR(aligning)) then {
|
||
|
_pos = GVAR(aligningCollimator) modelToWorld (GVAR(aligningCollimator) selectionPosition "sight_begin");
|
||
|
_camera camSetPos _pos;
|
||
|
_camera camSetTarget (GVAR(aligningCollimator) modelToWorld (GVAR(aligningCollimator) selectionPosition "sight_end"));
|
||
|
camUseNVG ace_sys_nvg_on;
|
||
|
_camera camSetFov 0.2;
|
||
|
_camera camCommit 0.1;
|
||
|
} else {
|
||
|
_camera cameraEffect ["terminate", "back"];
|
||
|
cutrsc ["default", "PLAIN DOWN"];
|
||
|
camDestroy _camera;
|
||
|
[] call FUNC(removeKeys);
|
||
|
[(_this select 1)] call CBA_fnc_removePerFrameHandler;
|
||
|
};
|
||
|
};
|
||
|
GVAR(aligning) = true;
|
||
|
[_func, 0.05, [_camera]] call CBA_fnc_addPerFrameHandler;
|
||
|
};
|
||
|
|
||
|
FUNC(addKeys) = {
|
||
|
GVAR(key_dn) = (findDisplay 46) displayAddEventHandler["KeyDown", '["KeyDown", _this] call FUNC(keyEvent)'];
|
||
|
GVAR(key_up) = (findDisplay 46) displayAddEventHandler["KeyUp", '["KeyUp", _this] call FUNC(keyEvent)'];
|
||
|
};
|
||
|
|
||
|
FUNC(removeKeys) = {
|
||
|
(findDisplay 46) displayRemoveEventhandler ["KeyDown", GVAR(key_dn)];
|
||
|
(findDisplay 46) displayRemoveEventhandler ["KeyUp", GVAR(key_up)];
|
||
|
};
|
||
|
|
||
|
FUNC(keyEvent) = {
|
||
|
_event = _this select 0;
|
||
|
_parameters = _this select 1;
|
||
|
|
||
|
if (GVAR(presstime) == time) exitwith {false};
|
||
|
GVAR(presstime) = time;
|
||
|
switch(_event) do {
|
||
|
case "KeyDown": {
|
||
|
_key = _parameters select 1;
|
||
|
switch(_key) do {
|
||
|
case 0xCD: { GVAR(collimatorAlignHorz) = GVAR(collimatorAlignHorz) + 0.25; };
|
||
|
case 0xCB: { GVAR(collimatorAlignHorz) = GVAR(collimatorAlignHorz) - 0.25; };
|
||
|
case 0xD0: { GVAR(collimatorAlignVert) = GVAR(collimatorAlignVert) + 0.25; };
|
||
|
case 0xC8: { GVAR(collimatorAlignVert) = GVAR(collimatorAlignVert) - 0.25; };
|
||
|
case 1: { GVAR(aligning) = false; };
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
if ((GVAR(aligningCollimator) animationPhase "rotate_optic") != GVAR(collimatorAlignHorz)) then {
|
||
|
GVAR(aligningCollimator) animate ["rotate_optic", GVAR(collimatorAlignHorz)];
|
||
|
};
|
||
|
if ((GVAR(aligningCollimator) animationPhase "elevate_optic") != GVAR(collimatorAlignVert)) then {
|
||
|
GVAR(aligningCollimator) animate ["elevate_optic", GVAR(collimatorAlignVert)];
|
||
|
};
|
||
|
!(GVAR(aligning))
|
||
|
};
|
||
|
|
||
|
GVAR(placingStake) = false;
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
AIMING CIRCLE CODE
|
||
|
*/
|
||
|
|
||
|
GVAR(aimingCircleViewIndex) = 1;
|
||
|
GVAR(aimingCircleCurrentViews) = nil;
|
||
|
GVAR(aimingCircleCurrentDeflection) = 0;
|
||
|
GVAR(aimingCircleCurrentDeflectionFine) = 0;
|
||
|
|
||
|
GVAR(aimingCircleCurrentElevation) = 0;
|
||
|
GVAR(aimingCircleCurrentElevationFine) = 0;
|
||
|
|
||
|
GVAR(aimingCircleCurrentOrientation) = 0;
|
||
|
|
||
|
|
||
|
GVAR(aimingCircleMainViews) = [
|
||
|
[["view_elevation", "gunEnd"], 0.5, 0, [], 0, [], 0],
|
||
|
["gunnerview", 0.5, 0, [], 0, [], 0],
|
||
|
[["view_deflection", "centerpoint"], 0.45, 0, [], 0, [], 0],
|
||
|
[["view_needle", "view_target_reticle"], 0.44, 0, [], 0, [], 0]
|
||
|
];
|
||
|
|
||
|
//
|
||
|
GVAR(currentAimingCircle) = nil;
|
||
|
GVAR(aimingCircleCam) = nil;
|
||
|
GVAR(aimingCircleDisplayOpen) = false;
|
||
|
GVAR(aimingCircleActionIds) = [];
|
||
|
GVAR(aimingCircleLights) = [];
|
||
|
GVAR(aimingCircleLightLoopPid) = [] spawn { };
|
||
|
|
||
|
|
||
|
FUNC(aimingCircleGetOut) = {
|
||
|
PARAMS_3(_circle,_pos,_unit);
|
||
|
|
||
|
if (_unit == player) then {
|
||
|
{
|
||
|
GVAR(currentAimingCircle) removeAction _x;
|
||
|
} forEach GVAR(aimingCircleActionIds);
|
||
|
_needleUnlocked = GVAR(currentAimingCircle) getVariable[QGVAR(aimingCircleNeedleUnlocked), false];
|
||
|
if(_needleUnlocked) then {
|
||
|
GVAR(currentAimingCircle) setVariable[QGVAR(aimingCircleNeedleUnlocked), false];
|
||
|
};
|
||
|
GVAR(aimingCircleActionIds) = [];
|
||
|
GVAR(currentAimingCircle) = nil;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleCloseDisplay) = {
|
||
|
GVAR(aimingCircleCam) cameraEffect ["terminate", "back"];
|
||
|
cutrsc ["default", "PLAIN DOWN"];
|
||
|
camDestroy GVAR(aimingCircleCam);
|
||
|
GVAR(aimingCircleCam) = nil;
|
||
|
GVAR(currentAimingCircle) switchCamera "INTERNAL";
|
||
|
GVAR(aimingCircleDisplayOpen) = false;
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleInitDisplay) = {
|
||
|
GVAR(aimingCircleDisplayOpen) = true;
|
||
|
[GVAR(aimingCircleMainViews), GVAR(aimingCircleViewIndex)] call FUNC(aimingCircleSetView);
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleSetView) = {
|
||
|
_views = _this select 0;
|
||
|
GVAR(aimingCircleCurrentViews) = _views;
|
||
|
_index = _this select 1;
|
||
|
_selectedView = _views select _index;
|
||
|
if(IS_ARRAY((_selectedView select 0))) then {
|
||
|
GVAR(currentAimingCircle) switchCamera "INTERNAL";
|
||
|
_viewPositions = _selectedView select 0;
|
||
|
_snap = false;
|
||
|
_camPos = (GVAR(currentAimingCircle) modelToWorld (GVAR(currentAimingCircle) selectionPosition (_viewPositions select 0)));
|
||
|
_targetPos = (GVAR(currentAimingCircle) modelToWorld (GVAR(currentAimingCircle) selectionPosition (_viewPositions select 1)));
|
||
|
if (isNil QGVAR(aimingCircleCam)) then {
|
||
|
GVAR(aimingCircleCam) = "camera" camCreate _camPos;
|
||
|
_snap = true;
|
||
|
showCinemaBorder false;
|
||
|
};
|
||
|
preloadCamera _targetPos;
|
||
|
5 preloadObject GVAR(currentAimingCircle);
|
||
|
GVAR(aimingCircleCam) camPreload 5;
|
||
|
GVAR(aimingCircleCam) camSetPos _camPos;
|
||
|
GVAR(aimingCircleCam) cameraEffect ["internal", "back"];
|
||
|
GVAR(aimingCircleCam) camSetTarget _targetPos;
|
||
|
GVAR(aimingCircleCam) camSetFov (_selectedView select 1);
|
||
|
if(_snap) then {
|
||
|
GVAR(aimingCircleCam) camCommit 0;
|
||
|
} else {
|
||
|
GVAR(aimingCircleCam) camCommit (_selectedView select 2);
|
||
|
};
|
||
|
} else {
|
||
|
GVAR(aimingCircleCam) cameraEffect ["terminate", "back"];
|
||
|
cutrsc ["default", "PLAIN DOWN"];
|
||
|
camDestroy GVAR(aimingCircleCam);
|
||
|
GVAR(aimingCircleCam) = nil;
|
||
|
if((_selectedView select 0) == "gunnerview") then {
|
||
|
GVAR(currentAimingCircle) switchCamera "GUNNER";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleHandleAdjustKey) = {
|
||
|
_key = _this select 1;
|
||
|
_shift = _this select 2;
|
||
|
_ctrl = _this select 3;
|
||
|
_orient = false;
|
||
|
if(GVAR(currentAimingCircle) animationPhase "right_cover" == 1) then {
|
||
|
_orient = true;
|
||
|
};
|
||
|
|
||
|
if(_key == 205 || {_key == 203}) then {
|
||
|
if(!_shift) then {
|
||
|
_amount = 1;
|
||
|
if(_ctrl) then {
|
||
|
_amount = 0.25;
|
||
|
};
|
||
|
if(_key == 203) then {
|
||
|
_amount = _amount*-1;
|
||
|
};
|
||
|
if(_orient) then {
|
||
|
GVAR(aimingCircleCurrentOrientation) = GVAR(aimingCircleCurrentOrientation) + _amount;
|
||
|
GVAR(currentAimingCircle) animate ["MainTurret", GVAR(aimingCircleCurrentOrientation)];
|
||
|
GVAR(currentAimingCircle) animate ["orienting_knobs", GVAR(aimingCircleCurrentOrientation)];
|
||
|
} else {
|
||
|
GVAR(aimingCircleCurrentDeflectionFine) = GVAR(aimingCircleCurrentDeflectionFine) + _amount;
|
||
|
GVAR(aimingCircleCurrentDeflection) = GVAR(aimingCircleCurrentDeflection) + _amount;
|
||
|
GVAR(currentAimingCircle) animate ["upper_motion", GVAR(aimingCircleCurrentDeflection)];
|
||
|
GVAR(currentAimingCircle) animate ["deflection_knob", GVAR(aimingCircleCurrentDeflectionFine)];
|
||
|
};
|
||
|
} else {
|
||
|
_amount = 100;
|
||
|
if(_key == 203) then {
|
||
|
_amount = _amount*-1;
|
||
|
};
|
||
|
if(_orient) then {
|
||
|
_currentPhase = GVAR(currentAimingCircle) animationPhase "MainTurret";
|
||
|
if(_currentPhase == GVAR(aimingCircleCurrentOrientation)) then {
|
||
|
GVAR(aimingCircleCurrentOrientation) = GVAR(aimingCircleCurrentOrientation) + _amount;
|
||
|
GVAR(currentAimingCircle) animate ["MainTurret", GVAR(aimingCircleCurrentOrientation)];
|
||
|
GVAR(currentAimingCircle) animate ["orienting_knobs", GVAR(aimingCircleCurrentOrientation)];
|
||
|
};
|
||
|
} else {
|
||
|
_currentPhase = GVAR(currentAimingCircle) animationPhase "upper_motion";
|
||
|
if(_currentPhase == GVAR(aimingCircleCurrentDeflection)) then {
|
||
|
GVAR(aimingCircleCurrentDeflection) = GVAR(aimingCircleCurrentDeflection) + _amount;
|
||
|
GVAR(currentAimingCircle) animate ["upper_motion", GVAR(aimingCircleCurrentDeflection)];
|
||
|
GVAR(currentAimingCircle) animate ["deflection_knob_coarse", (GVAR(currentAimingCircle) animationPhase "deflection_knob_coarse")+(_amount/100)];
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleHandleKey) = {
|
||
|
_key = _this select 1;
|
||
|
_move = false;
|
||
|
if(_key in [203, 205, 200, 208]) then {
|
||
|
_this call FUNC(aimingCircleHandleAdjustKey);
|
||
|
} else {
|
||
|
if(_key in (actionKeys "MoveForward")) then {
|
||
|
GVAR(aimingCircleViewIndex) = (GVAR(aimingCircleViewIndex) - 1) max 0;
|
||
|
_move = true;
|
||
|
};
|
||
|
if(_key in (actionKeys "MoveBack")) then {
|
||
|
GVAR(aimingCircleViewIndex) = (GVAR(aimingCircleViewIndex) + 1) min ((count GVAR(aimingCircleCurrentViews))-1);
|
||
|
_move = true;
|
||
|
};
|
||
|
if(_move) then {
|
||
|
[GVAR(aimingCircleMainViews), GVAR(aimingCircleViewIndex)] call FUNC(aimingCircleSetView);
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleMonitor) = {
|
||
|
if(player in GVAR(currentAimingCircle)) then {
|
||
|
if(cameraView == "GUNNER") then {
|
||
|
if(!GVAR(aimingCircleDisplayOpen)) then {
|
||
|
createDialog "ace_sys_aimingpoints_aimingCircleDisplay";
|
||
|
};
|
||
|
};
|
||
|
if(GVAR(aimingCircleDisplayOpen)) then {
|
||
|
[GVAR(aimingCircleMainViews), GVAR(aimingCircleViewIndex)] call FUNC(aimingCircleSetView);
|
||
|
};
|
||
|
_needleUnlocked = GVAR(currentAimingCircle) getVariable[QGVAR(aimingCircleNeedleUnlocked), false];
|
||
|
if(_needleUnlocked) then {
|
||
|
_currentAzi = GVAR(currentAimingCircle) getVariable[QGVAR(aimingCircleCurrentAzi), 0];
|
||
|
_currentDir = (getDir GVAR(currentAimingCircle));
|
||
|
if(_currentDir != _currentAzi) then {
|
||
|
GVAR(currentAimingCircle) setVariable[QGVAR(aimingCircleCurrentAzi), _currentDir, true];
|
||
|
GVAR(currentAimingCircle) animate ["compass_needle", _currentDir];
|
||
|
};
|
||
|
};
|
||
|
} else {
|
||
|
[(_this select 1)] call CBA_fnc_removePerFrameHandler;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleHandleLight) = {
|
||
|
_ac = _this select 0;
|
||
|
_state = _this select 1;
|
||
|
if(_state) then {
|
||
|
_light = "#lightPoint" createVehicleLocal [0,0,0];
|
||
|
_light lightAttachObject [_ac, [0,0,2]];
|
||
|
_light setLightBrightness 0.005;
|
||
|
_light setLightAmbient[1, 0.5, 0.5];
|
||
|
_light setLightColor[1, 0.5, 0.5];
|
||
|
GVAR(aimingCircleLights) set[(count GVAR(aimingCircleLights)), [_ac, _light]];
|
||
|
_ac setVariable [QGVAR(aimingCircleLightPoint), _light];
|
||
|
if(scriptDone GVAR(aimingCircleLightLoopPid)) then {
|
||
|
GVAR(aimingCircleLightLoopPid) = [] spawn FUNC(aimingCircleLightLoop);
|
||
|
};
|
||
|
} else {
|
||
|
_lightObj = _ac getVariable QGVAR(aimingCircleLightPoint);
|
||
|
_ac setVariable [QGVAR(aimingCircleLightPoint), nil];
|
||
|
deleteVehicle _lightObj;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleLightLoop) = {
|
||
|
while { (count GVAR(aimingCircleLights)) > 0 } do {
|
||
|
_tempArray = [];
|
||
|
{
|
||
|
_ac = _x select 0;
|
||
|
_light = _x select 1;
|
||
|
if(!alive _ac) then {
|
||
|
deleteVehicle _light;
|
||
|
} else {
|
||
|
if(alive _light) then {
|
||
|
_tempArray set[(count _tempArray), _x];
|
||
|
};
|
||
|
};
|
||
|
} forEach GVAR(aimingCircleLights);
|
||
|
GVAR(aimingCircleLights) = _tempArray;
|
||
|
sleep 0.1;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleGetIn) = {
|
||
|
PARAMS_3(_circle,_pos,_unit);
|
||
|
|
||
|
if (_unit == player) then {
|
||
|
GVAR(currentAimingCircle) = _circle;
|
||
|
[FUNC(aimingCircleMonitor), 0] call CBA_fnc_addPerFrameHandler;
|
||
|
_actionId = GVAR(currentAimingCircle) addAction ["Uncover Orienting Knobs", QPATHTO_C(fnc_uncoverKnobs.sqf), [], -100, false, true, "", "gunner _target == player && {(_target animationPhase 'right_cover') == 0}"];
|
||
|
GVAR(aimingCircleActionIds) set[(count GVAR(aimingCircleActionIds)), _actionId];
|
||
|
_actionId = GVAR(currentAimingCircle) addAction ["Cover Orienting Knobs", QPATHTO_C(fnc_coverKnobs.sqf), [], -100, false, true, "", "gunner _target == player && {(_target animationPhase 'right_cover') == 1}"];
|
||
|
GVAR(aimingCircleActionIds) set[(count GVAR(aimingCircleActionIds)), _actionId];
|
||
|
_actionId = GVAR(currentAimingCircle) addAction ["Unlock Compass Needle", QPATHTO_C(fnc_needle.sqf), [], -100, false, true, "", format["gunner _target == player && !(_target getVariable[""%1"", false])", QGVAR(aimingCircleNeedleUnlocked)]];
|
||
|
GVAR(aimingCircleActionIds) set[(count GVAR(aimingCircleActionIds)), _actionId];
|
||
|
_actionId = GVAR(currentAimingCircle) addAction ["Lock Compass Needle", QPATHTO_C(fnc_needle.sqf), [], -100, false, true, "", format["gunner _target == player && (_target getVariable[""%1"", false])", QGVAR(aimingCircleNeedleUnlocked)]];
|
||
|
GVAR(aimingCircleActionIds) set[(count GVAR(aimingCircleActionIds)), _actionId];
|
||
|
_actionId = GVAR(currentAimingCircle) addAction ["Turn On Lamp", QPATHTO_C(fnc_lamp.sqf), [], -100, false, true, "", format["gunner _target == player && !(_target getVariable[""%1"", false])", QGVAR(aimingCircleLampOn)]];
|
||
|
GVAR(aimingCircleActionIds) set[(count GVAR(aimingCircleActionIds)), _actionId];
|
||
|
_actionId = GVAR(currentAimingCircle) addAction ["Turn Off Lamp", QPATHTO_C(fnc_lamp.sqf), [], -100, false, true, "", format["gunner _target == player && (_target getVariable[""%1"", false])", QGVAR(aimingCircleLampOn)]];
|
||
|
GVAR(aimingCircleActionIds) set[(count GVAR(aimingCircleActionIds)), _actionId];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
FUNC(aimingCircleInit) = {
|
||
|
_ac = _this select 0;
|
||
|
_ac setVectorUp [0,0,0.000001];
|
||
|
};
|
||
|
|
||
|
ADDON = true;
|