ACE3/TO_MERGE/ace/sys_maptools/fnc_DragHandler.sqf

86 lines
4.7 KiB
Plaintext

//handleDrag.sqf
#include "script_component.hpp"
if(inITEMS("ACE_Map_Tools",player)) then {
if(GVAR(MouseDown)) then {
_pos = [_this select 1, _this select 2];
_mPos = ((findDisplay 12) displayCtrl 51) posScreenToWorld _pos;
if(GVAR(RulerKeyDown) == -1000 || {GVAR(RulerKeyDown) == 42}) then {
_marker = QUOTE(DOUBLES(ADDON,compassRuler));
_markerType = (markerType _marker);
if("FlatCompass" == _markerType ||
{"FlatCompass50" == _markerType} ||
{"FlatCompass25" == _markerType} ||
{"FlatCompass12" == _markerType} ||
{"FlatCompass6" == _markerType}
) then {
if(!GVAR(OffDrag)) then {
_overCompass = false;
_startPos = GVAR(RulerStartPos);
_prevDir = GVAR(MapPreviousDir);
_offSet = 543*2;
_sliceStartX = (_startPos select 0) + sin(_prevDir)*_offSet;
_sliceStartY = (_startPos select 1) + cos(_prevDir)*_offSet;
_size = [755*2, 1460*2];
if(!GVAR(DragOK)) then {
_overCompass = [[_sliceStartX, _sliceStartY], _mPos, _size, _prevDir] call FUNC(OverObject);
};
if(_overCompass || {GVAR(DragOK)}) then {
GVAR(DragOK) = true;
if(GVAR(MouseShift)) then {
_x1 = _startPos select 0;
_x2 = _mPos select 0;
_y1 = _startPos select 1;
_y2 = _mPos select 1;
_az = (180 + (((_x1 - _x2) atan2 (_y1 - _y2))) mod 360);
if(GVAR(LastDragAzimuth) == -1000) then {
GVAR(LastDragAzimuth) = _az;
};
_azDif = _az - GVAR(LastDragAzimuth);
GVAR(LastDragAzimuth) = _az;
_az = _prevDir + _azDif;
_sliceStartX = (_startPos select 0) + sin(_az)*_offSet;
_sliceStartY = (_startPos select 1) + cos(_az)*_offSet;
QUOTE(DOUBLES(ADDON,compassRuler)) setMarkerDirLocal _az;
QUOTE(DOUBLES(ADDON,compassRuler)) setMarkerPosLocal [_sliceStartX, _sliceStartY];
GVAR(MapPreviousDir) = _az;
} else {
if((count GVAR(LastDragPosition)) < 1) then {
GVAR(LastDragPosition) = _mPos;
};
_difX = (_mPos select 0) - (GVAR(LastDragPosition) select 0);
_difY = (_mPos select 1) - (GVAR(LastDragPosition) select 1);
_compassPos = markerPos QUOTE(DOUBLES(ADDON,compassRose));
_rulerPos = markerPos QUOTE(DOUBLES(ADDON,compassRuler));
QUOTE(DOUBLES(ADDON,compassRose)) setMarkerPosLocal [(_compassPos select 0) + _difX, (_compassPos select 1) + _difY];
QUOTE(DOUBLES(ADDON,compassRuler)) setMarkerPosLocal [(_rulerPos select 0) + _difX, (_rulerPos select 1) + _difY];
GVAR(RulerStartPos) = [(_startPos select 0) + _difX, (_startPos select 1) + _difY];
};
} else {
GVAR(OffDrag) = true;
};
};
};
} else {
switch(GVAR(RulerKeyDown)) do {
case (["CBA","events","ace_sys_maptools","Start_Drawing","key"] call ace_settings_fnc_getNumber): {
if(GVAR(DragAction) == "" || {GVAR(DragAction) == QGVAR(FreeHandLine)}) then {
GVAR(DragAction) = QGVAR(FreeHandLine);
_this call FUNC(FreeHandLine);
GVAR(UpHandlerFnc) = FUNC(EndFreehandLine);
};
};
case (["CBA","events","ace_sys_maptools","End_Straight_Line","key"] call ace_settings_fnc_getNumber): {
if(GVAR(DragAction) == "" || {GVAR(DragAction) == QGVAR(StraightLine)}) then {
GVAR(DragAction) = QGVAR(StraightLine);
_this call FUNC(StraightLine);
GVAR(UpHandlerFnc) = FUNC(EndStraightLine);
};
};
default {};
};
};
GVAR(LastDragPosition) = _mPos;
};
};