diff --git a/addons/spectator/UI/interface.hpp b/addons/spectator/UI/interface.hpp index 663160c8d2..55d805b67f 100644 --- a/addons/spectator/UI/interface.hpp +++ b/addons/spectator/UI/interface.hpp @@ -88,6 +88,7 @@ class GVAR(interface) { class controls { class nameTool: RscText { idc = IDC_TOOL_NAME; + style = 2; x = 0; y = 0; w = TOOL_W * 2; diff --git a/addons/spectator/XEH_preInit.sqf b/addons/spectator/XEH_preInit.sqf index fdd01c1d8b..841477642e 100644 --- a/addons/spectator/XEH_preInit.sqf +++ b/addons/spectator/XEH_preInit.sqf @@ -3,12 +3,12 @@ ADDON = false; PREP(handleCamera); -PREP(handleClock); PREP(handleCompass); PREP(handleInterface); PREP(handleKilled); PREP(handleMouse); PREP(handleRespawn); +PREP(handleToolbar); PREP(handleUnits); PREP(moduleSpectatorSettings); PREP(setSpectator); @@ -17,10 +17,13 @@ PREP(updateInterface); PREP(updateUnits); // Permanent variables +GVAR(camFocus) = -1; GVAR(camMode) = 0; GVAR(camPan) = 0; -GVAR(camPos) = [worldSize,worldSize,0]; +GVAR(camPos) = [worldSize * 0.5,worldSize * 0.5,0]; +GVAR(camSpeed) = 1; GVAR(camUnit) = objNull; +GVAR(camZoom) = 1.3; GVAR(showComp) = true; GVAR(showHelp) = true; diff --git a/addons/spectator/functions/fnc_handleClock.sqf b/addons/spectator/functions/fnc_handleClock.sqf deleted file mode 100644 index 59b3dcc0c4..0000000000 --- a/addons/spectator/functions/fnc_handleClock.sqf +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Author: Karel Moricky, SilentSpike - * Handles the spectator UI clock - * - * Arguments: - * 0: Parameters - * 1: PFH handle - * - * Return Value: - * None - * - * Example: - * [ace_spectator_fnc_handleClock, 1, _display] call CBA_fnc_addPerFrameHandler; - * - * Public: No - */ - -#include "script_component.hpp" - -params ["_display"]; - -// Kill PFH when display is closed -if (isNull _display) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; }; - -// Reduce overhead when toolbar is hidden -if !(GVAR(showTool) && GVAR(showInterface)) exitWith {}; - -private "_clock"; - -_clock = (_display displayCtrl IDC_TOOL) controlsGroupCtrl IDC_TOOL_CLOCK; -_clock ctrlSetText ([daytime,"HH:MM"] call BIS_fnc_timeToString); diff --git a/addons/spectator/functions/fnc_handleInterface.sqf b/addons/spectator/functions/fnc_handleInterface.sqf index 76141f411f..4f6c001992 100644 --- a/addons/spectator/functions/fnc_handleInterface.sqf +++ b/addons/spectator/functions/fnc_handleInterface.sqf @@ -29,12 +29,8 @@ switch (toLower _mode) do { GVAR(camBank) = 0; GVAR(camBoom) = [false,false]; GVAR(camDolly) = [false,false,false,false]; - GVAR(camFocus) = [-1,-1]; - GVAR(camFOV) = 0.7; GVAR(camPos) set [2,20]; - GVAR(camSpeed) = 1; GVAR(camTilt) = -10; - GVAR(camZoom) = 3; GVAR(gunCam) = false; // Initalize display variables @@ -47,8 +43,6 @@ switch (toLower _mode) do { GVAR(camera) setDir GVAR(camPan); [] call FUNC(updateCamera); - GVAR(camera) camSetFOV GVAR(camFOV); - // Create the dialog createDialog QGVAR(interface); @@ -78,11 +72,7 @@ switch (toLower _mode) do { GVAR(camBank) = nil; GVAR(camBoom) = nil; GVAR(camDolly) = nil; - GVAR(camFocus) = nil; - GVAR(camFOV) = nil; - GVAR(camSpeed) = nil; GVAR(camTilt) = nil; - GVAR(camZoom) = nil; GVAR(gunCam) = nil; // Cleanup display variables @@ -110,20 +100,14 @@ switch (toLower _mode) do { GVAR(showMap) = false; [] call FUNC(updateInterface); - // Set text values - (_display displayCtrl IDC_TOOL_FOCUS) ctrlSetText str(GVAR(camFocus)); - (_display displayCtrl IDC_TOOL_FOV) ctrlSetText str(GVAR(camFOV)); - (_display displayCtrl IDC_TOOL_SPEED) ctrlSetText format ["%1 m/s",GVAR(camSpeed)]; - (_display displayCtrl IDC_TOOL_VIEW) ctrlSetText (["FREE","FIRST","THIRD"] select GVAR(camMode)); - // Keep unit tree up to date [FUNC(handleUnits), 21, _display] call CBA_fnc_addPerFrameHandler; // Handle the compass heading [FUNC(handleCompass), 0, _display] call CBA_fnc_addPerFrameHandler; - // Handle the clock time - [FUNC(handleClock), 1, _display] call CBA_fnc_addPerFrameHandler; + // Handle the toolbar values + [FUNC(handleToolbar), 0, _display] call CBA_fnc_addPerFrameHandler; // Hacky way to enable keybindings //_display displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}]; @@ -156,11 +140,11 @@ switch (toLower _mode) do { case "onmousezchanged": { _args params ["_ctrl","_zChange"]; - // Scroll to zoom in 3rd person, modifier for FOV + // Scroll to change zoom, modifier for focus if (GVAR(ctrlKey)) then { - GVAR(camFOV) = ((GVAR(camFOV) - (_zChange * GVAR(camFOV) * 0.2)) max 0.1) min 1; + //GVAR(camFocus) set [0,(GVAR(camFocus) select 0) - (_zChange * (GVAR(camFocus) select 0) * 0.2)] } else { - GVAR(camZoom) = (GVAR(camZoom) - (_zChange * GVAR(camZoom) * 0.2)) max 0.1; + GVAR(camZoom) = ((GVAR(camZoom) + (_zChange * 0.1)) max 0.01) min 2; }; }; case "onmousemoving": { diff --git a/addons/spectator/functions/fnc_handleToolbar.sqf b/addons/spectator/functions/fnc_handleToolbar.sqf new file mode 100644 index 0000000000..32777a770f --- /dev/null +++ b/addons/spectator/functions/fnc_handleToolbar.sqf @@ -0,0 +1,55 @@ +/* + * Author: Karel Moricky, SilentSpike + * Handles the spectator UI toolbar values and applies them to the camera + * + * Arguments: + * 0: Parameters + * 1: PFH handle + * + * Return Value: + * None + * + * Example: + * [ace_spectator_fnc_handleToolbar, 0, _display] call CBA_fnc_addPerFrameHandler; + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_display"]; + +// Kill PFH when display is closed +if (isNull _display) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; }; + +GVAR(camera) camSetFocus [GVAR(camFocus),1.5]; +GVAR(camera) camSetFov -(linearConversion [0.1,2,GVAR(camZoom),-2,-0.1,true]); +GVAR(camera) camCommit 0; + +// Reduce overhead when toolbar is hidden +if !(GVAR(showTool) && GVAR(showInterface)) exitWith {}; + +private ["_name","_focus","_fov","_speed","_mode","_time","_toolbar"]; + +// Find all tool values +if (GVAR(camMode) == 0) then { + _name = "None"; + _speed = format ["%1 m/s", GVAR(camSpeed)]; +} else { + _name = name GVAR(camUnit); + _speed = format ["%1 km/h", floor(speed GVAR(camUnit))]; +}; + +_focus = format ["%1 m", GVAR(camFocus)]; +_fov = format ["%1x", floor(GVAR(camZoom) * 100) * 0.01]; +_mode = ["FREE","FIRST","THIRD"] select GVAR(camMode); +_time = [daytime,"HH:MM"] call BIS_fnc_timeToString; + +// Update the UI tools +_toolbar = _display displayCtrl IDC_TOOL; +(_toolbar controlsGroupCtrl IDC_TOOL_CLOCK) ctrlSetText _time; +(_toolbar controlsGroupCtrl IDC_TOOL_FOCUS) ctrlSetText _focus; +(_toolbar controlsGroupCtrl IDC_TOOL_FOV) ctrlSetText _fov; +(_toolbar controlsGroupCtrl IDC_TOOL_NAME) ctrlSetText _name; +(_toolbar controlsGroupCtrl IDC_TOOL_SPEED) ctrlSetText _speed; +(_toolbar controlsGroupCtrl IDC_TOOL_VIEW) ctrlSetText _mode;