Merge pull request #183 from KoffeinFlummi/microDAGR

MicroDAGR
This commit is contained in:
PabstMirror 2015-03-23 13:24:37 -05:00
commit 14d6db4596
58 changed files with 2264 additions and 0 deletions

View File

@ -0,0 +1 @@
z\ace\addons\microdagr

View File

@ -0,0 +1,11 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) );
};
};

View File

@ -0,0 +1,58 @@
class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_SelfActions {
class ACE_Equipment {
class GVAR(openMicroDAGR) {
displayName = "$STR_ACE_microdagr_openUnit";
condition = QUOTE(('ACE_microDAGR' in (items _player)));
statement = QUOTE([] call FUNC(openDisplay));
showDisabled = 0;
priority = 0.1;
icon = QUOTE(PATHTOF(data\icon_microDAGR.paa));
hotkey = "G";
};
class GVAR(closeMicroDAGR) {
displayName = "$STR_ACE_microdagr_closeUnit";
condition = QUOTE(GVAR(currentShowMode) != DISPLAY_MODE_CLOSED);
statement = QUOTE([DISPLAY_MODE_CLOSED] call FUNC(openDisplay));
showDisabled = 0;
priority = 0;
icon = QUOTE(PATHTOF(data\icon_microDAGR.paa));
// hotkey = "G";
};
};
};
};
class Logic;
class Module_F: Logic {
class ArgumentsBaseUnits {};
class ModuleDescription {};
};
class GVAR(dagrModule): Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "MicroDAGR Map Fill";
function = QFUNC(moduleMapFill);
scope = 2;
isGlobal = 1;
// icon = QUOTE(PATHTOF(ui\IconLock_ca.paa));
functionPriority = 0;
class Arguments {
class MapDataAvailable {
displayName = "MicroDAGR Map Fill"; // Argument label
description = "How much map data is filled on MicroDAGRs "; // Tooltip description
typeName = "NUMBER"; // Value type, can be "NUMBER", "STRING" or "BOOL"
class values {
class None {name = "Full Satellite + Buildings"; value = MAP_DETAIL_SAT; default = 1;};
class Side {name = "Topographical + Roads"; value = MAP_DETAIL_TOPOROADS;};
class Unique {name = "None (Cannot use map view)"; value = MAP_DETAIL_NONE;};
};
};
};
class ModuleDescription: ModuleDescription {
description = "Controls how muchdata is filled in the microDAGR items. Less data restricts the map view to show less on the minimap.<br/>Source: microDAGR.pbo";
};
};
};

View File

@ -0,0 +1,15 @@
class CfgWeapons {
class ACE_ItemCore;
class InventoryItem_Base_F;
class ACE_microDAGR: ACE_ItemCore {
author = "$STR_ACE_Common_ACETeam";
scope = 2;
displayName = "$STR_ACE_microdagr_itemName";
descriptionShort = "$STR_ACE_microdagr_itemDescription";
picture = QUOTE(PATHTOF(images\microDAGR_item.paa));
class ItemInfo: InventoryItem_Base_F {
mass = 2;
};
};
};

View File

@ -0,0 +1,74 @@
//XEH_clientInit.sqf
#include "script_component.hpp"
if (!hasInterface) exitWith {};
//Add Keybinds:
["ACE3", QGVAR(openGPS), (localize "STR_ACE_microdagr_openUnit"),
{
// Conditions: canInteract
_exceptions = [];
if !(_exceptions call EGVAR(common,canInteract)) exitWith {false};
// Conditions: specific
if (!("ACE_microDAGR" in (items ace_player))) exitWith {false};
[] call FUNC(openDisplay);
true;
},
{false},
[0xC7, [false, false, false]], false] call cba_fnc_addKeybind; //Home Key
["ACE3", QGVAR(closeGPS), (localize "STR_ACE_microdagr_closeUnit"),
{
// Conditions: canInteract
_exceptions = [];
if !(_exceptions call EGVAR(common,canInteract)) exitWith {false};
// Conditions: specific
if (!("ACE_microDAGR" in (items ace_player))) exitWith {false};
if (GVAR(currentShowMode) == DISPLAY_MODE_CLOSED) exitWith {false};
[DISPLAY_MODE_CLOSED] call FUNC(openDisplay);
true;
},
{false},
[0xC7, [false, true, false]], false] call cba_fnc_addKeybind; //CTRL + Home Key
//Add Eventhandler:
["RangerfinderData", {_this call FUNC(recieveRangefinderData)}] call EFUNC(common,addEventHandler);
//Global Variables to default:
GVAR(gpsPositionASL) = [0,0,0];
GVAR(mapAutoTrackPosition) = true;
GVAR(mapShowTexture) = false;
GVAR(mapPosition) = [-999, -999];
GVAR(mapZoom) = 0.075;
GVAR(currentApplicationPage) = APP_MODE_NULL;
GVAR(currentShowMode) = DISPLAY_MODE_CLOSED;
//User Settings
GVAR(settingUseMils) = false;
GVAR(settingShowAllWaypointsOnMap) = true;
GVAR(newWaypointPosition) = [];
GVAR(currentWaypoint) = -1;
GVAR(rangeFinderPositionASL) = [];
GVAR(mapAltitude) = getNumber (configFile >> "CfgWorlds" >> worldName >> "elevationOffset");
//Calculate the map's MGRS:
_worldMapLong = getNumber (configFile >> "CfgWorlds" >> worldName >> "longitude");
_worldMapLat = getNumber (configFile >> "CfgWorlds" >> worldName >> "latitude");
//Pull UTM grid from world's long/lat
_zone = 1 + (floor ((_worldMapLong + 180) / 6));
_band = "Z";
if (_worldMapLat <= -80) then {
_band = "A";
} else {
if (_worldMapLat < 84) then {
_band = "CDEFGHJKLMNPQRSTUVWXX" select [(floor ((_worldMapLat / 8) + 10)), 1];
};
};
//calculating square ID from long/lat is a pain in the ass, just fake it unless someone wants to actualy do this
_squareID = if ((count worldName) > 2) then {toUpper(worldName select [0,2])} else {"XG"};
GVAR(mgrsGridZoneDesignator) = format ["%1%2 %3", _zone, _band, _squareID];

View File

@ -0,0 +1,25 @@
#include "script_component.hpp"
ADDON = false;
PREP(appMarkKeypadEntry);
PREP(appMenuButtonConnectRangefinder);
PREP(appSettingsLBClick);
PREP(appWaypointsButtonDeleteWP);
PREP(appWaypointsButtonSetWP);
PREP(canShow);
PREP(deviceAddWaypoint);
PREP(deviceDeleteWaypoint);
PREP(deviceGetWaypoints);
PREP(dialogClosedEH);
PREP(mapDoubleTapEH);
PREP(mapOnDrawEH);
PREP(modeMapButtons);
PREP(moduleMapFill);
PREP(openDisplay);
PREP(recieveRangefinderData);
PREP(saveCurrentAndSetNewMode);
PREP(showApplicationPage);
PREP(updateDisplay);
ADDON = true;

View File

@ -0,0 +1,26 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"PabstMirror"};
authorUrl = "https://github.com/PabstMirror/";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "CfgWeapons.hpp"
#include "CfgVehicles.hpp"
#include "gui.hpp"
class ACE_Settings {
class GVAR(MapDataAvailable) {
value = 2;
typeName = "SCALAR";
isClientSetable = 0;
};
};

Binary file not shown.

View File

@ -0,0 +1,57 @@
/*
* Author: PabstMirror
* Handles the keypad entries from the "Mark" Application
*
* Arguments:
* 0: String version of Keypad entry ["ok","del","1",...] <STRING>
*
* Return Value:
* Nothing
*
* Example:
* ["ok"] call ace_microdagr_fnc_appMarkKeypadEntry
*
* Public: No
*/
#include "script_component.hpp"
private ["_display", "_editText", "_gridPosTuple", "_actualPos"];
PARAMS_1(_keypadButton);
disableSerialization;
_display = displayNull;
if (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG) then {
_display = (uiNamespace getVariable [QGVAR(DialogDisplay), displayNull]);
} else {
_display = (uiNamespace getVariable [QGVAR(RscTitleDisplay), displayNull]);
};
if (isNull _display) exitWith {ERROR("No Display");};
if (GVAR(currentApplicationPage) != APP_MODE_MARK) exitWith {};
_editText = ctrlText (_display displayCtrl IDC_MODEMARK_CORDSEDIT);
switch (_keypadButton) do {
case ("ok"): {
if ((count GVAR(newWaypointPosition)) == 0) then {
_gridPosTuple = [_editText] call BIS_fnc_gridToPos;
_actualPos = [(((_gridPosTuple select 0) select 0) + 0.5 * ((_gridPosTuple select 1) select 0)), (((_gridPosTuple select 0) select 1) + 0.5 * ((_gridPosTuple select 1) select 1))];
_actualPos set [2, (getTerrainHeightASL _actualPos)];
GVAR(newWaypointPosition) = _actualPos;
[APP_MODE_MARK] call FUNC(saveCurrentAndSetNewMode);
} else {
[_editText, GVAR(newWaypointPosition)] call FUNC(deviceAddWaypoint);
[APP_MODE_WAYPOINTS] call FUNC(saveCurrentAndSetNewMode);
};
};
case ("del"): {
_editText = _editText select [0, (((count _editText) - 1) max 0)];
(_display displayCtrl IDC_MODEMARK_CORDSEDIT) ctrlSetText _editText;
ctrlSetFocus (_display displayCtrl IDC_MODEMARK_CORDSEDIT);
};
default {
_editText = _editText + _keypadButton;
(_display displayCtrl IDC_MODEMARK_CORDSEDIT) ctrlSetText _editText;
ctrlSetFocus (_display displayCtrl IDC_MODEMARK_CORDSEDIT);
};
};

View File

@ -0,0 +1,20 @@
/*
* Author: PabstMirror
* Handles the "Connect To" button from the menu application
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_microdagr_fnc_appMenuButtonConnectRangefinder
*
* Public: No
*/
#include "script_component.hpp"
GVAR(currentWaypoint) = if (GVAR(currentWaypoint) == -2) then {-1} else {-2};
GVAR(rangeFinderPositionASL) = [];
[APP_MODE_INFODISPLAY] call FUNC(saveCurrentAndSetNewMode);

View File

