Jump to content


Photo

Как поменять в динамически созданной (display/control) карте layer?


  • Please log in to reply
No replies to this topic

#1 OFFLINE   linkinpunk

linkinpunk

    Рядовой

  • Пользователи
  • 5 posts
  • Откуда:RF

Posted 05 September 2020 - 20:21

Здравствуйте.

 

В оригинальном интерфейсе сверху справа есть кнопка изменения отображения "спутниковых" снимков карты.

При её переключении карта переводится в режим отображения объектов на карте (без "спутниковых" текстур).

 

Как сделать тоже самое, при использовании "собственной" карты созданной с помощью RscMapControl ?

 

Пример миссии:

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 

Код работающий, но с отображением классической карты со слоем "спутника", а он не нужен (спойлер не нашел):

ALTMAP_Markers = ["Marker_0","Marker_1"];

ALTMAP_ShowMarkerIfNear = {
	Params ["_control", "_xPos", "_yPos"];
	
	private _MarkerDir = uiNamespace getVariable ["ALTMAP_MarkerDir", 0];
	private _MarkerAdd = uiNamespace getVariable ["ALTMAP_MarkerAdd", +1];
	private _MarkerSize = uiNamespace getVariable ["ALTMAP_MarkerSize", 2.0];
	private _MarkerResz = uiNamespace getVariable ["ALTMAP_MarkerResize", -0.02];
	
	private _posMarkers = [];	
	{_posMarkers set [count _posMarkers, getMarkerPos _x];} forEach ALTMAP_Markers;
	
	if (_MarkerDir < 2) then {_MarkerAdd = +1;};
	if (_MarkerDir > 358) then {_MarkerAdd = -1;};
	if (_MarkerSize < 1.2) then {_MarkerResz = +0.02;};
	if (_MarkerSize > 1.8) then {_MarkerResz = -0.02;};
	
	_MarkerDir = _MarkerDir + _MarkerAdd;
	_MarkerSize = _MarkerSize + _MarkerResz;
	
	uiNamespace setVariable ["ALTMAP_MarkerDir", _MarkerDir];
	uiNamespace setVariable ["ALTMAP_MarkerAdd", _MarkerAdd];
	uiNamespace setVariable ["ALTMAP_MarkerSize", _MarkerSize];
	uiNamespace setVariable ["ALTMAP_MarkerResize", _MarkerResz];
	
	private _tmpScreenToWorld = _control ctrlMapScreenToWorld [_xPos, _yPos];
	private _nearestMarkerPos = [_posMarkers,_tmpScreenToWorld] call BIS_fnc_nearestPosition;
	private _tmpMarker = "ALTMAP_PathTo";
	
	if ((_nearestMarkerPos distance _tmpScreenToWorld)<25) then {
		
		if ((str (getMarkerPos _tmpMarker)) == "[0,0,0]") then {
			_tmpMarker = createMarkerLocal ["ALTMAP_PathTo", _nearestMarkerPos];
			playSound "Click";
		};
		_tmpMarker = "ALTMAP_PathTo";
		_tmpMarker setMarkerPosLocal _nearestMarkerPos;
		_tmpMarker setMarkerTypeLocal "selector_selectedMission";
		_tmpMarker setMarkerColorLocal "ColorYellow";
		_tmpMarker setMarkerTextLocal format ["Jump here!"];		
		_tmpMarker setMarkerSizeLocal [_MarkerSize,_MarkerSize];
		_tmpMarker setMarkerDirLocal _MarkerDir;
	} else {
		if (not ((str (getMarkerPos _tmpMarker)) == "[0,0,0]"))then {
			deleteMarkerLocal _tmpMarker;			
		};
	};
	true;
};

