ACE3/addons/interaction/functions/fnc_openDoor.sqf

72 lines
2.0 KiB
Plaintext
Raw Normal View History

/*
* Author: commy2
* Opens door
*
* Arguments:
* 0: House <OBJECT>
* 1: Door <STRING>
*
* Return value:
* None
*
* Example:
* [house, "door"] call ace_interaction_fnc_openDoor
*
* Public: No
*/
2015-01-11 23:13:47 +00:00
#include "script_component.hpp"
2015-01-11 19:32:51 +00:00
2015-05-16 03:52:54 +00:00
private ["_info", "_phase", "_position", "_time", "_usedMouseWheel", "_getDoorAnimations"];
2015-01-11 19:32:51 +00:00
_info = [MACRO_DOOR_REACH_DISTANCE] call FUNC(getDoor);
2015-01-11 19:32:51 +00:00
2015-05-09 20:14:00 +00:00
EXPLODE_2_PVT(_info,_house,_door);
2015-01-11 19:32:51 +00:00
if (isNull _house) exitWith {};
2015-05-16 03:52:54 +00:00
_getDoorAnimations = [_house, _door] call FUNC(getDoorAnimations);
2015-01-11 19:32:51 +00:00
2015-05-16 03:52:54 +00:00
EXPLODE_2_PVT(_getDoorAnimations,_animations,_lockedVariable);
2015-01-11 19:32:51 +00:00
if (count _animations == 0) exitWith {};
if (_house animationPhase (_animations select 0) <= 0 && {_house getVariable [_lockedVariable select 0, 0] == 1}) exitWith {
_lockedVariable set [0, _house];
_lockedVariable spawn compile preprocessFileLineNumbers "\A3\Structures_F\scripts\LockedDoor_open.sqf";
2015-01-11 19:32:51 +00:00
};
2015-01-11 23:13:47 +00:00
GVAR(isOpeningDoor) = true;
playSound "ACE_Sound_Click"; //@todo replace with smth. more fitting
2015-01-11 19:32:51 +00:00
[_house, _animations] spawn {
2015-05-01 23:12:24 +00:00
private ["_house", "_animations", "_phase", "_position", "_time", "_usedMouseWheel"];
_house = _this select 0;
_animations = _this select 1;
2015-01-11 19:32:51 +00:00
_phase = _house animationPhase (_animations select 0);
_position = getPosASL ACE_player;
2015-01-11 19:32:51 +00:00
_time = ACE_time + 0.2;
_usedMouseWheel = false;
waitUntil {
if (inputAction "PrevAction" > 0 || {inputAction "NextAction" > 0}) then {
_usedMouseWheel = true;
};
2015-01-11 19:32:51 +00:00
_phase = _phase + (inputAction "PrevAction" / 12) min 1;
_phase = _phase - (inputAction "NextAction" / 12) max 0;
2015-01-11 19:32:51 +00:00
{_house animate [_x, _phase]} forEach _animations;
2015-01-11 19:32:51 +00:00
!GVAR(isOpeningDoor) || {getPosASL ACE_player distance _position > 1}
};
2015-01-11 19:32:51 +00:00
if (!_usedMouseWheel && {ACE_time < _time} && {[ACE_player, objNull, []] call EFUNC(common,canInteractWith)}) then {
_phase = [0, 1] select (_house animationPhase (_animations select 0) < 0.5);
2015-01-11 19:32:51 +00:00
{_house animate [_x, _phase]} forEach _animations;
};
2015-01-11 19:32:51 +00:00
GVAR(isOpeningDoor) = false;
2015-01-11 19:32:51 +00:00
};