@ -0,0 +1,27 @@
/*
* Author: PabstMirror
* Handles double clicking on the setting listbox
*
* Arguments:
* 0: Setting List box (not used) <CONTROL>
* 1: Index <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [settingList, 1] call ace_microdagr_fnc_appSettingsLBClick
*
* Public: No
*/
#include "script_component.hpp"
disableSerialization;
PARAMS_2(_control,_itemClicked);
switch (_itemClicked) do {
case (0): { GVAR(settingUseMils) = ! GVAR(settingUseMils)};
case (1): { GVAR(settingShowAllWaypointsOnMap) = ! GVAR(settingShowAllWaypointsOnMap)};
};
[] call FUNC(updateDisplay);

View File

@ -0,0 +1,37 @@
/*
* Author: PabstMirror
* Handles clicking the delete button from the waypoint application
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_microdagr_fnc_appWaypointsButtonDeleteWP
*
* Public: No
*/
#include "script_component.hpp"
private ["_display", "_wpIndex"];
disableSerialization;
_display = displayNull;
if (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG) then {
_display = (uiNamespace getVariable [QGVAR(DialogDisplay), displayNull]);
} else {
_display = (uiNamespace getVariable [QGVAR(RscTitleDisplay), displayNull]);
};
if (isNull _display) exitWith {ERROR("No Display");};
_wpIndex = lbCurSel (_display displayCtrl IDC_MODEWAYPOINTS_LISTOFWAYPOINTS);
//If it's our currentWP then deactivate
if (GVAR(currentWaypoint) == _wpIndex) then {GVAR(currentWaypoint) = -1};
//Delete from list:
[_wpIndex] call FUNC(deviceDeleteWaypoint);
//Update list now:
[] call FUNC(updateDisplay);

View File

@ -0,0 +1,33 @@
/*
* Author: PabstMirror
* Handles clicking the setWP button from the waypoint application
*
* Arguments:
* The "SetWP" button <CONTROL>
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_microdagr_fnc_appWaypointsButtonSetWP
*
* Public: No
*/
#include "script_component.hpp"
private ["_wpListBox", "_newWpIndex", "_waypoints"];
disableSerialization;
PARAMS_1(_wpButton);
_wpListBox = (ctrlParent _wpButton) displayCtrl 144501;
_newWpIndex = lbCurSel _wpListBox;
_waypoints = [] call FUNC(deviceGetWaypoints);
if ((_newWpIndex < 0) || (_newWpIndex > ((count _waypoints) - 1))) exitWith {
GVAR(currentWaypoint) = -1;
ERROR("out of bounds wp");
};
GVAR(currentWaypoint) = _newWpIndex;
[APP_MODE_COMPASS] call FUNC(saveCurrentAndSetNewMode);

View File

@ -0,0 +1,29 @@
/*
* Author: PabstMirror
* Tests if the dagr can be shown in a mode
*
* Arguments:
* The display mode to test showing <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_microdagr_fnc_canShow
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_1(_showType);
//Can always do closed or hidden
if (_showType in [DISPLAY_MODE_CLOSED, DISPLAY_MODE_HIDDEN]) exitWith {true};
//Can't interact then hide gps: TODO: any exceptions?
if (!([ACE_player, objNull, []] call EGVAR(common,canInteractWith))) exitWith {false};
//Can't have minimap up while zoomed in
if ((_showType == DISPLAY_MODE_DISPLAY) && {cameraview == "GUNNER"}) exitWith {false};
true

View File

@ -0,0 +1,24 @@
/*
* Author: PabstMirror
* Adds a waypoint to the "device"
* Device saving not implemented yet, just save to player object
*
* Arguments:
* 0: Waypoint name <STRING>
* 1: Waypoint Position ASL <ARRAY>
*
* Return Value:
* Nothing
*
* Example:
* ["Hill 55", [41,324, 12]] call ace_microdagr_fnc_deviceAddWaypoint
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_2(_waypointName,_waypointPosASL);
_waypoints = ace_player getVariable [QGVAR(waypoints), []];
_waypoints pushBack [_waypointName, _waypointPosASL];
ace_player setVariable [QGVAR(waypoints), _waypoints];

View File

@ -0,0 +1,26 @@
/*
* Author: PabstMirror
* Deletes a waypoint from the "device"
* Device saving not implemented yet, just save to player object
*
* Arguments:
* 0: Waypoint Index <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* ["Hill 55", [41,324, 12]] call ace_microdagr_fnc_deviceDeleteWaypoint
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_1(_wpIndex);
_waypoints = ace_player getVariable [QGVAR(waypoints), []];
if ((_wpIndex < 0) || (_wpIndex > ((count _waypoints) - 1))) exitWith {ERROR("out of bounds wp");};
_waypoints deleteAt _wpIndex;
ace_player setVariable [QGVAR(waypoints), _waypoints];

View File

@ -0,0 +1,19 @@
/*
* Author: PabstMirror
* Gets all waypoints from the "device"
* Device saving not implemented yet, just save to player object
*
* Arguments:
* Nothing
*
* Return Value:
* Waypoints <ARRAY>
*
* Example:
* [["Hill 55", [41,324, 12]]] = [] call ace_microdagr_fnc_deviceGetWaypoint
*
* Public: No
*/
#include "script_component.hpp"
(ace_player getVariable [QGVAR(waypoints), []])

View File

@ -0,0 +1,21 @@
/*
* Author: PabstMirror
* Handles the dialog closeing, switches back to display mode
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_microdagr_fnc_dialogClosedEH
*
* Public: No
*/
#include "script_component.hpp"
if (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG) then {
[-1] call FUNC(saveCurrentAndSetNewMode);
[DISPLAY_MODE_DISPLAY] call FUNC(openDisplay);
};

View File

