mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
added movable markers option (#5397)
* added movable markers option * added restrictions * added local events * formatting + small fixes * Events for start and end modified + small adjusts * minor fixes * lazy eval * Alt as modifier key * Update XEH_postInit.sqf * Skip UI EH on headless
This commit is contained in:
parent
1a590ea399
commit
22b4788891
17
addons/markers/ACE_Settings.hpp
Normal file
17
addons/markers/ACE_Settings.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
class ACE_Settings {
|
||||||
|
class GVAR(movableMarkersEnabled) {
|
||||||
|
category = CSTRING(Module_DisplayName);
|
||||||
|
value = 0;
|
||||||
|
typeName = "BOOL";
|
||||||
|
displayName = CSTRING(MovableMarkers_DisplayName);
|
||||||
|
description = CSTRING(MovableMarkers_Description);
|
||||||
|
};
|
||||||
|
class GVAR(moveRestriction) {
|
||||||
|
category = CSTRING(Module_DisplayName);
|
||||||
|
value = 0;
|
||||||
|
typeName = "SCALAR";
|
||||||
|
displayName = CSTRING(MoveRestriction_DisplayName);
|
||||||
|
description = CSTRING(MoveRestriction_Description);
|
||||||
|
values[] = {CSTRING(MoveRestriction_All), CSTRING(MoveRestriction_Admins), CSTRING(MoveRestriction_GroupLeaders), CSTRING(MoveRestriction_GroupLeadersAndAdmins)};
|
||||||
|
};
|
||||||
|
};
|
48
addons/markers/CfgVehicles.hpp
Normal file
48
addons/markers/CfgVehicles.hpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
class CfgVehicles {
|
||||||
|
class ACE_Module;
|
||||||
|
class ACE_ModuleMarkers: ACE_Module {
|
||||||
|
author = ECSTRING(common,ACETeam);
|
||||||
|
category = "ACE";
|
||||||
|
displayName = CSTRING(Module_DisplayName);
|
||||||
|
function = QFUNC(initModule);
|
||||||
|
scope = 2;
|
||||||
|
isGlobal = 1;
|
||||||
|
isSingular = 1;
|
||||||
|
icon = QPATHTOF(UI\Icon_Module_Markers_ca.paa);
|
||||||
|
class Arguments {
|
||||||
|
class MovableMarkersEnabled {
|
||||||
|
displayName = CSTRING(MovableMarkers_DisplayName);
|
||||||
|
description = CSTRING(MovableMarkers_Description);
|
||||||
|
typeName = "BOOL";
|
||||||
|
defaultValue = 0;
|
||||||
|
};
|
||||||
|
class MoveRestriction {
|
||||||
|
displayName = CSTRING(MoveRestriction_DisplayName);
|
||||||
|
description = CSTRING(MoveRestriction_Description);
|
||||||
|
typeName = "NUMBER";
|
||||||
|
class values {
|
||||||
|
class all {
|
||||||
|
name = CSTRING(MoveRestriction_All);
|
||||||
|
value = MOVE_RESTRICTION_ALL;
|
||||||
|
default = MOVE_RESTRICTION_ALL;
|
||||||
|
};
|
||||||
|
class admins {
|
||||||
|
name = CSTRING(MoveRestriction_Admins);
|
||||||
|
value = MOVE_RESTRICTION_ADMINS;
|
||||||
|
};
|
||||||
|
class groupLeaders {
|
||||||
|
name = CSTRING(MoveRestriction_GroupLeaders);
|
||||||
|
value = MOVE_RESTRICTION_GROUP_LEADERS;
|
||||||
|
};
|
||||||
|
class groupLeadersAndAdmins {
|
||||||
|
name = CSTRING(MoveRestriction_GroupLeadersAndAdmins);
|
||||||
|
value = MOVE_RESTRICTION_GROUP_LEADERS_ADMINS;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class ModuleDescription {
|
||||||
|
description = CSTRING(Module_Description);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
BIN
addons/markers/UI/Icon_Module_Markers_ca.paa
Normal file
BIN
addons/markers/UI/Icon_Module_Markers_ca.paa
Normal file
Binary file not shown.
@ -11,3 +11,8 @@ PREP(placeMarker);
|
|||||||
PREP(sendMarkersJIP);
|
PREP(sendMarkersJIP);
|
||||||
PREP(setMarkerJIP);
|
PREP(setMarkerJIP);
|
||||||
PREP(setMarkerNetwork);
|
PREP(setMarkerNetwork);
|
||||||
|
PREP(movePFH);
|
||||||
|
PREP(onMouseButtonDownMap);
|
||||||
|
PREP(onMouseButtonUpMap);
|
||||||
|
PREP(initModule);
|
||||||
|
PREP(canMoveMarker);
|
||||||
|
@ -18,3 +18,28 @@ GVAR(currentMarkerPosition) = [];
|
|||||||
GVAR(currentMarkerAngle) = 0;
|
GVAR(currentMarkerAngle) = 0;
|
||||||
GVAR(currentMarkerColorConfigName) = "";
|
GVAR(currentMarkerColorConfigName) = "";
|
||||||
GVAR(currentMarkerConfigName) = "";
|
GVAR(currentMarkerConfigName) = "";
|
||||||
|
|
||||||
|
// set marker pos local on every computer (prevent markers visible for everyone)
|
||||||
|
[QGVAR(applyMarkerPosLocal), {
|
||||||
|
params["_marker", "_pos"];
|
||||||
|
_marker setMarkerPosLocal _pos;
|
||||||
|
|
||||||
|
if (isServer) then {
|
||||||
|
private _index = (GETGVAR(allMapMarkers,[])) find _marker; // case-sensitive, but should be fine
|
||||||
|
if (_index < 0) exitWith {ERROR_1("Could not find data for %1", _marker);};
|
||||||
|
private _data = GVAR(allMapMarkersProperties) select _index;
|
||||||
|
_data set [2, _pos];
|
||||||
|
};
|
||||||
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
|
["ace_settingsInitialized", {
|
||||||
|
if (GVAR(movableMarkersEnabled)) then {
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
[{
|
||||||
|
!isNull (findDisplay 12)
|
||||||
|
}, {
|
||||||
|
(findDisplay 12 displayCtrl 51) ctrlAddEventHandler ["MouseButtonDown", FUNC(onMouseButtonDownMap)];
|
||||||
|
(findDisplay 12 displayCtrl 51) ctrlAddEventHandler ["MouseButtonUp", FUNC(onMouseButtonUpMap)];
|
||||||
|
}] call CBA_fnc_waitUntilAndExecute;
|
||||||
|
};
|
||||||
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
@ -15,4 +15,7 @@ class CfgPatches {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#include "CfgEventHandlers.hpp"
|
#include "CfgEventHandlers.hpp"
|
||||||
|
#include "ACE_Settings.hpp"
|
||||||
|
#include "CfgVehicles.hpp"
|
||||||
|
|
||||||
#include "InsertMarker.hpp"
|
#include "InsertMarker.hpp"
|
||||||
|
28
addons/markers/functions/fnc_canMoveMarker.sqf
Normal file
28
addons/markers/functions/fnc_canMoveMarker.sqf
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Author: chris579
|
||||||
|
* Checks whether the player can move markers.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Whether the player can move markers <BOOL>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [] call ace_markers_fnc_canMoveMarker
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
switch (GVAR(moveRestriction)) do {
|
||||||
|
case MOVE_RESTRICTION_ALL: { true };
|
||||||
|
case MOVE_RESTRICTION_ADMINS: { IS_ADMIN };
|
||||||
|
case MOVE_RESTRICTION_GROUP_LEADERS: {
|
||||||
|
leader group ACE_player == ACE_player
|
||||||
|
};
|
||||||
|
case MOVE_RESTRICTION_GROUP_LEADERS_ADMINS: {
|
||||||
|
(leader group ACE_player == ACE_player) || IS_ADMIN
|
||||||
|
};
|
||||||
|
default { true };
|
||||||
|
};
|
21
addons/markers/functions/fnc_initModule.sqf
Normal file
21
addons/markers/functions/fnc_initModule.sqf
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Author: chris579
|
||||||
|
* Initializes the Markers Module.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Logic <Object>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [LOGIC] call ACE_markers_fnc_initModule
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_logic"];
|
||||||
|
|
||||||
|
[_logic, QGVAR(movableMarkersEnabled), "MovableMarkersEnabled"] call EFUNC(common,readSettingFromModule);
|
||||||
|
[_logic, QGVAR(moveRestriction), "MoveRestriction"] call EFUNC(common,readSettingFromModule);
|
38
addons/markers/functions/fnc_movePFH.sqf
Normal file
38
addons/markers/functions/fnc_movePFH.sqf
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Author: chris579
|
||||||
|
* When the marker is being moved.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Marker data <ARRAY>
|
||||||
|
* 1: PFH ID <NUMBER>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [[MARKER], 5] call ace_markers_fnc_movePFH
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_args", "_idPFH"];
|
||||||
|
_args params ["_marker"];
|
||||||
|
|
||||||
|
if (isNull (findDisplay 12 displayCtrl 51) || {!(player getVariable [QGVAR(moveInProgress), false])}) exitWith {
|
||||||
|
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||||
|
|
||||||
|
private _origin = ACE_player getVariable [QGVAR(movedMarkerOrigin), getMarkerPos _marker];
|
||||||
|
|
||||||
|
if !([QGVAR(markerMoveEnded), [ACE_player, _marker, _origin, getMarkerPos _marker]] call CBA_fnc_localEvent) exitWith {
|
||||||
|
_marker setMarkerPosLocal _origin;
|
||||||
|
};
|
||||||
|
|
||||||
|
[QGVAR(applyMarkerPosLocal), [_marker, getMarkerPos _marker]] call CBA_fnc_globalEvent;
|
||||||
|
_marker setMarkerAlphaLocal (ACE_player getVariable [QGVAR(movedMarkerAlpha), 1]);
|
||||||
|
|
||||||
|
EGVAR(map_gestures,enabled) = ACE_player getVariable [QGVAR(mapGesturesSetting), false];
|
||||||
|
(findDisplay 12 displayCtrl 51) ctrlMapCursor ["Track", "Track"];
|
||||||
|
};
|
||||||
|
|
||||||
|
_marker setMarkerPosLocal ((findDisplay 12 displayCtrl 51) posScreenToWorld getMousePosition);
|
53
addons/markers/functions/fnc_onMouseButtonDownMap.sqf
Normal file
53
addons/markers/functions/fnc_onMouseButtonDownMap.sqf
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Author: chris579
|
||||||
|
* Triggered when a mouse button is pressed on the map.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Map Control the EVH was assigned to <CONTROL>
|
||||||
|
* 1: Button code <NUMBER>
|
||||||
|
* 2: Position of x <NUMBER>
|
||||||
|
* 3: Position of y <NUMBER>
|
||||||
|
* 4: State of Shift <BOOL>
|
||||||
|
* 5: State of Ctrl <BOOL>
|
||||||
|
* 6: State of Alt <BOOL>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [CONTROL, 2, 0, 0, true, false, false] call ace_markers_fnc_onMouseButtonDownMap
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_mapCtrl", "_button", "_x", "_y", "_shift", "_ctrl", "_alt"];
|
||||||
|
|
||||||
|
if (_button != 0) exitWith {};
|
||||||
|
|
||||||
|
private _mouseOver = ctrlMapMouseOver _mapCtrl;
|
||||||
|
|
||||||
|
if (count _mouseOver == 2) then {
|
||||||
|
if ((_mouseOver select 0) == "marker") then {
|
||||||
|
private _markerName = _mouseOver select 1;
|
||||||
|
|
||||||
|
if (_markerName find "_USER_DEFINED" != -1) then {
|
||||||
|
if (!_ctrl && !_shift && _alt && ([] call FUNC(canMoveMarker))) then {
|
||||||
|
// move marker
|
||||||
|
_mapCtrl ctrlMapCursor ["Track", "Move"];
|
||||||
|
|
||||||
|
if !([QGVAR(markerMoveStarted), [ACE_player, _markerName, getMarkerPos _markerName]] call CBA_fnc_localEvent) exitWith {};
|
||||||
|
|
||||||
|
ACE_player setVariable [QGVAR(movedMarkerOrigin), getMarkerPos _markerName];
|
||||||
|
ACE_player setVariable [QGVAR(movedMarkerAlpha), markerAlpha _markerName];
|
||||||
|
ACE_player setVariable [QGVAR(moveInProgress), true];
|
||||||
|
ACE_player setVariable [QGVAR(mapGesturesSetting), EGVAR(map_gestures,enabled)];
|
||||||
|
EGVAR(map_gestures,enabled) = false;
|
||||||
|
|
||||||
|
_markerName setMarkerAlphaLocal 0.5;
|
||||||
|
[FUNC(movePFH), 0, [_markerName]] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
21
addons/markers/functions/fnc_onMouseButtonUpMap.sqf
Normal file
21
addons/markers/functions/fnc_onMouseButtonUpMap.sqf
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Author: chris579
|
||||||
|
* Triggered when a mouse button is released on the map.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Map Control the evh was assigned to <CONTROL>
|
||||||
|
* 1: Button code <NUMBER>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [CONTROL, 2] call ace_markers_fnc_onMouseButtonUpMap
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_mapCtrl", "_button"];
|
||||||
|
|
||||||
|
player setVariable [QGVAR(moveInProgress), false];
|
@ -24,3 +24,8 @@
|
|||||||
localize "str_channel_vehicle", \
|
localize "str_channel_vehicle", \
|
||||||
localize "str_channel_direct" \
|
localize "str_channel_direct" \
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#define MOVE_RESTRICTION_ALL 0
|
||||||
|
#define MOVE_RESTRICTION_ADMINS 1
|
||||||
|
#define MOVE_RESTRICTION_GROUP_LEADERS 2
|
||||||
|
#define MOVE_RESTRICTION_GROUP_LEADERS_ADMINS 3
|
||||||
|
@ -17,5 +17,45 @@
|
|||||||
<Chinesesimp>方位: %1°</Chinesesimp>
|
<Chinesesimp>方位: %1°</Chinesesimp>
|
||||||
<Chinese>方位: %1°</Chinese>
|
<Chinese>方位: %1°</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_Module_DisplayName">
|
||||||
|
<English>Markers</English>
|
||||||
|
<German>Markierungen</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_Module_Description">
|
||||||
|
<English>This module allows you to customize markers placement.</English>
|
||||||
|
<German>Dieses Modul ermöglicht die Steuerung der Platzierung von Markierungen.</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MovableMarkers_DisplayName">
|
||||||
|
<English>Movable markers</English>
|
||||||
|
<German>Bewegbare Markierungen</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MovableMarkers_Description">
|
||||||
|
<English>Should map markers placed by players be movable?</English>
|
||||||
|
<German>Sollen Markierungen, die von Spielern platziert wurden, verschiebbar sein?</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MoveRestriction_DisplayName">
|
||||||
|
<English>Move restriction</English>
|
||||||
|
<German>Verschiebungsrestriktion</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MoveRestriction_Description">
|
||||||
|
<English>Apply move restrictions so that not every player is able to move markers.</English>
|
||||||
|
<German>Restriktionen, damit nicht jeder Spieler Marker verschieben kann</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MoveRestriction_All">
|
||||||
|
<English>All players</English>
|
||||||
|
<German>Alle Spieler</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MoveRestriction_Admins">
|
||||||
|
<English>Admins</English>
|
||||||
|
<German>Admins</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MoveRestriction_GroupLeaders">
|
||||||
|
<English>Group leaders</English>
|
||||||
|
<German>Gruppenführer</German>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Markers_MoveRestriction_GroupLeadersAndAdmins">
|
||||||
|
<English>Group leaders and Admins</English>
|
||||||
|
<German>Gruppenführer und Admins</German>
|
||||||
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
Loading…
Reference in New Issue
Block a user