diff --git a/addons/spectator/XEH_preInit.sqf b/addons/spectator/XEH_preInit.sqf index ba5b288416..5d9fc20ac1 100644 --- a/addons/spectator/XEH_preInit.sqf +++ b/addons/spectator/XEH_preInit.sqf @@ -11,6 +11,7 @@ PREP(handleRespawn); PREP(handleToolbar); PREP(handleUnits); PREP(moduleSpectatorSettings); +PREP(setCameraAttributes); PREP(setSpectator); PREP(transitionCamera); PREP(toggleInterface); diff --git a/addons/spectator/functions/fnc_setCameraAttributes.sqf b/addons/spectator/functions/fnc_setCameraAttributes.sqf new file mode 100644 index 0000000000..d56259666a --- /dev/null +++ b/addons/spectator/functions/fnc_setCameraAttributes.sqf @@ -0,0 +1,42 @@ +/* + * Author: SilentSpike + * Sets the spectator camera attributes as desired + * + * Arguments: + * 0: Camera mode + * - 0: Free + * - 1: Internal + * - 2: External + * 1: Camera unit (objNull for random) + * 2: Camera position (ASL) + * 3: Camera heading (0 - 360) + * 4: Camera zoom (0.1 - 2) + * 5: Camera speed (m/s) + * + * Return Value: + * None + * + * Example: + * [1, objNull] call ace_spectator_fnc_setCameraAttributes + * + * Public: Yes + */ + +#include "script_component.hpp" + +params [["_mode",GVAR(camMode),[0]], ["_unit",GVAR(camUnit),[objNull]], ["_position",GVAR(camPos),[[]],3], ["_heading",GVAR(camPan),[0]], ["_zoom",GVAR(camZoom),[0]], ["_speed",GVAR(camSpeed),[0]]]; + +// Normalize input +GVAR(camMode) = floor((_mode min 3) max 0); +GVAR(camPan) = ((_heading % 360) max 0); +GVAR(camPosition) = _position; +GVAR(camSpeed) = _speed; +GVAR(camUnit) = _unit; +GVAR(camZoom) = (_zoom min 2) max 0; + +// Apply if camera exists +if !(isNil QGVAR(camera)) then { + GVAR(camera) setDir GVAR(camPan); + GVAR(camera) setPosASL GVAR(camPos); + [] call FUNC(transitionCamera); +};