@ -0,0 +1,30 @@
/*
* Author: PabstMirror
* Handles the double tapping either of the 2 mini-maps
*
* Arguments:
* 0: The Map <CONTROL>
* 1: MouseButton <NUMBER>
* 2: MousePosX <NUMBER>
* 3: MousePosY <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [minimap,0,0.5,0.5] call ace_microdagr_fnc_mapOnDrawEH
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_4(_theMap,_mouseButton,_xPos,_yPos);
//Only handle LMB
if (_mouseButton != 0) exitWith {};
_worldPos = _theMap ctrlMapScreenToWorld [_xPos, _yPos];
_worldPos set [2, (getTerrainHeightASL _worldPos)];
GVAR(newWaypointPosition) = _worldPos;
[APP_MODE_MARK] call FUNC(saveCurrentAndSetNewMode);

View File

@ -0,0 +1,65 @@
/*
* Author: PabstMirror
* Handles the draw event from all 3 maps (compass + 2 minimaps)
*
* Arguments:
* 0: The Map <CONTROL>
*
* Return Value:
* Nothing
*
* Example:
* [compassMap] call ace_microdagr_fnc_mapOnDrawEH
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_1(_theMap);
_theMap = _this select 0;
_mapSize = (ctrlPosition _theMap) select 3;
_waypoints = [] call FUNC(deviceGetWaypoints);
if (GVAR(currentApplicationPage) == 1) then {
_theMap ctrlMapAnimAdd [0, DUMMY_ZOOM, DUMMY_POS];
ctrlMapAnimCommit _theMap;
_size = 412 * _mapSize;
_theMap drawIcon [QUOTE(PATHTO_R(images\compass_starInverted.paa)), [1,1,1,1], DUMMY_POS, _size, _size, (-1 * (getDir ace_player)), '', 0 ];
_theMap drawIcon [QUOTE(PATHTO_R(images\compass_needle.paa)), [0.533,0.769,0.76,1], DUMMY_POS, _size, _size, 0, '', 0 ];
if (GVAR(currentWaypoint) != -1) then {
_targetPos = [];
if (GVAR(currentWaypoint) == -2) then {
if ((count GVAR(rangeFinderPositionASL)) == 3) then {
_targetPos = GVAR(rangeFinderPositionASL);
};
} else {
if (GVAR(currentWaypoint) < (count _waypoints)) then {
_targetPos = (_waypoints select GVAR(currentWaypoint)) select 1;
};
};
if ((count _targetPos) == 3) then {
_relBearing = [ace_player, _targetPos] call BIS_fnc_relativeDirTo;
_theMap drawIcon [QUOTE(PATHTO_R(images\compass_needle.paa)), [1,0.564,0.564,1], DUMMY_POS, _size, _size, _relBearing, '', 0 ];
};
};
} else { //Map Mode:
if (GVAR(mapAutoTrackPosition)) then {
_theMap ctrlMapAnimAdd [0, (GVAR(mapZoom)/_mapSize), GVAR(gpsPositionASL)];
ctrlMapAnimCommit _theMap;
};
_size = 48 * _mapSize;
_theMap drawIcon [QUOTE(PATHTO_R(images\icon_self.paa)), [0.533,0.769,0.76,0.75], GVAR(gpsPositionASL), _size, _size, (getDir ace_player), '', 0 ];
if (GVAR(settingShowAllWaypointsOnMap)) then {
_size = 32 * _mapSize;
{
EXPLODE_2_PVT(_x,_wpName,_wpPos);
_alpha = if (_forEachIndex == GVAR(currentWaypoint)) then {1} else {0.5};
_theMap drawIcon [QUOTE(PATHTO_R(images\icon_mapWaypoints.paa)), [1,1,1,_alpha], _wpPos, _size, _size, 0, '', 0 ];
} forEach _waypoints;
};
};

View File

@ -0,0 +1,31 @@
/*
* Author: PabstMirror
* Takes some arguments and returns something or other.
*
* Arguments:
* 0: String of the map button pressed <STRING>
*
* Return Value:
* Nothing
*
* Example:
* ["autotrack"] call ace_microdagr_fnc_modeMapButtons
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_1(_mode);
[-1] call FUNC(saveCurrentAndSetNewMode); //backup current draw pos/zoom
if (_mode == "autotrack") then {
GVAR(mapAutoTrackPosition) = !GVAR(mapAutoTrackPosition);
} else {
if (_mode == "zoomin") then {
GVAR(mapZoom) = GVAR(mapZoom) * (10/11);
} else {
GVAR(mapZoom) = GVAR(mapZoom) * (11/10);
};
};
[] call FUNC(showApplicationPage);

View File

@ -0,0 +1,26 @@
/*
* Author: PabstMirror
* Function for the module (handles the map fill level)
*
* Arguments:
* 0: logic <OBJECT>
* 1: synced units-not used <ARRAY>
* 2: Module Activated <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* [module, [], true] call ace_microdagr_fnc_moduleMapFill
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_3(_logic,_syncedUnits,_activated);
if (!_activated) exitWith {WARNING("Module Placed but not active");};
if (isServer) then {
[_logic, QGVAR(MapDataAvailable), "MapDataAvailable"] call EFUNC(common,readSettingFromModule);
};

View File

@ -0,0 +1,98 @@
/*
* Author: PabstMirror
* Changes the display mode of the microDAGR
*
* Arguments:
* 0: Display Mode to show the microDAGR in <NUMBER><OPTIONAL>
*
* Return Value:
* Nothing
*
* Example:
* [1] call ace_microdagr_fnc_openDisplay
*
* Public: No
*/
#include "script_component.hpp"
private ["_oldShowMode", "_args", "_pfID", "_player"];
DEFAULT_PARAM(0,_newDisplayShowMode,-1);
_oldShowMode = GVAR(currentShowMode);
if (_newDisplayShowMode == -1) then {
if (_oldShowMode in [DISPLAY_MODE_DISPLAY, DISPLAY_MODE_HIDDEN]) then {_newDisplayShowMode = DISPLAY_MODE_DIALOG};
if (_oldShowMode in [DISPLAY_MODE_DIALOG, DISPLAY_MODE_CLOSED]) then {_newDisplayShowMode = DISPLAY_MODE_DISPLAY};
};
if ((_newDisplayShowMode == DISPLAY_MODE_DISPLAY) && {!([DISPLAY_MODE_DISPLAY] call FUNC(canShow))}) then {_newDisplayShowMode = DISPLAY_MODE_HIDDEN};
if ((_newDisplayShowMode == DISPLAY_MODE_DIALOG) && {!([DISPLAY_MODE_DIALOG] call FUNC(canShow))}) then {_newDisplayShowMode = DISPLAY_MODE_HIDDEN};
//On first-startup
if (GVAR(currentApplicationPage) == APP_MODE_NULL) then {
GVAR(currentApplicationPage) = APP_MODE_INFODISPLAY;
GVAR(mapPosition) = getPos ace_player;
};
if (_newDisplayShowMode in [DISPLAY_MODE_CLOSED, DISPLAY_MODE_HIDDEN]) then {
//If Dialog is open, back it up before closing:
if (dialog && {!isNull (uiNamespace getVariable [QGVAR(DialogDisplay), displayNull])}) then {
[-1] call FUNC(saveCurrentAndSetNewMode);
closeDialog 0;
};
//Close the display:
(QGVAR(TheRscTitleDisplay) call BIS_fnc_rscLayer) cutText ["", "PLAIN"];
} else {
if (_newDisplayShowMode == DISPLAY_MODE_DISPLAY) then {
//If Dialog is open, back it up before closing:
if (dialog && {!isNull (uiNamespace getVariable [QGVAR(DialogDisplay), displayNull])}) then {
[-1] call FUNC(saveCurrentAndSetNewMode);
closeDialog 0;
};
//Open the display:
(QGVAR(TheRscTitleDisplay) call BIS_fnc_rscLayer) cutRsc [QGVAR(TheRscTitleDisplay), "PLAIN", 0, true];
} else { //DISPLAY_MODE_DIALOG
//Close the display:
(QGVAR(TheRscTitleDisplay) call BIS_fnc_rscLayer) cutText ["", "PLAIN"];
//Open the dialog:
createDialog QGVAR(TheDialog);
};
};
GVAR(currentShowMode) = _newDisplayShowMode;
//Update display applicaiton if open:
if (GVAR(currentShowMode) in [DISPLAY_MODE_DIALOG, DISPLAY_MODE_DISPLAY]) then {
[] call FUNC(showApplicationPage);
};
if ((_oldShowMode == DISPLAY_MODE_CLOSED) && {GVAR(currentShowMode) != DISPLAY_MODE_CLOSED}) then {
//Start a pfeh to update display and handle hiding display
[{
PARAMS_2(_args,_pfID);
EXPLODE_1_PVT(_args,_player);
if ((ace_player != _player) || {!("ACE_microDAGR" in (items ace_player))} || {GVAR(currentShowMode) == DISPLAY_MODE_CLOSED}) then {
GVAR(currentShowMode) = DISPLAY_MODE_CLOSED;
[_pfID] call CBA_fnc_removePerFrameHandler;
} else {
GVAR(gpsPositionASL) = getPosAsl ace_player;
if (GVAR(currentShowMode) == DISPLAY_MODE_HIDDEN) then {
//If display is hidden, and we can show, then swithc modes:
if ([DISPLAY_MODE_DISPLAY] call FUNC(canShow)) then {
[DISPLAY_MODE_DISPLAY] call FUNC(openDisplay);
};
} else {
if ([GVAR(currentShowMode)] call FUNC(canShow)) then {
[] call FUNC(updateDisplay);
} else {
[DISPLAY_MODE_HIDDEN] call FUNC(openDisplay);
};
};
};
}, 0.1, [ace_player]] call CBA_fnc_addPerFrameHandler;
};

View File

@ -0,0 +1,34 @@
/*
* Author: PabstMirror
* Recieves the data packet from the vector rangefinder
*
* Arguments:
* 0: Slope distance (Meters) <NUMBER>
* 1: Azimuth (Degrees) <NUMBER>
* 2: Inclination (Degrees) <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [1000, 45, 1] call ace_microdagr_fnc_recieveRangefinderData
*
* Public: No
*/
#include "script_component.hpp"
private ["_horizontalDistance", "_verticleDistance", "_targetOffset", "_targetPosASL"];
PARAMS_3(_slopeDistance,_azimuth,_inclination);
if (GVAR(currentWaypoint) != -2) exitWith {}; //Only take waypoint when "connected"
if (_slopeDistance < 0) exitWith {}; //Bad Data
_horizontalDistance = (cos _inclination) * _slopeDistance;
_verticleDistance = (sin _inclination) * _slopeDistance;
_targetOffset = [((sin _azimuth) * _horizontalDistance), ((cos _azimuth) * _horizontalDistance), _verticleDistance];
//This assumes the "rangefinder view" pos is very close to player, at worst the turret should only be a few meters different
_targetPosASL = (getPosASL ace_player) vectorAdd _targetOffset;
GVAR(rangeFinderPositionASL) = _targetPosASL;

View File

@ -0,0 +1,62 @@
/*
* Author: PabstMirror
* Saves the current mode and sets a new mode
* Used to backup display when switching display modes
*
* Arguments:
* 0: New Mode <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [2] call ace_microdagr_fnc_saveCurrentAndSetNewMode
*
* Public: No
*/
#include "script_component.hpp"
private ["_display", "_theMap", "_mapSize", "_centerPos"];
PARAMS_1(_newMode);
disableSerialization;
_display = displayNull;
if (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG) then {
_display = (uiNamespace getVariable [QGVAR(DialogDisplay), displayNull]);
} else {
_display = (uiNamespace getVariable [QGVAR(RscTitleDisplay), displayNull]);
};
if (isNull _display) exitWith {ERROR("No Display");};
if (GVAR(currentApplicationPage) == 2) then {
_theMap = if (!GVAR(mapShowTexture)) then {_display displayCtrl IDC_MAPPLAIN} else {_display displayCtrl IDC_MAPDETAILS};
_mapCtrlPos = ctrlPosition _theMap;
_mapSize = _mapCtrlPos select 3;
_centerPos = [((_mapCtrlPos select 0) + (_mapCtrlPos select 2) / 2), ((_mapCtrlPos select 1) + (_mapCtrlPos select 3) / 2)];
GVAR(mapPosition) = _theMap ctrlMapScreenToWorld _centerPos;
GVAR(mapZoom) = (ctrlMapScale _theMap) * _mapSize;
//Hit button again, toggle map modes:
if (_newMode == 2) then {
if (GVAR(mapShowTexture)) then {
GVAR(mapShowTexture) = false;
} else {
if (GVAR(MapDataAvailable) == MAP_DETAIL_SAT) then {
GVAR(mapShowTexture) = true;
};
};
};
};
//Can't switch to map if no map loaded
if (_newMode == APP_MODE_MAP) then {
if (GVAR(MapDataAvailable) == MAP_DETAIL_NONE) then {
_newMode = -1;
};
};
if (_newMode != -1) then {
GVAR(currentApplicationPage) = _newMode;
[] call FUNC(showApplicationPage);
};

View File

