2023-09-12 18:58:10 +00:00
|
|
|
#include "..\script_component.hpp"
|
2015-01-15 09:51:18 +00:00
|
|
|
/*
|
2024-01-07 18:02:05 +00:00
|
|
|
* Author: esteldunedain, LorenLuke
|
|
|
|
* Update the map tool and plotting board markers. Update their position, size, rotation and visibility.
|
2015-01-15 09:51:18 +00:00
|
|
|
*
|
2015-04-07 19:38:35 +00:00
|
|
|
* Arguments:
|
2024-01-07 18:02:05 +00:00
|
|
|
* 0: Map control <CONTROL>
|
2015-01-15 09:51:18 +00:00
|
|
|
*
|
2016-06-18 09:50:41 +00:00
|
|
|
* Return Value:
|
2017-06-08 13:31:51 +00:00
|
|
|
* None
|
|
|
|
*
|
|
|
|
* Example:
|
2024-01-07 18:02:05 +00:00
|
|
|
* [CONTROL] call ace_maptools_fnc_updateMapToolMarkers
|
2015-04-07 20:01:44 +00:00
|
|
|
*
|
|
|
|
* Public: No
|
2015-01-15 09:51:18 +00:00
|
|
|
*/
|
2015-01-15 21:50:48 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
params ["_mapCtrl"];
|
2015-01-15 09:51:18 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
if (GVAR(plottingBoard_Shown) == 0) then {
|
|
|
|
// Hide all plotting board markers when board is put away
|
|
|
|
{
|
|
|
|
if (_y select 4 != 0) then {
|
|
|
|
_x setMarkerAlpha 0;
|
|
|
|
_y set [4, 0];
|
|
|
|
};
|
|
|
|
} forEach GVAR(plottingBoard_markers);
|
2024-01-22 22:44:57 +00:00
|
|
|
} else {
|
|
|
|
if !([ACE_player, "ACE_PlottingBoard"] call EFUNC(common,hasItem)) exitWith {};
|
2024-02-03 18:48:21 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
if (GVAR(plottingBoard_moveToMouse)) then {
|
|
|
|
GVAR(plottingBoard_pos) = _mapCtrl ctrlMapScreenToWorld getMousePosition;
|
|
|
|
GVAR(plottingBoard_moveToMouse) = false; // we only need to do this once after opening the map tool
|
|
|
|
};
|
|
|
|
|
|
|
|
getResolution params ["_resWidth", "_resHeight", "", "", "_aspectRatio"];
|
|
|
|
private _scaleX = 32 * PLOTTINGBOARD_TEXTUREWIDTH * CONSTANT_SCALE * (call FUNC(calculateMapScale));
|
|
|
|
private _scaleY = _scaleX * ((_resWidth / _resHeight) / _aspectRatio); // handle bad aspect ratios
|
|
|
|
|
|
|
|
_mapCtrl drawIcon [QPATHTOF(data\plottingBoardBack.paa), [1, 1, 1, 1], GVAR(plottingBoard_pos), _scaleX, _scaleY, GVAR(plottingBoard_angle), "", 0];
|
|
|
|
_mapCtrl drawIcon [QPATHTOF(data\plottingBoardAcrylic.paa), [1, 1, 1, 1], GVAR(plottingBoard_pos), _scaleX, _scaleY, GVAR(plottingBoard_acrylicAngle), "", 0];
|
|
|
|
|
|
|
|
// Show ruler
|
|
|
|
if (GVAR(plottingBoard_Shown) == 2) then {
|
|
|
|
_mapCtrl drawIcon [QPATHTOF(data\plottingBoardRuler.paa), [1, 1, 1, 1], GVAR(plottingBoard_pos), _scaleX, _scaleY, GVAR(plottingBoard_rulerAngle), "", 0];
|
|
|
|
};
|
|
|
|
|
|
|
|
private _marker = "";
|
|
|
|
private _angle = GVAR(plottingBoard_acrylicAngle);
|
|
|
|
private _boardPos = GVAR(plottingBoard_pos);
|
|
|
|
private _count = -1;
|
|
|
|
private _rotatedPolyPos = [];
|
|
|
|
private _rotatedPos = [];
|
|
|
|
|
|
|
|
{
|
|
|
|
_marker = _x;
|
|
|
|
_y params ["_markerPos", "_polyline", "_lastAngle", "_lastBoardPos", "_lastAlpha"];
|
|
|
|
|
|
|
|
// Show all plotting board markers when the board is shown
|
|
|
|
if (_lastAlpha != 1) then {
|
|
|
|
_marker setMarkerAlpha 1;
|
|
|
|
_y set [4, 1];
|
|
|
|
};
|
|
|
|
|
|
|
|
// If nothing has changed, don't update marker
|
|
|
|
if (_angle == _lastAngle && {_boardPos isEqualTo _lastBoardPos}) then {
|
|
|
|
continue;
|
|
|
|
};
|
|
|
|
|
|
|
|
_count = count _polyline;
|
|
|
|
|
|
|
|
// Rotate all points of polyline
|
|
|
|
if (_count >= 4) then { // polylines need at least 2 points (2 components per point)
|
|
|
|
_rotatedPolyline = [];
|
|
|
|
|
|
|
|
for "_i" from 0 to _count - 1 step 2 do {
|
|
|
|
_rotatedPolyPos = [[0, 0], [_polyline select _i, _polyline select (_i + 1)], -_angle] call CBA_fnc_vectRotate2D;
|
|
|
|
_rotatedPolyline append (_rotatedPolyPos vectorAdd _boardPos);
|
|
|
|
};
|
|
|
|
|
|
|
|
_marker setMarkerPolyline _rotatedPolyline;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Rotate marker position, regardless of marker type
|
|
|
|
_rotatedPos = [[0, 0], _markerPos, -_angle] call CBA_fnc_vectRotate2D;
|
|
|
|
|
|
|
|
_marker setMarkerPos (_boardPos vectorAdd _rotatedPos);
|
|
|
|
|
|
|
|
_y set [2, _angle];
|
|
|
|
_y set [3, +_boardPos];
|
|
|
|
} forEach GVAR(plottingBoard_markers);
|
2015-01-15 09:51:18 +00:00
|
|
|
};
|
|
|
|
|
2024-02-03 18:48:21 +00:00
|
|
|
if ((GVAR(mapTool_Shown) != 0) && {[ACE_player, "ACE_MapTools"] call EFUNC(common,hasItem)}) then {
|
2024-01-07 18:02:05 +00:00
|
|
|
// Open map tools in center of screen when toggled to be shown
|
|
|
|
if (GVAR(mapTool_moveToMouse)) then {
|
|
|
|
GVAR(mapTool_pos) = _mapCtrl ctrlMapScreenToWorld getMousePosition;
|
|
|
|
GVAR(mapTool_moveToMouse) = false; // we only need to do this once after opening the map tool
|
|
|
|
};
|
|
|
|
|
|
|
|
private _rotatingTexture = "";
|
|
|
|
private _textureWidth = 0;
|
|
|
|
|
|
|
|
if (GVAR(mapTool_Shown) == 1) then {
|
|
|
|
_rotatingTexture = QPATHTOF(data\mapToolRotatingNormal.paa);
|
|
|
|
_textureWidth = TEXTURE_WIDTH_IN_M;
|
|
|
|
} else {
|
|
|
|
_rotatingTexture = QPATHTOF(data\mapToolRotatingSmall.paa);
|
|
|
|
_textureWidth = TEXTURE_WIDTH_IN_M / 2;
|
|
|
|
};
|
2016-10-07 22:21:19 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
if (GVAR(freedrawing)) then {
|
|
|
|
[_mapCtrl, _textureWidth] call FUNC(drawLinesOnRoamer);
|
|
|
|
};
|
2015-01-15 09:51:18 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
// Update scale of both parts
|
|
|
|
getResolution params ["_resWidth", "_resHeight", "", "", "_aspectRatio"];
|
|
|
|
private _scaleX = 32 * _textureWidth * CONSTANT_SCALE * (call FUNC(calculateMapScale));
|
|
|
|
private _scaleY = _scaleX * ((_resWidth / _resHeight) / _aspectRatio); // handle bad aspect ratios
|
2015-04-07 19:38:35 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
// Position of the fixed part
|
|
|
|
private _pos = GVAR(mapTool_pos) vectorAdd [0, _textureWidth * CENTER_OFFSET_Y_PERC];
|
2015-01-15 09:51:18 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
_mapCtrl drawIcon [QPATHTOF(data\mapToolFixed.paa), [1, 1, 1, 1], _pos, _scaleX, _scaleY, 0, "", 0];
|
2015-04-07 19:38:35 +00:00
|
|
|
|
2024-01-07 18:02:05 +00:00
|
|
|
// Position and rotation of the rotating part
|
|
|
|
_pos = GVAR(mapTool_pos) vectorAdd ([sin GVAR(mapTool_angle), cos GVAR(mapTool_angle)] vectorMultiply (_textureWidth * CENTER_OFFSET_Y_PERC));
|
|
|
|
|
|
|
|
_mapCtrl drawIcon [_rotatingTexture, [1, 1, 1, 1], _pos, _scaleX, _scaleY, GVAR(mapTool_angle), "", 0];
|
|
|
|
};
|