diff --git a/addons/spectator/XEH_postInit.sqf b/addons/spectator/XEH_postInit.sqf index 1adef9c16a..deab8fc675 100644 --- a/addons/spectator/XEH_postInit.sqf +++ b/addons/spectator/XEH_postInit.sqf @@ -14,6 +14,7 @@ };*/ GVAR(availableModes) = [[0,1,2], [1,2], [0], [1], [2]] select GVAR(restrictModes); GVAR(availableVisions) = [[-2,-1,0,1], [-2,-1], [-2,0,1], [-2]] select GVAR(restrictVisions); + GVAR(camMode) = GVAR(availableModes) select 0; if (GVAR(system)) then { // Add event handlers to correctly enter spectator upon death diff --git a/addons/spectator/functions/fnc_setCameraAttributes.sqf b/addons/spectator/functions/fnc_setCameraAttributes.sqf index 41eb38e2d9..94ba7234e8 100644 --- a/addons/spectator/functions/fnc_setCameraAttributes.sqf +++ b/addons/spectator/functions/fnc_setCameraAttributes.sqf @@ -8,11 +8,16 @@ * - 1: Internal * - 2: External * 1: Camera unit (objNull for random) - * 2: Camera position (ASL) - * 3: Camera pan (0 - 360) - * 4: Camera tilt (-90 - 90) - * 5: Camera zoom (0.1 - 2) - * 6: Camera speed (m/s) + * 2: Camera vision + * - -2: Normal + * - -1: Night vision + * - 0: Thermal white hot + * - 1: Thermal black hot + * 3: Camera position (ASL) + * 4: Camera pan (0 - 360) + * 5: Camera tilt (-90 - 90) + * 6: Camera zoom (0.1 - 2) + * 7: Camera speed (m/s) * * Return Value: * None @@ -25,18 +30,37 @@ #include "script_component.hpp" -params [["_mode",GVAR(camMode),[0]], ["_unit",GVAR(camUnit),[objNull]], ["_position",GVAR(camPos),[[]],3], ["_heading",GVAR(camPan),[0]], ["_tilt",GVAR(camTilt),[0]], ["_zoom",GVAR(camZoom),[0]], ["_speed",GVAR(camSpeed),[0]]]; +params [ + ["_mode",GVAR(camMode),[0]], + ["_unit",GVAR(camUnit),[objNull]], + ["_vision",GVAR(camVision),[0]], + ["_position",GVAR(camPos),[[]],3], + ["_heading",GVAR(camPan),[0]], + ["_tilt",GVAR(camTilt),[0]], + ["_zoom",GVAR(camZoom),[0]], + ["_speed",GVAR(camSpeed),[0]] +]; // Normalize input -GVAR(camMode) = floor((_mode min 3) max 0); +if !(_mode in GVAR(availableModes)) then { + _mode = GVAR(availableModes) select 0; +}; + +if !(_vision in GVAR(availableVisions)) then { + _vision = GVAR(availableVisions) select 0; +}; + GVAR(camPan) = ((_heading % 360) max 0); GVAR(camPosition) = _position; GVAR(camSpeed) = _speed; GVAR(camTilt) = ((_heading min -90) max 90); GVAR(camUnit) = _unit; +GVAR(camVision) = _vision; GVAR(camZoom) = (_zoom min 2) max 0; // Apply if camera exists if !(isNil QGVAR(camera)) then { - [] call FUNC(transitionCamera); + [_mode,_unit,_vision] call FUNC(transitionCamera); +} else { + GVAR(camMode) = _mode; }; diff --git a/addons/spectator/functions/fnc_transitionCamera.sqf b/addons/spectator/functions/fnc_transitionCamera.sqf index db9ca12bd5..0dcea4d6c0 100644 --- a/addons/spectator/functions/fnc_transitionCamera.sqf +++ b/addons/spectator/functions/fnc_transitionCamera.sqf @@ -27,11 +27,6 @@ params [["_newMode",GVAR(camMode)], ["_newUnit",GVAR(camUnit)], ["_newVision",GVAR(camVision)]]; -if !(_newMode in GVAR(availableModes)) exitWith { - [1] call FUNC(cycleCamera); - [nil, _newUnit, _newVision] call FUNC(transitionCamera); -}; - // When no units available to spectate, exit to freecam if (GVAR(unitList) isEqualTo []) then { _newMode = 0;