ALTMAP_Click = {
	Params ["_control", "_button", "_xPos", "_yPos", "_shift", "_ctrl", "_alt"];
	private _tmpScreenToWorld = _control ctrlMapScreenToWorld [_xPos, _yPos];
	private _posMarkers = [];	
	{_posMarkers set [count _posMarkers, getMarkerPos _x];} forEach ALTMAP_Markers;
	private _nearestMarkerPos = [_posMarkers,_tmpScreenToWorld] call BIS_fnc_nearestPosition;
	if ((_nearestMarkerPos distance _tmpScreenToWorld)<25) then {
		player setPos _tmpScreenToWorld;
	};
};

ALTMAP_CloseDisplay = {
	Params ["_control"];
	_display = ctrlParent _control;
	_display CloseDisplay 2;
};

OpenAltMAP = {	
	
	_ATLMAP_Display = findDisplay 46 createDisplay "RscDisplayEmpty";

	_ALTMAP_Background = _ATLMAP_Display ctrlCreate["RscText", 8001];
	_ALTMAP_Background ctrlSetPosition [safezoneXAbs + 0.01, safezoneY + 0.1, safezoneWAbs - 0.02, safezoneH - 0.2];
	_ALTMAP_Background ctrlSetBackgroundColor [0.03,0.03,0.09,0.345];
	_ALTMAP_Background ctrlSetTextColor [0.99,0.99,0.99,1];	
	_ALTMAP_Background ctrlCommit 0;
	uiNamespace setVariable ["_ALTMAP_Background",_ALTMAP_Background];
	
	_ALTMAP_CloseButton = _ATLMAP_Display ctrlCreate["RscButton", 8002];
	_ALTMAP_CloseButton ctrlSetPosition [safezoneWAbs - abs(safezoneXAbs) - 0.01 - 0.01 - 0.04, safezoneY + 0.12, 0.04, 0.04]; // X1: left border 0.01 + right border 0.01 + button width 0.04 + abs(safezoneWAbs), because safezoneWAbs can be negative value!1
	_ALTMAP_CloseButton ctrlSetBackgroundColor [0.9,0.1,0.1,0];
	_ALTMAP_CloseButton ctrlSetTextColor [0.99,0.99,0.99,1];
	_ALTMAP_CloseButton ctrlSetText " < ";
	_ALTMAP_CloseButton ctrlAddEventHandler ["MouseButtonClick", "_this call ALTMAP_CloseDisplay"];
	_ALTMAP_CloseButton ctrlCommit 0;
	uiNamespace setVariable ["_ALTMAP_CloseButton",_ALTMAP_CloseButton];
	
	_ALTMAP_MAP = _ATLMAP_Display ctrlCreate ["RscMapControl", 8003];
	_ALTMAP_MAP ctrlSetPosition [safezoneXAbs + 0.02, safezoneY + 0.18, safezoneWAbs - 0.04, safezoneH - 0.42]; // Y1:0.1 + 0.04 (button height) + 0.2 (button top) + 0.2 (space); W:0.02 + 0.02 left/right border; H:0.18 from start + 0.2 Display bottom + 0.02 top space + 0.02 space bottom space
	_ALTMAP_MAP ctrlSetBackgroundColor [0.1,0.1,0.1,1];
	_ALTMAP_MAP ctrlSetTextColor [0.99,0.99,0.99,1];
	_ALTMAP_MAP ctrlCommit 0;	
	uiNamespace setVariable ["_ALTMAP_MAP",_ALTMAP_MAP];	
	
	_ALTMAP_MAP ctrlMapAnimAdd [0.75, 0.045, player];
	ctrlMapAnimCommit _ALTMAP_MAP;
	waitUntil {mapAnimDone};
	_ALTMAP_MAP ctrlAddEventHandler ["MouseMoving", "_this call ALTMAP_ShowMarkerIfNear"];
	_ALTMAP_MAP ctrlAddEventHandler ["MouseHolding", "_this call ALTMAP_ShowMarkerIfNear"];
	_ALTMAP_MAP ctrlAddEventHandler ["MouseButtonClick", "_this call ALTMAP_Click"];	
};


player AddAction ["Open Map with animate markers", "_this call OpenAltMAP"];

 


  • 0




Яндекс.Метрика