@ -0,0 +1,127 @@
/*
* Author: PabstMirror
* Changes the "application page" shown on the microDAGR
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_microdagr_fnc_showApplicationPage
*
* Public: No
*/
#include "script_component.hpp"
private ["_display", "_daylight", "_theMap", "_mapSize"];
disableSerialization;
_display = displayNull;
if (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG) then {
_display = (uiNamespace getVariable [QGVAR(DialogDisplay), displayNull]);
} else {
_display = (uiNamespace getVariable [QGVAR(RscTitleDisplay), displayNull]);
};
if (isNull _display) exitWith {ERROR("No Display");};
//Fade "shell" at night
_daylight = 0.05 max (((1 - overcast)/2 + ((1 - cos (daytime * 360/24)) / 4)) * (linearConversion [0, 1, sunOrMoon, (0.25 * moonIntensity), 1]));
(_display displayCtrl IDC_MICRODAGRSHELL) ctrlSetTextColor [_daylight, _daylight, _daylight, 1];
//TopBar
(_display displayCtrl IDC_RANGEFINDERCONNECTEDICON) ctrlShow (GVAR(currentWaypoint) == -2);
//Mode: Info:
(_display displayCtrl IDC_MODEDISPLAY) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_INFODISPLAY);
if (GVAR(currentApplicationPage) == APP_MODE_INFODISPLAY) then {
(_display displayCtrl IDC_MODEDISPLAY_UTMGRID) ctrlSetText GVAR(mgrsGridZoneDesignator);
if (GVAR(currentWaypoint) == -1) then {
(_display displayCtrl IDC_MODEDISPLAY_MODEPOSTIMECG) ctrlShow true;
(_display displayCtrl IDC_MODEDISPLAY_MODEPOSTARGETCG) ctrlShow false;
} else {
(_display displayCtrl IDC_MODEDISPLAY_MODEPOSTIMECG) ctrlShow false;
(_display displayCtrl IDC_MODEDISPLAY_MODEPOSTARGETCG) ctrlShow true;
if (GVAR(currentWaypoint) == -2) then {
(_display displayCtrl IDC_MODEDISPLAY_TARGETICON) ctrlSetText "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa"
} else {
(_display displayCtrl IDC_MODEDISPLAY_TARGETICON) ctrlSetText QUOTE(PATHTOF(images\icon_menuMark.paa));
};
};
};
//Mode: Compass:
(_display displayCtrl IDC_MODECOMPASS) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_COMPASS);
(_display displayCtrl IDC_MAPCOMPASS) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_COMPASS);
//Mode: Map
(_display displayCtrl IDC_MODEMAP_MAPTRACKBUTTON) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_MAP);
(_display displayCtrl IDC_MODEMAP_MAPZOOMIN) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_MAP);
(_display displayCtrl IDC_MODEMAP_MAPZOOMOUT) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_MAP);
(_display displayCtrl IDC_MAPPLAIN) ctrlShow ((GVAR(currentApplicationPage) == APP_MODE_MAP) && {!GVAR(mapShowTexture)});
(_display displayCtrl IDC_MAPDETAILS) ctrlShow ((GVAR(currentApplicationPage) == APP_MODE_MAP) && {GVAR(mapShowTexture)});
if (GVAR(currentApplicationPage) == APP_MODE_MAP) then {
_theMap = if (!GVAR(mapShowTexture)) then {_display displayCtrl IDC_MAPPLAIN} else {_display displayCtrl IDC_MAPDETAILS};
_mapSize = (ctrlPosition _theMap) select 3;
_theMap ctrlMapAnimAdd [0, (GVAR(mapZoom) / _mapSize), GVAR(mapPosition)];
ctrlMapAnimCommit _theMap;
if (GVAR(mapAutoTrackPosition)) then {
(_display displayCtrl IDC_MODEMAP_MAPTRACKBUTTON) ctrlSetTextColor [1,1,1,0.8];
} else {
(_display displayCtrl IDC_MODEMAP_MAPTRACKBUTTON) ctrlSetTextColor [1,1,1,0.4];
};
};
//Mode: Menu
(_display displayCtrl IDC_MODEMENU) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_MENU);
//Mode: Mark
if (GVAR(currentApplicationPage) == APP_MODE_MARK) then {
(_display displayCtrl IDC_MODEMARK) ctrlShow true;
//not backed up for displayMode swap, not a big deal
if ((count GVAR(newWaypointPosition)) == 0) then {
(_display displayCtrl IDC_MODEMARK_HEADER) ctrlSetText (localize "STR_ACE_microdagr_wpEnterCords");
(_display displayCtrl IDC_MODEMARK_CORDSEDIT) ctrlSetText "";
} else {
(_display displayCtrl IDC_MODEMARK_HEADER) ctrlSetText format [(localize "STR_ACE_microdagr_wpEnterName"), mapGridPosition GVAR(newWaypointPosition)];
(_display displayCtrl IDC_MODEMARK_CORDSEDIT) ctrlSetText format ["[%1]", mapGridPosition GVAR(newWaypointPosition)];
};
ctrlSetFocus (_display displayCtrl IDC_MODEMARK_CORDSEDIT);
} else {
(_display displayCtrl IDC_MODEMARK) ctrlShow false;
GVAR(newWaypointPosition) = [];
};
//Mode: Waypoints
(_display displayCtrl IDC_MODEWAYPOINTS) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_WAYPOINTS);
//Mode: Setting
(_display displayCtrl IDC_MODESETTINGS) ctrlShow (GVAR(currentApplicationPage) == APP_MODE_SETUP);
//Buttons pushed:
if (GVAR(currentApplicationPage) == APP_MODE_INFODISPLAY) then {
(_display displayCtrl IDC_BUTTONBG0) ctrlSetText QUOTE(PATHTOF(images\button_pushedDown.paa));
} else {
(_display displayCtrl IDC_BUTTONBG0) ctrlSetText QUOTE(PATHTOF(images\button_pushedUp.paa));
};
if (GVAR(currentApplicationPage) == APP_MODE_COMPASS) then {
(_display displayCtrl IDC_BUTTONBG1) ctrlSetText QUOTE(PATHTOF(images\button_pushedDown.paa));
} else {
(_display displayCtrl IDC_BUTTONBG1) ctrlSetText QUOTE(PATHTOF(images\button_pushedUp.paa));
};
if (GVAR(currentApplicationPage) == APP_MODE_MAP) then {
(_display displayCtrl IDC_BUTTONBG2) ctrlSetText QUOTE(PATHTOF(images\button_pushedDown.paa));
} else {
(_display displayCtrl IDC_BUTTONBG2) ctrlSetText QUOTE(PATHTOF(images\button_pushedUp.paa));
};
//Update the page now:
[] call FUNC(updateDisplay);

View File

