Add the ability to edit user placed markers (#6564)

* add the ability to edit user placed markers

* remove direct channel from valid channels

* add author

* optimize get map display

replace old method of getting the map display with displayParent

* optimize code by adding isEqualTo

* correct some spelling mistakes
This commit is contained in:
Timi007 2018-09-17 20:52:24 +02:00 committed by PabstMirror
parent 75f8a35d3d
commit 7988622635
6 changed files with 80 additions and 37 deletions

View File

@ -130,6 +130,7 @@ System98
SzwedzikPL <szwedzikpl@gmail.com> SzwedzikPL <szwedzikpl@gmail.com>
Tachi <zaveruha007@gmail.com> Tachi <zaveruha007@gmail.com>
Tessa Elieff <Fastroping Sound - CreativeCommons Attributions 3.0> Tessa Elieff <Fastroping Sound - CreativeCommons Attributions 3.0>
Timi007 <timi007@gmx.net>
Toaster <jonathan.pereira@gmail.com> Toaster <jonathan.pereira@gmail.com>
Tonic Tonic
Tourorist <tourorist@gmail.com> Tourorist <tourorist@gmail.com>

View File

@ -17,11 +17,12 @@ if (isNil QGVAR(MarkersCache)) then {
for "_a" from 0 to (count _config - 1) do { for "_a" from 0 to (count _config - 1) do {
private _marker = _config select _a; private _marker = _config select _a;
if (getNumber (_marker >> "scope") == 2) then { if (getNumber (_marker >> "scope") isEqualTo 2) then {
private _class = configName _marker;
private _name = getText (_marker >> "name"); private _name = getText (_marker >> "name");
private _icon = getText (_marker >> "icon"); private _icon = getText (_marker >> "icon");
GVAR(MarkersCache) pushBack [_name, _a, _icon]; GVAR(MarkersCache) pushBack [_name, _a, _icon, _class];
}; };
}; };
}; };
@ -35,7 +36,8 @@ if (isNil QGVAR(MarkerColorsCache)) then {
for "_a" from 0 to (count _config - 1) do { for "_a" from 0 to (count _config - 1) do {
private _marker = _config select _a; private _marker = _config select _a;
if (getNumber (_marker >> "scope") == 2) then { if (getNumber (_marker >> "scope") isEqualTo 2) then {
private _class = configName _marker;
private _name = getText (_marker >> "name"); private _name = getText (_marker >> "name");
private _rgba = getArray (_marker >> "color"); private _rgba = getArray (_marker >> "color");
@ -48,7 +50,7 @@ if (isNil QGVAR(MarkerColorsCache)) then {
_rgba params ["_red", "_green", "_blue", "_alpha"]; _rgba params ["_red", "_green", "_blue", "_alpha"];
private _icon = format ["#(argb,8,8,3)color(%1,%2,%3,%4)", _red, _green, _blue, _alpha]; private _icon = format ["#(argb,8,8,3)color(%1,%2,%3,%4)", _red, _green, _blue, _alpha];
GVAR(MarkerColorsCache) pushBack [_name, _a, _icon]; GVAR(MarkerColorsCache) pushBack [_name, _a, _icon, _class];
}; };
}; };
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Author: commy2 * Author: commy2, Timi007
* Return enabled channels. * Return enabled channels.
* *
* Arguments: * Arguments:
@ -40,12 +40,8 @@ if (_localize) then {
if (setCurrentChannel 4) then { if (setCurrentChannel 4) then {
_enabledChannels pushBack localize "str_channel_vehicle"; _enabledChannels pushBack localize "str_channel_vehicle";
}; };
if (setCurrentChannel 5) then {
_enabledChannels pushBack localize "str_channel_direct";
};
} else { } else {
for "_i" from 0 to 5 do { for "_i" from 0 to 4 do {
if (setCurrentChannel _i) then { if (setCurrentChannel _i) then {
_enabledChannels pushBack _i; _enabledChannels pushBack _i;
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Author: BIS, commy2 * Author: BIS, commy2, Timi007
* Sets up the marker placement * Sets up the marker placement
* Run instead of \a3\ui_f\scripts\GUI\RscDisplayInsertMarker.sqf * Run instead of \a3\ui_f\scripts\GUI\RscDisplayInsertMarker.sqf
* *
@ -46,32 +46,39 @@
private _aceAngleSlider = _display displayctrl 1220; private _aceAngleSlider = _display displayctrl 1220;
private _aceAngleSliderText = _display displayctrl 1221; private _aceAngleSliderText = _display displayctrl 1221;
//////////////////// private _mapDisplay = displayParent _display;
// Install MapDrawEH on current map if (isNull _mapDisplay) exitWith {ERROR("No Map");};
private _mapIDD = -1; private _mapCtrl = _mapDisplay displayCtrl 51;
{ GVAR(editingMarker) = "";
if (!isNull (findDisplay _x)) exitWith { (ctrlMapMouseOver _mapCtrl) params ["_mouseOverType", "_marker"];
_mapIDD = _x;
//check if entity under mouse is a user marker
if (_mouseOverType isEqualTo "marker") then {
if !((_marker find "_USER_DEFINED") isEqualTo -1) then {
GVAR(editingMarker) = _marker;
//hide marker which is being edited because if the user cancels editing, it will still exist unchanged
GVAR(editingMarker) setMarkerAlphaLocal 0;
}; };
false
} count [12, 37, 52, 53, 160];
if (_mapIDD == -1) exitWith {
ERROR("No Map?");
}; };
if !(_mapIDD in GVAR(mapDisplaysWithDrawEHs)) then { ////////////////////
GVAR(mapDisplaysWithDrawEHs) pushBack _mapIDD; // Install MapDrawEH on current map
((finddisplay _mapIDD) displayctrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(mapDrawEH)}]; // @todo check if persistent if !((ctrlIDD _mapDisplay) in GVAR(mapDisplaysWithDrawEHs)) then {
GVAR(mapDisplaysWithDrawEHs) pushBack (ctrlIDD _mapDisplay);
_mapCtrl ctrlAddEventHandler ["Draw", {_this call FUNC(mapDrawEH)}]; // @todo check if persistent
}; };
//////////////////// ////////////////////
// Calculate center position of the marker placement ctrl // Calculate center position of the marker placement ctrl
private _pos = ctrlPosition _picture; if !(GVAR(editingMarker) isEqualTo "") then {
_pos = [(_pos select 0) + (_pos select 2) / 2, (_pos select 1) + (_pos select 3) / 2]; //prevent changing the original marker position
GVAR(currentMarkerPosition) = markerPos GVAR(editingMarker);
GVAR(currentMarkerPosition) = ((findDisplay _mapIDD) displayCtrl 51) ctrlMapScreenToWorld _pos; } else {
private _pos = ctrlPosition _picture;
_pos = [(_pos select 0) + (_pos select 2) / 2, (_pos select 1) + (_pos select 3) / 2];
GVAR(currentMarkerPosition) = _mapCtrl ctrlMapScreenToWorld _pos;
};
//Hide the bis picture: //Hide the bis picture:
_picture ctrlShow false; _picture ctrlShow false;
@ -79,12 +86,16 @@
// prevent vanilla key input // prevent vanilla key input
_display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}]; _display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}];
if !((markerText GVAR(editingMarker)) isEqualTo "") then {
//fill text input with text from marker which is being edited
_text ctrlSetText (markerText GVAR(editingMarker));
};
//Focus on the text input //Focus on the text input
ctrlSetFocus _text; ctrlSetFocus _text;
//--- Background //--- Background
_pos = ctrlposition _text; private _pos = ctrlposition _text;
_pos params ["_posX", "_posY", "_posW", "_posH"]; _pos params ["_posX", "_posY", "_posW", "_posH"];
_posX = _posX + 0.01; _posX = _posX + 0.01;
_posY = _posY min ((safeZoneH + safeZoneY) - (8 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen _posY = _posY min ((safeZoneH + safeZoneY) - (8 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen
@ -161,12 +172,20 @@
}; };
}; };
private _currentChannelName = CHANNEL_NAMES param [currentChannel, localize "str_channel_group"]; private _selectChannel = if !(GVAR(editingMarker) isEqualTo "") then {
//get the channel where the marker was placed in
parseNumber ((GVAR(editingMarker) splitString "/") param [2, "3"])
} else {
currentChannel
};
private _currentChannelName = CHANNEL_NAMES param [_selectChannel, localize "str_channel_group"];
// select current channel in list box, must be done after lbDelete // select current channel in list box, must be done after lbDelete
for "_j" from 0 to (lbSize _channel - 1) do { for "_j" from 0 to (lbSize _channel - 1) do {
if (_channel lbText _j == _currentChannelName) then { if (_channel lbText _j == _currentChannelName) then {
_channel lbSetCurSel _j; _channel lbSetCurSel _j;
setCurrentChannel (CHANNEL_NAMES find _currentChannelName);
}; };
}; };
@ -198,10 +217,15 @@
// init marker shape lb // init marker shape lb
lbClear _aceShapeLB; lbClear _aceShapeLB;
{ {
_x params ["_add", "_set", "_pic"]; _x params ["_add", "_set", "_pic", "_classname"];
_aceShapeLB lbAdd _add; _aceShapeLB lbAdd _add;
_aceShapeLB lbSetValue [_forEachIndex, _set]; _aceShapeLB lbSetValue [_forEachIndex, _set];
_aceShapeLB lbSetPicture [_forEachIndex, _pic]; _aceShapeLB lbSetPicture [_forEachIndex, _pic];
if ((markerType GVAR(editingMarker)) isEqualTo _classname) then {
//if the marker is being edited then get the original shape
GVAR(curSelMarkerShape) = _forEachIndex;
};
} forEach GVAR(MarkersCache); } forEach GVAR(MarkersCache);
private _curSelShape = GETGVAR(curSelMarkerShape,0); private _curSelShape = GETGVAR(curSelMarkerShape,0);
@ -215,10 +239,15 @@
// init marker color lb // init marker color lb
lbClear _aceColorLB; lbClear _aceColorLB;
{ {
_x params ["_add", "_set", "_pic"]; _x params ["_add", "_set", "_pic", "_classname"];
_aceColorLB lbAdd _add; _aceColorLB lbAdd _add;
_aceColorLB lbSetValue [_forEachIndex, _set]; _aceColorLB lbSetValue [_forEachIndex, _set];
_aceColorLB lbSetPicture [_forEachIndex, _pic]; _aceColorLB lbSetPicture [_forEachIndex, _pic];
if ((markerColor GVAR(editingMarker)) isEqualTo _classname) then {
//if the marker is being edited then get the original color
GVAR(curSelMarkerColor) = _forEachIndex;
};
} forEach GVAR(MarkerColorsCache); } forEach GVAR(MarkerColorsCache);
private _curSelColor = GETGVAR(curSelMarkerColor,0); private _curSelColor = GETGVAR(curSelMarkerColor,0);
@ -232,6 +261,11 @@
// init marker angle slider // init marker angle slider
_aceAngleSlider sliderSetRange [-180, 180]; _aceAngleSlider sliderSetRange [-180, 180];
if !(GVAR(editingMarker) isEqualTo "") then {
//get the original direction
GVAR(currentMarkerAngle) = markerDir GVAR(editingMarker);
};
private _curSelAngle = GETGVAR(currentMarkerAngle,0); private _curSelAngle = GETGVAR(currentMarkerAngle,0);
_aceAngleSlider sliderSetPosition _curSelAngle; _aceAngleSlider sliderSetPosition _curSelAngle;

View File

@ -1,5 +1,5 @@
/* /*
* Author: commy2 * Author: commy2, Timi007
* MarkerPlacement closed * MarkerPlacement closed
* *
* Arguments: * Arguments:
@ -20,7 +20,11 @@ disableserialization;
params ["_display", "_closeNum"]; params ["_display", "_closeNum"];
TRACE_2("params",_display,_closeNum); TRACE_2("params",_display,_closeNum);
if (_closeNum == 1) then { if (_closeNum isEqualTo 1) then {
if !(GVAR(editingMarker) isEqualTo "") then {
//delete "old" marker
deleteMarker GVAR(editingMarker);
};
// set and send marker data the next frame. the actual marker isn't created yet // set and send marker data the next frame. the actual marker isn't created yet
[{ [{
[QGVAR(setMarkerNetwork), [ [QGVAR(setMarkerNetwork), [
@ -33,4 +37,11 @@ if (_closeNum == 1) then {
]] call CBA_fnc_globalEvent; ]] call CBA_fnc_globalEvent;
}, []] call CBA_fnc_execNextFrame; }, []] call CBA_fnc_execNextFrame;
} else {
if !(GVAR(editingMarker) isEqualTo "") then {
//editing was canceled show the original marker again
GVAR(editingMarker) setMarkerAlphaLocal 1;
};
}; };
GVAR(editingMarker) = "";

View File

@ -21,8 +21,7 @@
localize "str_channel_side", \ localize "str_channel_side", \
localize "str_channel_command", \ localize "str_channel_command", \
localize "str_channel_group", \ localize "str_channel_group", \
localize "str_channel_vehicle", \ localize "str_channel_vehicle" \
localize "str_channel_direct" \
] ]
#define MOVE_RESTRICTION_NOBODY -1 #define MOVE_RESTRICTION_NOBODY -1