toniq › Понедельник
› 05.04.2021
› 01:38
› Сообщение #
1
Сержант
В увольнительной
Группа:
Пользователи
Сообщений:
26
1. Вопрос - не вопрос, это готово (вдруг кому пригодится такой метод отрисовки карты без карты в инвентаре): Код динамической созданной карты (т.е. это "своя" карта, а не та что нажимаем M):
Код
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"];
Пример работающей миссии: https://yadi.sk/d/kM5vcZIuUzi8Cg 2. Собственно вопрос следующий, в ТОЙ карте что нажимаем на M есть возможность менять layer (слои по русски, справа сверху кликаем по иконке слоев). Так вот вопрос, вдруг кто знает как это сделать на карте созданной с помощью RscMapControl ? Я этот вопрос спрашивал много где, включая БОГовский форум, а ответа нет... неужели это нереально?
Главное не война! Главное маневры!