@ -0,0 +1,198 @@
/*
* Author: PabstMirror
* Updates the display (several times a second) called from the pfeh
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_microdagr_fnc_updateDisplay
*
* Public: No
*/
#include "script_component.hpp"
private ["_display", "_waypoints", "_posString", "_eastingText", "_northingText", "_numASL", "_aboveSeaLevelText", "_compassAngleText", "_targetPosName", "_targetPosLocationASL", "_bearingText", "_rangeText", "_targetName", "_bearing", "_2dDistanceKm", "_SpeedText", "_playerPos2d", "_wpListBox", "_currentIndex", "_wpName", "_wpPos", "_settingListBox", "_yearString", "_monthSring", "_dayString"];
disableSerialization;
_display = displayNull;
if (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG) then {
_display = (uiNamespace getVariable [QGVAR(DialogDisplay), displayNull]);
} else {
_display = (uiNamespace getVariable [QGVAR(RscTitleDisplay), displayNull]);
};
if (isNull _display) exitWith {ERROR("No Display");};
(_display displayCtrl IDC_CLOCKTEXT) ctrlSetText ([daytime, "HH:MM"] call bis_fnc_timeToString);
_waypoints = [] call FUNC(deviceGetWaypoints);
switch (GVAR(currentApplicationPage)) do {
case (APP_MODE_INFODISPLAY): {
//Easting/Northing:
_posString = mapGridPosition ACE_player;
_eastingText = "";
_northingText = "";
if (count _posString > 0) then {
_eastingText = (_posString select [0, ((count _posString)/2)]) + "e";
_northingText = (_posString select [(count _posString)/2, (count _posString - 1)]) + "n";
};
(_display displayCtrl IDC_MODEDISPLAY_EASTING) ctrlSetText _eastingText;
(_display displayCtrl IDC_MODEDISPLAY_NORTHING) ctrlSetText _northingText;
//Elevation:
_numASL = (GVAR(gpsPositionASL) select 2) + GVAR(mapAltitude);
_aboveSeaLevelText = [_numASL, 5, 0] call CBA_fnc_formatNumber;
_aboveSeaLevelText = if (_numASL > 0) then {"+" + _aboveSeaLevelText + " MSL"} else {_aboveSeaLevelText + " MSL"};
(_display displayCtrl IDC_MODEDISPLAY_ELEVATIONNUM) ctrlSetText _aboveSeaLevelText;
//Heading:
_compassAngleText = if (GVAR(settingUseMils)) then {
[(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber;
} else {
([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
};
(_display displayCtrl IDC_MODEDISPLAY_HEADINGNUM) ctrlSetText _compassAngleText;
//Speed:
(_display displayCtrl IDC_MODEDISPLAY_SPEEDNUM) ctrlSetText format ["%1kph", (round (speed (vehicle ace_player)))];;
if (GVAR(currentWaypoint) == -1) then {
_yearString = (date select 0);
_monthSring = localize (["error","str_january","str_february","str_march","str_april","str_may","str_june","str_july","str_august","str_september","str_october","str_november","str_december"] select (date select 1));
_dayString = if ((date select 2) < 10) then {"0" + str (date select 2)} else {str (date select 2)};
(_display displayCtrl IDC_MODEDISPLAY_TIMEDISPLAYGREEN1) ctrlSetText format ["%1-%2-%3", _yearString, _monthSring, _dayString]; //"18-Feb-2010";
(_display displayCtrl IDC_MODEDISPLAY_TIMEDISPLAYGREEN2) ctrlSetText ([daytime, "HH:MM:SS"] call bis_fnc_timeToString);
} else {
_targetPosName = "";
_targetPosLocationASL = [];
_bearingText = "----";
_rangeText = "----";
_aboveSeaLevelText = "----";
_targetName = "----";
if (GVAR(currentWaypoint) == -2) then {
if (!(GVAR(rangeFinderPositionASL) isEqualTo [])) then {
_targetPosName = format ["[%1]", (mapGridPosition GVAR(rangeFinderPositionASL))];
_targetPosLocationASL = GVAR(rangeFinderPositionASL);
};
} else {
if (GVAR(currentWaypoint) > ((count _waypoints) - 1)) exitWith {ERROR("bounds");};
_targetPosName = (_waypoints select GVAR(currentWaypoint)) select 0;
_targetPosLocationASL = (_waypoints select GVAR(currentWaypoint)) select 1;
};
if (!(_targetPosLocationASL isEqualTo [])) then {
_bearing = [GVAR(gpsPositionASL), _targetPosLocationASL] call BIS_fnc_dirTo;
_bearingText = if (GVAR(settingUseMils)) then {
[(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber;
} else {
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
};
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
_rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)];
_numASL = (_targetPosLocationASL select 2) + GVAR(mapAltitude);
_aboveSeaLevelText = [_numASL, 5, 0] call CBA_fnc_formatNumber;
_aboveSeaLevelText = if (_numASL > 0) then {"+" + _aboveSeaLevelText + " MSL"} else {_aboveSeaLevelText + " MSL"};
};
(_display displayCtrl IDC_MODEDISPLAY_TRACKNUM) ctrlSetText _bearingText;
(_display displayCtrl IDC_MODEDISPLAY_TARGETRANGENUM) ctrlSetText _rangeText;
(_display displayCtrl IDC_MODEDISPLAY_TARGETELEVATIONNUM) ctrlSetText _aboveSeaLevelText;
(_display displayCtrl IDC_MODEDISPLAY_TARGETNAME) ctrlSetText _targetPosName;
};
};
case (APP_MODE_COMPASS): {
//Heading:
_compassAngleText = if (GVAR(settingUseMils)) then {
[(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber;
} else {
([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°M" //degree symbol is in UTF-8
};
(_display displayCtrl IDC_MODECOMPASS_HEADING) ctrlSetText _compassAngleText;
//Speed:
_SpeedText = format ["%1kph", (round (speed (vehicle ace_player)))];;
(_display displayCtrl IDC_MODECOMPASS_SPEED) ctrlSetText _SpeedText;
if (GVAR(currentWaypoint) == -1) then {
(_display displayCtrl IDC_MODECOMPASS_BEARING) ctrlSetText "";
(_display displayCtrl IDC_MODECOMPASS_RANGE) ctrlSetText "";
(_display displayCtrl IDC_MODECOMPASS_TARGET) ctrlSetText "";
} else {
_playerPos2d = GVAR(gpsPositionASL) select [0,2];
_targetPosName = "";
_targetPosLocationASL = [];
if (GVAR(currentWaypoint) == -2) then {
if (!(GVAR(rangeFinderPositionASL) isEqualTo [])) then {
_targetPosName = format ["[%1]", (mapGridPosition GVAR(rangeFinderPositionASL))];
_targetPosLocationASL = GVAR(rangeFinderPositionASL);
};
} else {
if (GVAR(currentWaypoint) > ((count _waypoints - 1))) exitWith {ERROR("bounds");};
_targetPosName = (_waypoints select GVAR(currentWaypoint)) select 0;
_targetPosLocationASL = (_waypoints select GVAR(currentWaypoint)) select 1;
};
_bearing = "---";
_rangeText = "---";
if (!(_targetPosLocationASL isEqualTo [])) then {
_bearing = [GVAR(gpsPositionASL), _targetPosLocationASL] call BIS_fnc_dirTo;
_bearingText = if (GVAR(settingUseMils)) then {
[(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber;
} else {
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°M" //degree symbol is in UTF-8
};
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
_rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)];
};
(_display displayCtrl IDC_MODECOMPASS_BEARING) ctrlSetText _bearingText;
(_display displayCtrl IDC_MODECOMPASS_RANGE) ctrlSetText _rangeText;
(_display displayCtrl IDC_MODECOMPASS_TARGET) ctrlSetText _targetPosName;
};
};
case (APP_MODE_WAYPOINTS): {
_wpListBox = _display displayCtrl IDC_MODEWAYPOINTS_LISTOFWAYPOINTS;
_currentIndex = lbCurSel _wpListBox;
lbClear _wpListBox;
{
EXPLODE_2_PVT(_x,_wpName,_wpPos);
_wpListBox lbAdd _wpName;
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_wpPos select [0,2])) / 1000;
_wpListBox lbSetTextRight [_forEachIndex, (format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)])];
} forEach _waypoints;
_currentIndex = (_currentIndex max 0) min (count _waypoints);
_wpListBox lbSetCurSel _currentIndex;
};
case (APP_MODE_SETUP): {
_settingListBox = _display displayCtrl IDC_MODESETTINGS;
lbClear _settingListBox;
_settingListBox lbAdd (localize "STR_ACE_microdagr_settingUseMils");
if (GVAR(settingUseMils)) then {
_settingListBox lbSetTextRight [0, (localize "STR_ACE_microdagr_settingMils")];
} else {
_settingListBox lbSetTextRight [0, (localize "STR_ACE_microdagr_settingDegrees")];
};
_settingListBox lbAdd (localize "STR_ACE_microdagr_settingShowWP");
if (GVAR(settingShowAllWaypointsOnMap)) then {
_settingListBox lbSetTextRight [1, (localize "STR_ACE_microdagr_settingOn")];
} else {
_settingListBox lbSetTextRight [1, (localize "STR_ACE_microdagr_settingOff")];
};
};
};

View File

@ -0,0 +1 @@
#include "\z\ace\addons\microdagr\script_component.hpp"

83
addons/microdagr/gui.hpp Normal file
View File

@ -0,0 +1,83 @@
#define ST_LEFT 0x00
#define ST_RIGHT 0x01
#define ST_CENTER 0x02
class RscActiveText;
class RscText;
class RscPicture;
class RscMapControl {
class hospital;
class church;
class lighthouse;
class power;
class fuelstation;
class transmitter;
};
class RscMapControlEmpty;
class RscControlsGroupNoScrollbars;
class RscEdit;
class RscButton;
class RscListBox;
class GVAR(RscActiveTextPicture): RscActiveText {
style = 48;
colorText[] = {1,1,1,1};
colorActive[] = {1,1,1,1};
color[] = {1,1,1,1};
color2[] = {1,1,1,1};
colorFocused[] = {1,1,1,1};
colorDisabled[] = {1,1,1,1};
colorBackground[] = {1,1,1,1};
colorBackground2[] = {1,1,1,1};
colorBackgroundFocused[] = {1,1,1,1};
};
class GVAR(RscText): RscText {
font = "EtelkaMonospacePro";
//Design note: I think less contrast in font color makes it look more natural and less "eye catching"
colorText[] = {0.75,0.75,0.75,1};
};
//Redfine Scaling for the Dialog
#define X_PART(num) QUOTE((((60 - 25)/2) + (num)) * (safeZoneH / 64) + (safezoneX + (safezoneW - safeZoneH)/2))
#define Y_PART(num) QUOTE((0 + (num)) * (safeZoneH / 36) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2))
#define W_PART(num) QUOTE((num) * (safeZoneH / 64))
#define H_PART(num) QUOTE((num) * (safeZoneH / 36))
class GVAR(TheDialog) {
idd = -1;
movingEnable = 1;
duration = 9999999;
fadein = 0;
fadeout = 0;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(DialogDisplay)),_this select 0)];);
onUnload = QUOTE([] call FUNC(dialogClosedEH));
#include "gui_controls.hpp"
};
//Redfine Scaling for the RscTitle
#define PROFILE_X (profilenamespace getvariable ['IGUI_GRID_GPS_X', 0])
#define PROFILE_Y (profilenamespace getvariable ['IGUI_GRID_GPS_Y', 0])
#define PROFILE_W (profilenamespace getvariable ['IGUI_GRID_GPS_W', 1])
#define PROFILE_H ((16/9) * (profilenamespace getvariable ['IGUI_GRID_GPS_W', 1]))
#define X_PART(num) QUOTE((num) / 25 * PROFILE_W + PROFILE_X)
#define Y_PART(num) QUOTE((num) / 25 * PROFILE_H + PROFILE_Y)
#define W_PART(num) QUOTE((num) / 25 * PROFILE_W)
#define H_PART(num) QUOTE((num) / 25 * PROFILE_H)
class RscTitles {
class GVAR(TheRscTitleDisplay) {
idd = -1;
movingEnable = 1;
duration = 9999999;
fadein = 0;
fadeout = 0;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(RscTitleDisplay)),_this select 0)];);
#include "gui_controls.hpp"
};
};

View File

@ -0,0 +1,769 @@
class controlsBackground {
class BackgroundBlackScreen: GVAR(RscText) {
idc = -1;
x = X_PART(-1);
y = Y_PART(-1);
//Cover the "seams" and make it bigger
w = W_PART(27);
h = H_PART(27);
colorBackground[] = {0,0,0,1};
};
class StatusBarBS: RscPicture {
idc = -1;
text = QUOTE(PATHTOF(images\microDAGR_topBar.paa));
x = X_PART(0);
y = Y_PART(0);
w = W_PART(25);
h = H_PART(2);
};
class RangefinderConnectedIcon: RscPicture {
idc = IDC_RANGEFINDERCONNECTEDICON;
text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
x = X_PART(6.35);
y = Y_PART(0.1);
w = W_PART(2.7);
h = H_PART(1.8);
};
class ClockText: GVAR(RscText) {
idc = IDC_CLOCKTEXT;
style = ST_RIGHT;
// text = "12:00";
x = X_PART(0);
y = Y_PART(0.2);
w = W_PART(15);
h = H_PART(1.8);
sizeEx = H_PART(1.5);
colorText[] = {0,0.67,0.22,1};
};
class ClockText2: GVAR(RscText) {
idc = -1;
style = ST_LEFT;
text = "L";
x = X_PART(14.75);
y = Y_PART(0.2);
w = W_PART(2);
h = H_PART(1.8);
sizeEx = H_PART(1.5);
};
class MapPlain: RscMapControl {
idc = IDC_MAPPLAIN;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
onDraw = QUOTE(_this call FUNC(mapOnDrawEH));
onMouseButtonDblClick = QUOTE(_this call FUNC(mapDoubleTapEH));
scaleMin = 0.005;
scaleMax = 10; //Lets the mini display zoom out far enough
drawObjects = 0;
text = "#(argb,8,8,3)color(1,1,1,1)";
maxSatelliteAlpha = 0;
alphaFadeStartScale = 100;
alphaFadeEndScale = 100;
colorSea[] = {0.467,0.631,0.851,0.25};
colorCountlinesWater[] = {0.491,0.577,0.702,0.3};
colorMainCountlinesWater[] = {0.491,0.577,0.702,0.6};
colorGrid[] = {0,0,0,0.15};
colorGridMap[] = {0,0,0,0.2};
//Text sizes:
sizeExLabel = 0;
sizeExGrid = H_PART(0.5);
sizeExUnits = 0;
sizeExNames = H_PART(2); //Marker's Text
sizeExInfo = 0;
sizeExLevel = 0;
sizeEx = H_PART(1);
ptsPerSquareSea = 5;
ptsPerSquareTxt = 20;
ptsPerSquareRoad = 0.01;
ptsPerSquareObj = 2000; //don't show buildings
ptsPerSquareCLn = 100;
ptsPerSquareCost = 200;
ptsPerSquareFor = 9;
ptsPerSquareForEdge = 9;
showCountourInterval = 0;
//Copy style from ace_map's config.cpp:
colorTracks[] = {1.0,0.0,0.0,1};
colorTracksFill[] = {1.0,1.0,0.0,1};
colorRoads[] = {0.0,0.0,0.0,1};
colorRoadsFill[] = {1,1,0,1};
colorMainRoads[] = {0.0,0.0,0.0,1};
colorMainRoadsFill[] = {1,0.6,0.4,1};
colorRailWay[] = {0.8,0.2,0,1};
colorBackground[] = {0.929412, 0.929412, 0.929412, 1.0};
colorOutside[] = {0.929412, 0.929412, 0.929412, 1.0};
colorCountlines[] = {0.647059, 0.533333, 0.286275, 0.5};
colorMainCountlines[] = {0.858824, 0, 0,0.5};
colorForest[] = {0.6, 0.8, 0.2, 0.1};
colorForestBorder[] = {0,1,0,0.25};
colorLevels[] = {0.0, 0.0, 0.0, 0.5};
colorRocks[] = {0.50, 0.50, 0.50, 0};
};
class MapDetails: MapPlain {
idc = IDC_MAPDETAILS;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
onDraw = QUOTE(_this call FUNC(mapOnDrawEH));
onMouseButtonDblClick = QUOTE(_this call FUNC(mapDoubleTapEH));
// ptsPerSquareSea = 5;
// ptsPerSquareTxt = 20;
// ptsPerSquareRoad = 0.01;
ptsPerSquareObj = 9;
// ptsPerSquareCLn = 100;
// ptsPerSquareCost = 200;
// ptsPerSquareFor = 9;
// ptsPerSquareForEdge = 9;
maxSatelliteAlpha = 0.5;
colorRocks[] = {0.50, 0.50, 0.50, 0.50};
class hospital: Hospital {color[] = {0,0,0,0.25};};
class church: Church {color[] = {0,0,0,0.25};};
class lighthouse: Lighthouse {color[] = {0,0,0,0.25};};
class power: power {color[] = {0,0,0,0.25};};
class fuelstation: Fuelstation {color[] = {0,0,0,0.25};};
class transmitter: Transmitter {color[] = {0,0,0,0.25};};
};
class MapCompass: RscMapControlEmpty {
idc = IDC_MAPCOMPASS;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
onDraw = QUOTE(_this call FUNC(mapOnDrawEH));
colorBackground[] = {0,0,0,1};
colorOutside[] = {0,0,0,1};
moveOnEdges = 0;
};
};
class controls {
class TopMenuClick: GVAR(RscActiveTextPicture) {
idc = -1;
text = "#(argb,8,8,3)color(0,0,0,0)";
x = X_PART(0);
y = Y_PART(0);
w = W_PART(25);
h = H_PART(2);
onbuttonclick = QUOTE([3] call FUNC(saveCurrentAndSetNewMode));
};
//Mode: Display
class ModeDisplay: RscControlsGroupNoScrollbars {
idc = IDC_MODEDISPLAY;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
class Controls {
class MGRSNew: GVAR(RscText) {
idc = -1;
text = "$STR_ACE_microdagr_controlMGRS";
x = W_PART(0.5);
y = H_PART(0);
w = W_PART(10);
h = H_PART(1);
sizeEx = H_PART(1);
};
class WGD: GVAR(RscText) {
idc = -1;
style = ST_RIGHT;
text = "$STR_ACE_microdagr_controlWGD";
x = W_PART(14.5);
y = H_PART(0);
w = W_PART(10);
h = H_PART(1);
sizeEx = H_PART(1);
};
class UTMGrid: GVAR(RscText) {
idc = IDC_MODEDISPLAY_UTMGRID;
// text = "15T XG";
x = W_PART(4.5);
y = H_PART(1.5);
w = W_PART(10);
h = H_PART(2);
sizeEx = H_PART(2);
};
class selfIcon: RscPicture {
idc = -1;
text = QUOTE(PATHTOF(images\icon_self.paa));
x = W_PART(0.5);
y = H_PART(2);
w = W_PART(4);
h = H_PART(3);
};
class Easting: GVAR(RscText) {
idc = IDC_MODEDISPLAY_EASTING;
// text = "11994e"; //--- ToDo: Localize;
style = ST_RIGHT;
x = W_PART(14.5);
y = H_PART(1.5);
w = W_PART(10);
h = H_PART(2);
sizeEx = H_PART(2);
};
class Northing: GVAR(RscText) {
idc = IDC_MODEDISPLAY_NORTHING;
// text = "11994n"; //--- ToDo: Localize;
style = ST_RIGHT;
x = W_PART(14.5);
y = H_PART(3.5);
w = W_PART(10);
h = H_PART(2);
sizeEx = H_PART(2);
};
class ElevationText: GVAR(RscText) {
idc = -1;
text = "$STR_A3_disp_editor_elevation";
x = W_PART(0.5);
y = H_PART(6);
w = W_PART(10);
h = H_PART(1.5);
sizeEx = H_PART(1.25);
};
class ElevationNum: GVAR(RscText) {
idc = IDC_MODEDISPLAY_ELEVATIONNUM;
// text = "+000232 MSL"; //--- ToDo: Localize;
style = ST_RIGHT;
x = W_PART(12);
y = H_PART(6);
w = W_PART(12.5);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
};
class RscPicture_1201: RscPicture {
idc = -1;
text = "#(argb,8,8,3)color(1,1,1,0.75)";
x = W_PART(0.5);
y = H_PART(8.115);
w = W_PART(24);
h = H_PART(0.05);
};
class CompasIcon: RscPicture {
idc = -1;
text = QUOTE(PATHTOF(images\icon_infoCompass.paa));
x = W_PART(0.5);
y = H_PART(8.5);
w = W_PART(2);
h = H_PART(1.5);
};
class HeadingNum: GVAR(RscText) {
idc = IDC_MODEDISPLAY_HEADINGNUM;
// text = "097.2oM"; //--- ToDo: Localize;
x = W_PART(4);
y = H_PART(8.5);
w = W_PART(10);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
};
class SpeedNum: GVAR(RscText) {
idc = IDC_MODEDISPLAY_SPEEDNUM;
// text = "34kph"; //--- ToDo: Localize;
style = ST_RIGHT;
x = W_PART(14.5);
y = H_PART(8.5);
w = W_PART(7.5);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
};
class RscPicture_1204: RscPicture {
idc = -1;
text = "#(argb,8,8,3)color(1,1,1,0.75)";
x = W_PART(0.5);
y = H_PART(10.45);
w = W_PART(24);
h = H_PART(0.05);
};
class modePosTimeCG: RscControlsGroupNoScrollbars {
idc = IDC_MODEDISPLAY_MODEPOSTIMECG;
x = W_PART(0);
y = H_PART(10.5);
w = W_PART(25);
h = H_PART(8.5);
class controls {
class TimeIcon: RscPicture {
idc = -1;
text = QUOTE(PATHTOF(images\icon_infoClock.paa));
x = W_PART(0.5);
y = H_PART(3.5);
w = W_PART(2);
h = H_PART(1.5);
};
class TimeDisplayGreen1: GVAR(RscText) {
idc = IDC_MODEDISPLAY_TIMEDISPLAYGREEN1;
x = W_PART(5);
y = H_PART(2.75);
w = W_PART(15);
h = H_PART(1.5);
style = ST_CENTER;
sizeEx = H_PART(1.5);
colorText[] = {0,0.67,0.22,1};
};
class TimeDisplayGreen2: TimeDisplayGreen1 {
idc = IDC_MODEDISPLAY_TIMEDISPLAYGREEN2;
y = H_PART(4.25);
};
};
};
class modePosTargetCG: RscControlsGroupNoScrollbars {
idc = IDC_MODEDISPLAY_MODEPOSTARGETCG;
x = W_PART(0);
y = H_PART(10.5);
w = W_PART(25);
h = H_PART(8.5);
class controls {
class TargetIcon: RscPicture {
idc = IDC_MODEDISPLAY_TARGETICON;
text = QUOTE(PATHTOF(images\icon_menuMark.paa));
x = W_PART(0.5);
y = H_PART(0.5);
w = W_PART(2);
h = H_PART(1.5);
};
class TrackNum: GVAR(RscText) {
idc = IDC_MODEDISPLAY_TRACKNUM;
// text = "097.2oM"; //--- ToDo: Localize;
x = W_PART(4);
y = H_PART(0.5);
w = W_PART(10);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
};
class TargetRangeText: GVAR(RscText) {
idc = -1;
text = "$STR_ACE_microdagr_controlRange";
x = W_PART(0.5);
y = H_PART(2);
w = W_PART(7.5);
h = H_PART(1.5);
sizeEx = H_PART(1.25);
};
class TargetRangeNum: GVAR(RscText) {
idc = IDC_MODEDISPLAY_TARGETRANGENUM;
// text = "1250 m";
style = ST_RIGHT;
x = W_PART(14.5);
y = H_PART(2);
w = W_PART(10);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
};
class TargetElevationText: GVAR(RscText) {
idc = -1;
text = "$STR_A3_disp_editor_elevation"; //--- ToDo: Localize;
x = W_PART(0.5);
y = H_PART(3.5);
w = W_PART(10);
h = H_PART(1.5);
sizeEx = H_PART(1.25);
};
class TargetElevationNum: GVAR(RscText) {
idc = IDC_MODEDISPLAY_TARGETELEVATIONNUM;
// text = "+000232 MSL"; //--- ToDo: Localize;
style = ST_RIGHT;
x = W_PART(12);
y = H_PART(3.5);
w = W_PART(12.5);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
};
class TargetName: GVAR(RscText) {
idc = IDC_MODEDISPLAY_TARGETNAME;
// text = "43243 33432"; //--- ToDo: Localize;
style = ST_CENTER;
x = W_PART(1);
y = H_PART(5.5);
w = W_PART(23);
h = H_PART(2);
sizeEx = H_PART(2);
};
};
};
};
};
//Mode: Compass
class ModeCompass: RscControlsGroupNoScrollbars {
idc = IDC_MODECOMPASS;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
class Controls {
class CompassHeader: GVAR(RscText) {
idc = -1;
style = ST_CENTER;
text = "$STR_ACE_microdagr_compasDirection";
x = W_PART(0);
y = H_PART(0);
w = W_PART(25);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
};
class CompassHeading: GVAR(RscText) {
idc = IDC_MODECOMPASS_HEADING;
style = ST_LEFT;
x = W_PART(0);
y = H_PART(1.5);
w = W_PART(25);
h = H_PART(1.25);
sizeEx = H_PART(1.25);
colorText[] = {0.533,0.769,0.76,1};
};
class CompassSpeed: CompassHeading {
idc = IDC_MODECOMPASS_SPEED;
style = ST_RIGHT;
};
class CompassBearing: CompassHeading {
idc = IDC_MODECOMPASS_BEARING;
y = H_PART(16.25);
style = ST_LEFT;
colorText[] = {1,0.564,0.564,1};
};
class CompassRange: CompassHeading {
idc = IDC_MODECOMPASS_RANGE;
y = H_PART(16.25);
style = ST_RIGHT;
colorText[] = {1,0.564,0.564,1};
};
class CompassTARGET: CompassHeader {
idc = IDC_MODECOMPASS_TARGET;
y = H_PART(17.5);
};
};
};
//Mode: Map
class mapTrackButton: GVAR(RscActiveTextPicture) {
onbuttonclick = QUOTE(['autotrack'] call FUNC(modeMapButtons));
idc = IDC_MODEMAP_MAPTRACKBUTTON;
text = QUOTE(PATHTOF(images\icon_mapTrack.paa));
x = X_PART(11);
y = Y_PART(18.75);
w = W_PART(3);
h = H_PART(2.25);
};
class mapZoomIn: mapTrackButton {
onbuttonclick = QUOTE(['zoomin'] call FUNC(modeMapButtons));
idc = IDC_MODEMAP_MAPZOOMIN;
text = QUOTE(PATHTOF(images\icon_mapPlus.paa));
color[] = {1,1,1,0.4};
x = X_PART(4);
};
class mapZoomOut: mapTrackButton {
onbuttonclick = QUOTE(['zoomout'] call FUNC(modeMapButtons));
idc = IDC_MODEMAP_MAPZOOMOUT;
text = QUOTE(PATHTOF(images\icon_mapMinus.paa));
color[] = {1,1,1,0.4};
x = X_PART(18);
};
// Mode: Menu
class ModeMenu: RscControlsGroupNoScrollbars {
idc = IDC_MODEMENU;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
class Controls {
class ButtonTL: GVAR(RscActiveTextPicture) {
idc = -1;
text = QUOTE(PATHTOF(images\icon_menuMark.paa));
x = W_PART(3);
y = H_PART(1.5);
w = W_PART(8);
h = H_PART(6);
onbuttonclick = QUOTE([4] call FUNC(saveCurrentAndSetNewMode));
};
class ButtonTR: ButtonTL {
text = QUOTE(PATHTOF(images\icon_menuWaypoints.paa));
x = W_PART(14);
y = H_PART(1.5);
onbuttonclick = QUOTE([5] call FUNC(saveCurrentAndSetNewMode));
};
class ButtonBL: ButtonTL {
text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
x = W_PART(3);
y = H_PART(10.5);
onbuttonclick = QUOTE(_this call FUNC(appMenuButtonConnectRangefinder));
};
class ButtonBR: ButtonTL {
text = QUOTE(PATHTOF(images\icon_menuSettings.paa));
x = W_PART(14);
y = H_PART(10.5);
onbuttonclick = QUOTE([6] call FUNC(saveCurrentAndSetNewMode));
};
class TextTL: GVAR(RscText) {
idc = -1;
style = ST_CENTER;
text = "$STR_ACE_microdagr_menuMark";
x = W_PART(0);
y = H_PART(7.5);
w = W_PART(14);
h = H_PART(1.2);
sizeEx = H_PART(1.2);
};
class TextTR: TextTL {
text = "$STR_ACE_microdagr_menuWaypoints";
x = W_PART(11);
y = H_PART(7.5);
};
class TextBL: TextTL {
text = "$STR_ACE_microdagr_menuConnectTo";
x = W_PART(0);
y = H_PART(16.5);
};
class TextBR: TextTL {
text = "$STR_ACE_microdagr_menuSettings";
x = W_PART(11);
y = H_PART(16.5);
};
};
};
// Mode: Mark
class ModeMark: RscControlsGroupNoScrollbars {
idc = IDC_MODEMARK;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
class Controls {
class InfoText: GVAR(RscText) {
idc = IDC_MODEMARK_HEADER;
x = W_PART(3);
y = H_PART(1);
w = W_PART(19);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
colorText[] = {0.95,0.95,0.95,1};
};
class RscEdit_1400: RscEdit {
idc = IDC_MODEMARK_CORDSEDIT;
x = W_PART(3);
y = H_PART(2.75);
w = W_PART(17);
h = H_PART(1.5);
size = H_PART(1.5);
sizeEx = H_PART(1.5);
colorText[] = {0.95,0.95,0.95,1};
font = "EtelkaMonospacePro";
};
class DeleteButton: GVAR(RscActiveTextPicture) {
idc = -1;
text = QUOTE(PATHTOF(images\icon_deleteButton.paa));
x = W_PART(20);
y = H_PART(2.75);
w = W_PART(2);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
onbuttonclick = QUOTE(['del'] call FUNC(appMarkKeypadEntry));
};
class Keypad1: RscButton {
idc = -1;
text = "1";
x = W_PART(3);
y = H_PART(5);
w = W_PART(6);
h = H_PART(3);
sizeEx = H_PART(3);
colorText[] = {0.95,0.95,0.95,1};
colorBackground[] = {0.3,0.3,0.3,1};
colorBackgroundDisabled[] = {0.3,0.3,0.3,1};
colorBackgroundActive[] = {0.3,0.3,0.3,1};
colorFocused[] = {0.3,0.3,0.3,1};
onbuttonclick = QUOTE(['1'] call FUNC(appMarkKeypadEntry));
};
class Keypad2: Keypad1 {
text = "2";
x = W_PART(9.5);
onbuttonclick = QUOTE(['2'] call FUNC(appMarkKeypadEntry));
};
class Keypad3: Keypad1 {
text = "3";
x = W_PART(16);
onbuttonclick = QUOTE(['3'] call FUNC(appMarkKeypadEntry));
};
class Keypad4: Keypad1 {
text = "4";
x = W_PART(3);
y = H_PART(8.5);
onbuttonclick = QUOTE(['4'] call FUNC(appMarkKeypadEntry));
};
class Keypad5: Keypad4 {
text = "5";
x = W_PART(9.5);
onbuttonclick = QUOTE(['5'] call FUNC(appMarkKeypadEntry));
};
class Keypad6: Keypad4 {
text = "6";
x = W_PART(16);
onbuttonclick = QUOTE(['6'] call FUNC(appMarkKeypadEntry));
};
class Keypad7: Keypad1 {
text = "7";
x = W_PART(3);
y = H_PART(12);
onbuttonclick = QUOTE(['7'] call FUNC(appMarkKeypadEntry));
};
class Keypad8: Keypad7 {
text = "8";
x = W_PART(9.5);
onbuttonclick = QUOTE(['8'] call FUNC(appMarkKeypadEntry));
};
class Keypad9: Keypad7 {
text = "9";
x = W_PART(16);
onbuttonclick = QUOTE(['9'] call FUNC(appMarkKeypadEntry));
};
class Keypad0: Keypad1 {
text = "0";
x = W_PART(3);
y = H_PART(15.5);
w = W_PART(12.5)
onbuttonclick = QUOTE(['0'] call FUNC(appMarkKeypadEntry));
};
class KeypadEnter: Keypad1 {
text = "OK";
x = W_PART(16);
y = H_PART(15.5);
onbuttonclick = QUOTE(['ok'] call FUNC(appMarkKeypadEntry));
};
};
};
// Mode: Waypoints
class ModeWaypoints: RscControlsGroupNoScrollbars {
idc = IDC_MODEWAYPOINTS;
x = X_PART(0);
y = Y_PART(2);
w = W_PART(25);
h = H_PART(19);
class Controls {
class ListOfWaypoints: RscListBox {
idc = IDC_MODEWAYPOINTS_LISTOFWAYPOINTS;
sizeEx = H_PART(1.5);
sizeEx2 = H_PART(1.5);
rowHeight = H_PART(1.75);
colorText[] = {0.75,0.75,0.75,1};
colorSelect[] = {0.75,0.75,0.75,1};
colorSelect2[] = {0.75,0.75,0.75,1};
colorBackground[] = {0,0,0,1};
colorSelectBackground[] = {0.3,0.3,0.3,1};
colorSelectBackground2[] = {0.3,0.3,0.3,1};
itemSpacing = 0.001;
x = W_PART(0.2);
y = H_PART(0.5);
w = W_PART(24.6);
h = H_PART(16.5);
};
class ButtonSetWP: RscButton {
idc = -1;
text = "$STR_ACE_microdagr_waypointsSet";
x = W_PART(1);
y = H_PART(17);
w = W_PART(7);
h = H_PART(1.5);
sizeEx = H_PART(1.5);
font = "EtelkaMonospacePro";
colorText[] = {0.95,0.95,0.95,1};
colorBackground[] = {0.3,0.3,0.3,1};
colorBackgroundDisabled[] = {0.3,0.3,0.3,1};
colorBackgroundActive[] = {0.3,0.3,0.3,1};
colorFocused[] = {0.3,0.3,0.3,1};
onbuttonclick = QUOTE(_this call FUNC(appWaypointsButtonSetWP));
};
class ButtonAdd: ButtonSetWP {
text = "$STR_ACE_microdagr_waypointsAdd";
x = W_PART(9);
onbuttonclick = QUOTE([APP_MODE_MARK] call FUNC(saveCurrentAndSetNewMode));
};
class ButtonDelete: ButtonSetWP {
text = "$STR_ACE_microdagr_waypointsDelete";
x = W_PART(17);
onbuttonclick = QUOTE(_this call FUNC(appWaypointsButtonDeleteWP));
};
};
};
class SettingsMenu: RscListBox {
idc = IDC_MODESETTINGS;
x = X_PART(0.2);
y = Y_PART(2);
w = W_PART(24.6);
h = H_PART(19);
onLBDblClick = QUOTE(_this call FUNC(appSettingsLBClick));
sizeEx = H_PART(1.5);
sizeEx2 = H_PART(1.5);
rowHeight = H_PART(1.75);
itemSpacing = 0.001;
colorText[] = {0.75,0.75,0.75,1};
colorSelect[] = {0.75,0.75,0.75,1};
colorSelect2[] = {0.75,0.75,0.75,1};
colorBackground[] = {0.05,0.05,0.05,1};
colorSelectBackground[] = {0.05,0.05,0.05,1};
colorSelectBackground2[] = {0.05,0.05,0.05,1};
};
class ButtonBG0: RscPicture {
idc = IDC_BUTTONBG0;
text = QUOTE(PATHTOF(images\button_pushedDown.paa));
x = X_PART(0 * (25/3));
y = Y_PART(21);
w = W_PART((25/3));
h = H_PART(4);
};
class ButtonBG1: ButtonBG0 {
idc = IDC_BUTTONBG1;
x = X_PART(1 * (25/3));
};
class ButtonBG2: ButtonBG0 {
idc = IDC_BUTTONBG2;
x = X_PART(2 * (25/3));
};
class ButtonIcon0: GVAR(RscActiveTextPicture) {
idc = -1;
text = QUOTE(PATHTOF(images\icon_info.paa));
x = X_PART(0 * (25/3));
y = Y_PART(21);
w = W_PART((25/3));
h = H_PART(4);
onbuttonclick = QUOTE([APP_MODE_INFODISPLAY] call FUNC(saveCurrentAndSetNewMode));
};
class ButtonIcon1: ButtonIcon0 {
text = QUOTE(PATHTOF(images\icon_compass.paa));
x = X_PART(1 * (25/3));
onbuttonclick = QUOTE([APP_MODE_COMPASS] call FUNC(saveCurrentAndSetNewMode));
};
class ButtonIcon2: ButtonIcon0 {
text = QUOTE(PATHTOF(images\icon_map.paa));
x = X_PART(2 * (25/3));
onbuttonclick = QUOTE([APP_MODE_MAP] call FUNC(saveCurrentAndSetNewMode));
};
//At the end: The Big Shell overlay
class MicroDagrShell: RscPicture {
idc = IDC_MICRODAGRSHELL;
text = QUOTE(PATHTOF(images\microDAGR_shellPicture.paa));
x = X_PART(-14.77);
y = Y_PART(-5.875);
w = W_PART(53.62);
h = H_PART(39.9);
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,24 @@
ace_microdagr
===============
Adds a microDAGR infentry GPS device.
Press home to open. Then home again to toggle an interactive version. Press CTRL+Home to close.
Info/Compass/Minimap modes are selectable by the bottom buttons. Tap the top bar to open the menu and access Mark/Waypoints/Connect To/Settings modes.
Tap the minimap button again to toggle map modes (if available).
Enter waypoints from the menu or double tapping on the minimap.
Can interface with the `ace_vector`. Hold Azimuth+Range and release (see page 14 of vector's manual)
#### Items Added:
`ACE_microDAGR`
## For Mission Makers:
#### Modules:
* MicroDAGR Map Fill - Controls the amount of map data avaialbe for the minimap. Can limit to just roads/topographical or disable entirely.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [PabstMirror](https://github.com/PabstMirror)

View File

@ -0,0 +1,83 @@
#define COMPONENT microdagr
#include "\z\ace\addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_MICRODAGR
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_MICRODAGR
#define DEBUG_SETTINGS DEBUG_SETTINGS_MICRODAGR
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#define DUMMY_POS [-1,-1]
#define DUMMY_ZOOM 0.1
#define MAP_DETAIL_NONE 0
#define MAP_DETAIL_TOPOROADS 1
#define MAP_DETAIL_SAT 2
#define APP_MODE_NULL -1
#define APP_MODE_INFODISPLAY 0
#define APP_MODE_COMPASS 1
#define APP_MODE_MAP 2
#define APP_MODE_MENU 3
#define APP_MODE_MARK 4
#define APP_MODE_WAYPOINTS 5
#define APP_MODE_SETUP 6
#define DISPLAY_MODE_CLOSED 0
#define DISPLAY_MODE_DISPLAY 1
#define DISPLAY_MODE_DIALOG 2
#define DISPLAY_MODE_HIDDEN 3
#define IDC_RANGEFINDERCONNECTEDICON 77700
#define IDC_CLOCKTEXT 77701
#define IDC_MAPPLAIN 77702
#define IDC_MAPDETAILS 77703
#define IDC_MAPCOMPASS 77704
#define IDC_MODEDISPLAY 144000
#define IDC_MODEDISPLAY_UTMGRID 144001
#define IDC_MODEDISPLAY_EASTING 144002
#define IDC_MODEDISPLAY_NORTHING 144003
#define IDC_MODEDISPLAY_ELEVATIONNUM 144004
#define IDC_MODEDISPLAY_HEADINGNUM 144005
#define IDC_MODEDISPLAY_SPEEDNUM 144006
#define IDC_MODEDISPLAY_MODEPOSTIMECG 144010
#define IDC_MODEDISPLAY_TIMEDISPLAYGREEN1 144011
#define IDC_MODEDISPLAY_TIMEDISPLAYGREEN2 144012
#define IDC_MODEDISPLAY_MODEPOSTARGETCG 144020
#define IDC_MODEDISPLAY_TARGETICON 144021
#define IDC_MODEDISPLAY_TRACKNUM 144022
#define IDC_MODEDISPLAY_TARGETRANGENUM 144023
#define IDC_MODEDISPLAY_TARGETELEVATIONNUM 144024
#define IDC_MODEDISPLAY_TARGETNAME 144025
#define IDC_MODECOMPASS 144100
#define IDC_MODECOMPASS_HEADING 144110
#define IDC_MODECOMPASS_SPEED 144111
#define IDC_MODECOMPASS_BEARING 144112
#define IDC_MODECOMPASS_RANGE 144113
#define IDC_MODECOMPASS_TARGET 144114
#define IDC_MODEMAP_MAPTRACKBUTTON 144211
#define IDC_MODEMAP_MAPZOOMIN 144212
#define IDC_MODEMAP_MAPZOOMOUT 144213
#define IDC_MODEMENU 144300
#define IDC_MODEMARK 144400
#define IDC_MODEMARK_HEADER 144411
#define IDC_MODEMARK_CORDSEDIT 144412
#define IDC_MODEWAYPOINTS 144500
#define IDC_MODEWAYPOINTS_LISTOFWAYPOINTS 144501
#define IDC_MODESETTINGS 144600
#define IDC_BUTTONBG0 77710
#define IDC_BUTTONBG1 77711
#define IDC_BUTTONBG2 77712
#define IDC_MICRODAGRSHELL 77713

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-03-10 -->
<Project name="ACE">
<Package name="microdagr">
<Key ID="STR_ACE_microdagr_itemName">
<English>MicroDAGR GPS</English>
</Key>
<Key ID="STR_ACE_microdagr_itemDescription">
<English>MicroDAGR advanced GPS receiver</English>
</Key>
<Key ID="STR_ACE_microdagr_settingUseMils">
<English>Angular Unit:</English>
</Key>
<Key ID="STR_ACE_microdagr_settingMils">
<English>Mils</English>
</Key>
<Key ID="STR_ACE_microdagr_settingShowWP">
<English>Show Waypoints On Map:</English>
</Key>
<Key ID="STR_ACE_microdagr_settingDegrees">
<English>Degrees</English>
</Key>
<Key ID="STR_ACE_microdagr_settingOn">
<English>On</English>
<Czech>Zapnuto</Czech>
<French>Oui</French>
<German>Ein</German>
<Italian></Italian>
<Polish>Wł.</Polish>
<Portuguese>Ativar</Portuguese>
<Russian>Вкл.</Russian>
<Spanish></Spanish>
</Key>
<Key ID="STR_ACE_microdagr_settingOff">
<English>Off</English>
<Czech>Vypnuto</Czech>
<French>Non</French>
<German>Aus</German>
<Italian>No</Italian>
<Polish>Wył.</Polish>
<Portuguese>Desativar</Portuguese>
<Russian>Выкл.</Russian>
<Spanish>No</Spanish>
</Key>
<Key ID="STR_ACE_microdagr_openUnit">
<English>Open MicroDAGR</English>
</Key>
<Key ID="STR_ACE_microdagr_closeUnit">
<English>Close MicroDAGR</English>
</Key>
<Key ID="STR_ACE_microdagr_wpEnterCords">
<English>Enter Grid Cords:</English>
</Key>
<Key ID="STR_ACE_microdagr_wpEnterName">
<English>Name of [%1]</English>
</Key>
<Key ID="STR_ACE_microdagr_controlMGRS">
<English>MGRS-New</English>
</Key>
<Key ID="STR_ACE_microdagr_controlWGD">
<English>WGD</English>
</Key>
<Key ID="STR_ACE_microdagr_controlRange">
<English>Range:</English>
<German>Reichweite:</German>
</Key>
<Key ID="STR_ACE_microdagr_compasDirection">
<English>Compass Direction</English>
</Key>
<Key ID="STR_ACE_microdagr_menuMark">
<English>Mark</English>
</Key>
<Key ID="STR_ACE_microdagr_menuWaypoints">
<English>Waypoints</English>
<German>Wegpunkte</German>
</Key>
<Key ID="STR_ACE_microdagr_menuConnectTo">
<English>Connect To</English>
</Key>
<Key ID="STR_ACE_microdagr_menuSettings">
<English>Settings</English>
<German>Einstellungen</German>
<Spanish>Configuración</Spanish>
</Key>
<Key ID="STR_ACE_microdagr_waypointsSet">
<English>SetWP</English>
</Key>
<Key ID="STR_ACE_microdagr_waypointsAdd">
<English>Add</English>
</Key>
<Key ID="STR_ACE_microdagr_waypointsDelete">
<English>Delete</English>
<Czech>Smazat</Czech>
<French>Supprimer</French>
<German>Löschen</German>
<Italian>Elimina</Italian>
<Polish>Usuń</Polish>
<Portuguese>Excluir</Portuguese>
<Russian>Удалить</Russian>
<Spanish>Suprimir</Spanish>
</Key>
</Package>
</Project>

View File

@ -6,6 +6,7 @@ PREP(clearDisplay);
PREP(convertToTexturesDegree);
PREP(convertToTexturesDistance);
PREP(convertToTexturesFOS);
PREP(dataTransfer);
PREP(showCenter);
PREP(showP1);
PREP(onKeyDown);

View File

@ -0,0 +1,25 @@
/*
* Author: PabstMirror
* Data transfer over a connected cable. Based on page 14 of pdf.
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* [] call ace_vector_fnc_dataTransfer
*
* Public: No
*/
#include "script_component.hpp"
private ["_distance", "_direction", "_azimuth", "_inclination"];
_distance = call FUNC(getDistance);
_direction = call FUNC(getDirection);
_azimuth = _direction select 0;
_inclination = _direction select 1;
//Send Data to connected GPS
["RangerfinderData", [_distance, _azimuth, _inclination]] call EFUNC(common,localEvent);

View File

@ -74,6 +74,7 @@ switch (_this select 0) do {
if (_isReady) then {
call FUNC(showDistance);
[false] call FUNC(showCenter);
[] call FUNC(dataTransfer);
};
[_this select 1] call CBA_fnc_removePerFrameHandler;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB