diff --git a/addons/dagr/DAGR_MENU.fsm b/addons/dagr/DAGR_MENU.fsm index e3160d0d27..c6b4f32fb8 100644 --- a/addons/dagr/DAGR_MENU.fsm +++ b/addons/dagr/DAGR_MENU.fsm @@ -1504,7 +1504,7 @@ class FSM init = /*%FSM*/"DAGR_DISPLAY_SELECTION = ""DATA"";" \n "((uiNameSpace getVariable _dsp) displayCtrl _mainText) ctrlSetText ""Acquiring Data."";" \n "_wait = time + 0.5;" \n - "DAGR_EMPTYVECTOR = true;"/*%FSM*/; + "DAGR_EMPTY_VECTOR = true;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { @@ -1934,7 +1934,7 @@ class FSM { name = "Remove_Menu"; init = /*%FSM*/"DAGR_SEL = false;" \n - "DAGR_EMPTYVECTOR = true;" \n + "DAGR_EMPTY_VECTOR = true;" \n "((uiNameSpace getVariable _dsp) displayCtrl _Option0) ctrlSetText """";" \n "((uiNameSpace getVariable _dsp) displayCtrl _Option1) ctrlSetText """";" \n "((uiNameSpace getVariable _dsp) displayCtrl _Option2) ctrlSetText """";" \n @@ -2218,7 +2218,7 @@ class FSM init = /*%FSM*/"DAGR_DISPLAY_SELECTION = ""VECTOR"";" \n "((uiNameSpace getVariable _dsp) displayCtrl _mainText) ctrlSetText ""Vector Connected"";" \n "_wait = time + 2.5;" \n - "DAGR_EMPTYVECTOR = false;"/*%FSM*/; + "DAGR_EMPTY_VECTOR = false;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { @@ -5825,7 +5825,7 @@ class FSM "DAGR_RIGHT = false;" \n "DAGR_LEFT = false;" \n "DAGR_SEL = false;" \n - "_newSleep = DAGRSLEEP;" \n + "_newSleep = DAGR_UPDATE_INTERVAL;" \n "_text = str (_newSleep*1000) + ""ms"";" \n "((uiNameSpace getVariable _dsp) displayCtrl _mainText) ctrlSetText _text;" \n "((uiNameSpace getVariable _dsp) displayCtrl _F1) ctrlSetText ""Save"";" \n @@ -5907,7 +5907,7 @@ class FSM init = /*%FSM*/"((uiNameSpace getVariable _dsp) displayCtrl _F1) ctrlSetText """";" \n "((uiNameSpace getVariable _dsp) displayCtrl _F3) ctrlSetText """";" \n "((uiNameSpace getVariable _dsp) displayCtrl _mainText) ctrlSetText ""Updating."";" \n - "DAGRSLEEP = _newSleep;" \n + "DAGR_UPDATE_INTERVAL = _newSleep;" \n "_wait = time + 0.2;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links @@ -7457,7 +7457,7 @@ class FSM init = /*%FSM*/"DAGR_DISPLAY_SELECTION = ""VECTOR"";" \n "((uiNameSpace getVariable _dsp) displayCtrl _mainText) ctrlSetText ""SOFLAM Connected"";" \n "_wait = time + 2.5;" \n - "DAGR_EMPTYVECTOR = false;"/*%FSM*/; + "DAGR_EMPTY_VECTOR = false;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { @@ -7848,7 +7848,7 @@ class FSM { name = "__96"; init = /*%FSM*/"DAGR_SEL = false;" \n - "DAGR_EMPTYVECTOR = true;"/*%FSM*/; + "DAGR_EMPTY_VECTOR = true;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { diff --git a/addons/dagr/XEH_postInit.sqf b/addons/dagr/XEH_postInit.sqf index ce40e2df81..52c8f0e5f4 100644 --- a/addons/dagr/XEH_postInit.sqf +++ b/addons/dagr/XEH_postInit.sqf @@ -3,7 +3,6 @@ DAGR_RUN = false; DAGR_STP = false; DAGR_MENU_RUN = false; -Dagr_Map_Info = "default"; DAGR_DIRECTION = true; // true -> degrees; false -> milliradian DAGR_GRID_VECTOR = "00000000"; // Default @@ -18,11 +17,11 @@ DAGR_WP1 = 0; DAGR_WP2 = 0; DAGR_WP3 = 0; DAGR_WP4 = 0; -DAGRSLEEP = 0.5; // Update timer on DAGR, set for 0.5 seconds -DAGR_EMPTYVECTOR = true; // Keeps DAGR Vector display from filling up before use +DAGR_UPDATE_INTERVAL = 0.5; // Update timer on DAGR, set for 0.5 seconds +DAGR_EMPTY_VECTOR = true; // Keeps DAGR Vector display from filling up before use DAGR_DISPLAY_SELECTION = "DATA"; // Sets DAGR for data display -NODAGRDISPLAY = true; +DAGR_NO_DISPLAY = true; ["RangerfinderData", {_this call FUNC(DAGR_VECTOR)}] call EFUNC(common,addEventHandler); diff --git a/addons/dagr/XEH_preInit.sqf b/addons/dagr/XEH_preInit.sqf index 3cc0b0ca6e..c1b252bb4e 100644 --- a/addons/dagr/XEH_preInit.sqf +++ b/addons/dagr/XEH_preInit.sqf @@ -8,6 +8,5 @@ PREP(DAGR_OUTPUT_VECTOR); PREP(DAGR_OUTPUT_WP); PREP(DAGR_START); PREP(DAGR_VECTOR); -PREP(mapCoord); ADDON = true; diff --git a/addons/dagr/functions/fnc_DAGR_OUTPUT_DATA.sqf b/addons/dagr/functions/fnc_DAGR_OUTPUT_DATA.sqf index f43b5ed4b5..59259bfae2 100644 --- a/addons/dagr/functions/fnc_DAGR_OUTPUT_DATA.sqf +++ b/addons/dagr/functions/fnc_DAGR_OUTPUT_DATA.sqf @@ -12,110 +12,95 @@ * * Public: No */ - #include "script_component.hpp" - -disableSerialization; - -private ["_pos", "_x", "_y", "_xgrid", "_pos", "_ygrid", "_lastY", "_lastX", "_xcoord", "_ycoord", "_display", "_speed", "_vic", "_dagrHeading", "_dagrGrid", "_background", "_dagrElevation", "_dagrSpeed", "_dagrTime", "_elevation", "_elevationControl", "_grid", "_gridControl", "_headingControl", "_speedControl", "_timeControl"]; +#include "script_component.hpp" 135471 cutRsc ["DAGR_DISPLAY", "plain down"]; -_display = (uiNameSpace getVariable "DAGR_DISPLAY"); -_gridControl = _display displayCtrl 266851; -_speedControl = _display displayCtrl 266852; -_elevationControl = _display displayCtrl 266853; -_headingControl = _display displayCtrl 266854; -_timeControl = _display displayCtrl 266855; -_background = _display displayCtrl 266856; +#define __display (uiNameSpace getVariable "DAGR_DISPLAY") -_background ctrlSetText QUOTE(PATHTOF(UI\dagr_gps.paa)); +#define __gridControl (__display displayCtrl 266851) +#define __speedControl (__display displayCtrl 266852) +#define __elevationControl (__display displayCtrl 266853) +#define __headingControl (__display displayCtrl 266854) +#define __timeControl (__display displayCtrl 266855) +#define __background (__display displayCtrl 266856) -while {DAGR_RUN} do { - if (Dagr_Map_Info == "default") then { - _dagrGrid = mapGridPosition ACE_player; - } else { - //GRID - _pos = getPos ACE_player; - _x = _pos select 0; - _y = _pos select 1; +__background ctrlSetText QUOTE(PATHTOF(UI\dagr_gps.paa)); - _grid = ACE_player call FUNC(mapCoord); - _xgrid = floor (call compile (_grid select 0)); - _ygrid = floor (call compile (_grid select 1)); +[{ + private ["_pos", "_xgrid", "_ygrid", "_lastY", "_lastX", "_xcoord", "_ycoord", "_display", "_speed", "_vic", "_dagrHeading", "_dagrGrid", "_dagrElevation", "_dagrSpeed", "_dagrTime", "_elevation"]; + + // Abort Condition + if !(DAGR_RUN && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith { + 135471 cutText ["", "PLAIN"]; + [_this select 1] call CBA_fnc_removePerFrameHandler; + }; + + // GRID + _pos = getPosASL ACE_player; - //Incase grids go neg due to 99-00 boundry - if (_xgrid < 0) then {_xgrid = _xgrid + 9999;}; - if (_ygrid < 0) then {_ygrid = _ygrid + 9999;}; + _xGrid = toArray Str(round(_pos select 0)); + while {count _xGrid < 5} do { + _xGrid = [48] + _xGrid; + }; + _xGrid resize 4; + _xGrid = toString _xGrid; + _xGrid = parseNumber _xGrid; + + _yGrid = toArray Str(round(_pos select 1)); + while {count _yGrid < 5} do { + _yGrid = [48] + _yGrid; + }; + _yGrid resize 4; + _yGrid = toString _yGrid; + _yGrid = parseNumber _yGrid; - _xcoord = - if (_xgrid >= 1000) then { - str _xgrid; - } else { - if (_xgrid >= 100) then { - "0" + str _xgrid; - } else { - if (_xgrid >= 10) then { - "00" + str _xgrid; - } else{ - "000" + str _xgrid; - }; - }; - }; + // Incase grids go neg due to 99-00 boundry + if (_xgrid < 0) then {_xgrid = _xgrid + 9999;}; + if (_ygrid < 0) then {_ygrid = _ygrid + 9999;}; - _ycoord = - if (_ygrid >= 1000) then { - str _ygrid; - } else { - if (_ygrid >= 100) then { - "0" + str _ygrid; - } else { - if (_ygrid >= 10) then { - "00" + str _ygrid; - } else{ - "000" + str _ygrid; - }; - }; - }; - _dagrGrid = _xcoord + " " + _ycoord; + _xCoord = switch true do { + case (_xGrid >= 1000): { "" + Str(_xGrid) }; + case (_xGrid >= 100): { "0" + Str(_xGrid) }; + case (_xGrid >= 10): { "00" + Str(_xGrid) }; + default { "000" + Str(_xGrid) }; }; - //SPEED - if (vehicle ACE_player != ACE_player) then { - _vic = vehicle ACE_player; - _speed = speed _vic; - } else{ - _speed = speed ACE_player; + _yCoord = switch true do { + case (_yGrid >= 1000): { "" + Str(_yGrid) }; + case (_yGrid >= 100): { "0" + Str(_yGrid) }; + case (_yGrid >= 10): { "00" + Str(_yGrid) }; + default { "000" + Str(_yGrid) }; }; - _speed = floor (_speed *10) / 10; + + _dagrGrid = _xcoord + " " + _ycoord; + + // SPEED + _speed = speed (vehicle ACE_player); + _speed = floor (_speed * 10) / 10; _speed = abs(_speed); _dagrspeed = str _speed + "kph"; - //Elevation + // Elevation _elevation = getPosASL ACE_player; _elevation = floor ((_elevation select 2) + EGVAR(weather,altitude)); _dagrElevation = str _elevation + "m"; - //Heading - if (vehicle ACE_player != ACE_player) then { - _vic = vehicle ACE_player; - _dagrHeading = if (!DAGR_DIRECTION) then {floor ((direction _vic)/360*6400)} else {floor (direction _vic);}; - } else{ - _dagrHeading = if (!DAGR_DIRECTION) then {floor ((direction ACE_player)/360*6400)} else {floor (direction ACE_player);}; + // Heading + _dagrHeading = if (!DAGR_DIRECTION) then { + floor (DEG_TO_MIL(direction (vehicle ACE_player))) + } else { + floor (direction (vehicle ACE_player)) }; - //Time + // Time _dagrTime = [daytime, "HH:MM"] call bis_fnc_timeToString; - //output - _gridControl ctrlSetText format ["%1", _dagrGrid]; - _speedControl ctrlSetText format ["%1", _dagrSpeed]; - _elevationControl ctrlSetText format ["%1", _dagrElevation]; - _headingControl ctrlSetText (if (!DAGR_DIRECTION) then { format ["%1", _dagrHeading] } else { format ["%1 °", _dagrHeading] }); - _timeControl ctrlSetText format ["%1", _dagrTime]; - - sleep DAGRSLEEP; - if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith { - DAGR_RUN = false; - 135471 cutText ["", "PLAIN"]; - }; -}; + // Output + __gridControl ctrlSetText format ["%1", _dagrGrid]; + __speedControl ctrlSetText format ["%1", _dagrSpeed]; + __elevationControl ctrlSetText format ["%1", _dagrElevation]; + __headingControl ctrlSetText (if (!DAGR_DIRECTION) then { format ["%1", _dagrHeading] } else { format ["%1 °", _dagrHeading] }); + __timeControl ctrlSetText format ["%1", _dagrTime]; + +}, DAGR_UPDATE_INTERVAL, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/dagr/functions/fnc_DAGR_OUTPUT_VECTOR.sqf b/addons/dagr/functions/fnc_DAGR_OUTPUT_VECTOR.sqf index ef364cec7c..9ac9bc000f 100644 --- a/addons/dagr/functions/fnc_DAGR_OUTPUT_VECTOR.sqf +++ b/addons/dagr/functions/fnc_DAGR_OUTPUT_VECTOR.sqf @@ -14,96 +14,82 @@ */ #include "script_component.hpp" -disableSerialization; - -private ["_x", "_y", "_xgrid", "_ygrid", "_dsp", "_dagrGrid", "_background", "_bearing", "_dagrDist", "_dagrElevation", "_dagrTime", "_display", "_elevation", "_elevationControl", "_grid", "_gridControl", "_headingControl", "_speedControl", "_timeControl", "_xcoord", "_ycoord"]; +private ["_xGrid", "_yGrid", "_dagrGrid", "_bearing", "_dagrDist", "_dagrElevation", "_dagrTime", "_display", "_elevation", "_xCoord", "_yCoord"]; 135471 cutRsc ["DAGR_DISPLAY", "plain down"]; -_display = (uiNameSpace getVariable "DAGR_DISPLAY"); -_gridControl = _display displayCtrl 266851; -_speedControl = _display displayCtrl 266858; -_elevationControl = _display displayCtrl 266853; -_headingControl = _display displayCtrl 266854; -_timeControl = _display displayCtrl 266855; -_background = _display displayCtrl 266856; +#define __display (uiNameSpace getVariable "DAGR_DISPLAY") -_background ctrlSetText QUOTE(PATHTOF(UI\dagr_vector.paa)); +#define __gridControl (__display displayCtrl 266851) +#define __speedControl (__display displayCtrl 266858) +#define __elevationControl (__display displayCtrl 266853) +#define __headingControl (__display displayCtrl 266854) +#define __timeControl (__display displayCtrl 266855) +#define __background (__display displayCtrl 266856) -if (NODAGRDISPLAY) exitwith {}; +__background ctrlSetText QUOTE(PATHTOF(UI\dagr_vector.paa)); -if (Dagr_Map_Info == "default") then { - _dagrGrid = mapGridPosition DAGRLAZPOS; -} else { - //find laser position - _x = DAGRLAZPOS select 0; - _y = DAGRLAZPOS select 1; +if (DAGR_NO_DISPLAY) exitwith {}; - _grid = [_x, _y] call ace_fnc_mapCoord; - _xgrid = floor (call compile (_grid select 0)); - _ygrid = floor (call compile (_grid select 1)); +// Find laser position +_xGrid = toArray Str(round(GVAR(LAZPOS) select 0)); +while {count _xGrid < 5} do { + _xGrid = [48] + _xGrid; +}; +_xGrid resize 4; +_xGrid = toString _xGrid; +_xGrid = parseNumber _xGrid; - //Incase grids go neg due to 99-00 boundry - if (_xgrid < 0) then {_xgrid = _xgrid + 9999;}; - if (_ygrid < 0) then {_ygrid = _ygrid + 9999;}; +_yGrid = toArray Str(round(GVAR(LAZPOS) select 1)); +while {count _yGrid < 5} do { + _yGrid = [48] + _yGrid; +}; +_yGrid resize 4; +_yGrid = toString _yGrid; +_yGrid = parseNumber _yGrid; - _xcoord = - if (_xgrid >= 1000) then { - str _xgrid; - } else { - if (_xgrid >= 100) then { - "0" + str _xgrid; - } else { - if (_xgrid >= 10) then { - "00" + str _xgrid; - }else{ - "000" + str _xgrid; - }; - }; - }; +// Incase grids go neg due to 99-00 boundry +if (_xGrid < 0) then {_xGrid = _xGrid + 9999;}; +if (_yGrid < 0) then {_yGrid = _yGrid + 9999;}; - _ycoord = - if (_ygrid >= 1000) then { - str _ygrid; - } else { - if (_ygrid >= 100) then { - "0" + str _ygrid; - } else { - if (_ygrid >= 10) then { - "00" + str _ygrid; - }else{ - "000" + str _ygrid; - }; - }; - }; - - _dagrGrid = _xcoord + " " + _ycoord; +_xCoord = switch true do { + case (_xGrid >= 1000): { "" + Str(_xGrid) }; + case (_xGrid >= 100): { "0" + Str(_xGrid) }; + case (_xGrid >= 10): { "00" + Str(_xGrid) }; + default { "000" + Str(_xGrid) }; }; -//find target elevation -_elevation = floor ((DAGRLAZPOS select 2) + EGVAR(weather,altitude)); +_yCoord = switch true do { + case (_yGrid >= 1000): { "" + Str(_yGrid) }; + case (_yGrid >= 100): { "0" + Str(_yGrid) }; + case (_yGrid >= 10): { "00" + Str(_yGrid) }; + default { "000" + Str(_yGrid) }; +}; + +_dagrGrid = _xCoord + " " + _yCoord; + +// Find target elevation +_elevation = floor ((GVAR(LAZPOS) select 2) + EGVAR(weather,altitude)); _dagrElevation = str _elevation + "m"; -//Time +// Time _dagrTime = [daytime, "HH:MM"] call bis_fnc_timeToString; -//Bearing -_bearing = DAGRLazHeading; +// Bearing +_bearing = GVAR(LAZHEADING); if (_bearing >= 360) then {_bearing = _bearing - 360;}; -if (!DAGR_DIRECTION) then {_bearing = floor (_bearing/360*6400)}; - - +if (!DAGR_DIRECTION) then {_bearing = DEG_TO_MIL(_bearing)}; _bearing = floor (_bearing); -//Distance -_dagrDist = str DAGRLAZDIST + "m"; +// Distance +_dagrDist = str GVAR(LAZDIST) + "m"; -//put grid into variable so DAGR menu can access it TODO: check if it is safe to do it in this fashion +// put grid into variable so DAGR menu can access it TODO: check if it is safe to do it in this fashion DAGR_GRID_VECTOR = _dagrGrid; -//OUTPUT -_gridControl ctrlSetText format ["%1", _dagrGrid]; -_speedControl ctrlSetText format ["%1", _dagrDist]; -_elevationControl ctrlSetText format ["%1", _dagrElevation]; -_headingControl ctrlSetText (if (!DAGR_DIRECTION) then { format ["%1", _bearing] } else { format ["%1°", _bearing] }); -_timeControl ctrlSetText format ["%1", _dagrTime]; +// OUTPUT +__gridControl ctrlSetText format ["%1", _dagrGrid]; +__speedControl ctrlSetText format ["%1", _dagrDist]; +__elevationControl ctrlSetText format ["%1", _dagrElevation]; +__headingControl ctrlSetText (if (!DAGR_DIRECTION) then { format ["%1", _bearing] } else { format ["%1°", _bearing] }); +__timeControl ctrlSetText format ["%1", _dagrTime]; diff --git a/addons/dagr/functions/fnc_DAGR_OUTPUT_WP.sqf b/addons/dagr/functions/fnc_DAGR_OUTPUT_WP.sqf index 3997d33a7e..edb1f03f6b 100644 --- a/addons/dagr/functions/fnc_DAGR_OUTPUT_WP.sqf +++ b/addons/dagr/functions/fnc_DAGR_OUTPUT_WP.sqf @@ -14,159 +14,109 @@ */ #include "script_component.hpp" -disableSerialization; - -private ["_pos", "_x", "_y", "_xgrid", "_ygrid", "_lastY", "_lastX", "_xcoord", "_ycoord", "_sec", "_min", "_hour", "_time", "_display", "_speed", "_vic", "_dagrHeading", "_WPHeading", "_dagrGrid", "_bearing", "_MYpos", "_WPpos", "_background", "_dagrDistance", "_distance", "_elevationControl", "_grid", "_gridControl", "_headingControl", "_speedControl", "_timeControl"]; - 135471 cutRsc ["DAGR_DISPLAY", "plain down"]; -_display = (uiNameSpace getVariable "DAGR_DISPLAY"); -_gridControl = _display displayCtrl 266851; -_speedControl = _display displayCtrl 266858; -_elevationControl = _display displayCtrl 266857; -_headingControl = _display displayCtrl 266854; -_timeControl = _display displayCtrl 266859; -_background = _display displayCtrl 266856; +#define __display (uiNameSpace getVariable "DAGR_DISPLAY") -_background ctrlSetText QUOTE(PATHTOF(UI\dagr_wp.paa)); +#define __gridControl (__display displayCtrl 266851) +#define __speedControl (__display displayCtrl 266858) +#define __elevationControl (__display displayCtrl 266857) +#define __headingControl (__display displayCtrl 266854) +#define __timeControl (__display displayCtrl 266859) +#define __background (__display displayCtrl 266856) -while {DAGR_RUN} do { - //if (Dagr_Map_Info == "default") exitwith {_gridControl ctrlSetText "ERROR"}; - //GRID - _pos = getPos ACE_player; - _x = _pos select 0; - _y = _pos select 1; +__background ctrlSetText QUOTE(PATHTOF(UI\dagr_wp.paa)); - _grid = ACE_player call FUNC(mapCoord); - _xgrid = floor (call compile (_grid select 0)); - _ygrid = floor (call compile (_grid select 1)); - - //Incase grids go neg due to 99-00 boundry - if (_xgrid < 0) then {_xgrid = _xgrid + 9999;}; - if (_ygrid < 0) then {_ygrid = _ygrid + 9999;}; - - _xcoord = - if (_xgrid >= 1000) then { - str _xgrid; - } else { - if (_xgrid >= 100) then { - "0" + str _xgrid; - } else { - if (_xgrid >= 10) then { - "00" + str _xgrid; - }else{ - "000" + str _xgrid; - }; - }; - }; - - _ycoord = - if (_ygrid >= 1000) then { - str _ygrid; - } else { - if (_ygrid >= 100) then { - "0" + str _ygrid; - } else { - if (_ygrid >= 10) then { - "00" + str _ygrid; - }else{ - "000" + str _ygrid; - }; - }; - }; - - _dagrGrid = _xcoord + " " + _ycoord; - - //WP Grid - _xgrid2 = floor (DAGR_WP_INFO / 10000); - _ygrid2 = DAGR_WP_INFO - _xgrid2 * 10000; - - _xcoord2 = - if (_xgrid2 >= 1000) then { - str _xgrid2; - } else { - if (_xgrid2 >= 100) then { - "0" + str _xgrid2; - } else { - if (_xgrid2 >= 10) then { - "00" + str _xgrid2; - }else{ - "000" + str _xgrid2; - }; - }; - }; - - _ycoord2 = - if (_ygrid2 >= 1000) then { - str _ygrid2; - } else { - if (_ygrid2 >= 100) then { - "0" + str _ygrid2; - } else { - if (_ygrid2 >= 10) then { - "00" + str _ygrid2; - }else{ - "000" + str _ygrid2; - }; - }; - }; - - _dagrGrid2 = _xcoord2 + " " + _ycoord2; - - //Distance - _WPpos = [[_xcoord2, _ycoord2], true] call CBA_fnc_mapGridToPos; - _MYpos = [[_xcoord, _ycoord], true] call CBA_fnc_mapGridToPos; - _distance = _MYpos distance _WPpos; - _distance = floor (_distance * 10); - _distance = _distance / 10; - _dagrDistance = str _distance + "m"; - - - //ACE_player Heading - if (vehicle ACE_player != ACE_player) then { - _vic = vehicle ACE_player; - if (DAGR_DIRECTION) then { - _dagrHeading = floor (direction _vic); - } else { - _dagrHeading = floor ((direction _vic)/360*6400); - }; - }else{ - if (DAGR_DIRECTION) then { - _dagrHeading = floor (direction ACE_player); - } else { - _dagrHeading = floor ((direction ACE_player)/360*6400); - }; - }; - - //WP Heading - _x = ((_WPpos select 0) - (_MYpos select 0)); - _y = ((_WPpos select 1) - (_MYpos select 1)); - - if (_distance == 0) then { - _bearing = 0; - } else { - _bearing = _x / _distance; - if (_bearing >= 1) then {_bearing = 1;}; - if (_bearing <= -1) then {_bearing = -1;}; - _bearing = acos _bearing; - //_bearing = floor (_bearing); - if (_x >= 0 && {_y >= 0}) then {_bearing = 0 - _bearing + 90;}; - if (_x < 0 && {_y >= 0}) then {_bearing = 0 - _bearing + 450;}; - if (_x < 0 && {_y < 0}) then {_bearing = _bearing + 90;}; - if (_x >= 0 && {_y < 0}) then {_bearing = _bearing + 90;}; - if (!DAGR_DIRECTION) then {_bearing = floor (_bearing/360*6400)} else {_bearing = floor (_bearing)}; - }; - - //output - _gridControl ctrlSetText format ["%1", _dagrGrid]; - _speedControl ctrlSetText format ["%1", _bearing]; - _elevationControl ctrlSetText format ["%1", _dagrGrid2]; - _headingControl ctrlSetText (if (!DAGR_DIRECTION) then { format ["%1", _dagrHeading] } else { format ["%1°", _dagrHeading] }); - _timeControl ctrlSetText format ["%1", _dagrDistance]; - - sleep DAGRSLEEP; - if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith { - DAGR_RUN = false; +[{ + private ["_pos", "_xGrid", "_yGrid", "_lastY", "_lastX", "_xCoord", "_yCoord", "_speed", "_dagrHeading", "_WPHeading", "_dagrGrid", "_bearing", "_MYpos", "_WPpos", "_dagrDistance", "_distance"]; + + // Abort Condition + if !(DAGR_RUN && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith { 135471 cutText ["", "PLAIN"]; + [_this select 1] call CBA_fnc_removePerFrameHandler; }; -}; + + // GRID + _pos = getPosASL ACE_player; + + _xGrid = toArray Str(round(_pos select 0)); + while {count _xGrid < 5} do { + _xGrid = [48] + _xGrid; + }; + _xGrid resize 4; + _xGrid = toString _xGrid; + _xGrid = parseNumber _xGrid; + + _yGrid = toArray Str(round(_pos select 1)); + while {count _yGrid < 5} do { + _yGrid = [48] + _yGrid; + }; + _yGrid resize 4; + _yGrid = toString _yGrid; + _yGrid = parseNumber _yGrid; + + // Incase grids go neg due to 99-00 boundry + if (_xGrid < 0) then {_xGrid = _xGrid + 9999;}; + if (_yGrid < 0) then {_yGrid = _yGrid + 9999;}; + + _xCoord = switch true do { + case (_xGrid >= 1000): { "" + Str(_xGrid) }; + case (_xGrid >= 100): { "0" + Str(_xGrid) }; + case (_xGrid >= 10): { "00" + Str(_xGrid) }; + default { "000" + Str(_xGrid) }; + }; + + _yCoord = switch true do { + case (_yGrid >= 1000): { "" + Str(_yGrid) }; + case (_yGrid >= 100): { "0" + Str(_yGrid) }; + case (_yGrid >= 10): { "00" + Str(_yGrid) }; + default { "000" + Str(_yGrid) }; + }; + + _dagrGrid = _xCoord + " " + _yCoord; + + // WP Grid + _xGrid2 = floor (DAGR_WP_INFO / 10000); + _yGrid2 = DAGR_WP_INFO - _xGrid2 * 10000; + + _xCoord2 = switch true do { + case (_xGrid2 >= 1000): { "" + Str(_xGrid2) }; + case (_xGrid2 >= 100): { "0" + Str(_xGrid2) }; + case (_xGrid2 >= 10): { "00" + Str(_xGrid2) }; + default { "000" + Str(_xGrid2) }; + }; + + _yCoord2 = switch true do { + case (_yGrid2 >= 1000): { "" + Str(_yGrid2) }; + case (_yGrid2 >= 100): { "0" + Str(_yGrid2) }; + case (_yGrid2 >= 10): { "00" + Str(_yGrid2) }; + default { "000" + Str(_yGrid2) }; + }; + + _dagrGrid2 = _xCoord2 + " " + _yCoord2; + + // Distance + _WPpos = [[_xCoord2, _yCoord2], true] call CBA_fnc_mapGridToPos; + _MYpos = [[_xCoord, _yCoord], true] call CBA_fnc_mapGridToPos; + _distance = _MYpos distance _WPpos; + _distance = floor (_distance * 10) / 10; + _dagrDistance = str _distance + "m"; + + // Heading + _dagrHeading = floor (if (DAGR_DIRECTION) then { + direction (vehicle ACE_player) + } else { + DEG_TO_MIL(direction (vehicle ACE_player)) + }); + + // WP Heading + _bearing = floor ((_WPpos vectorDiff _MYpos) call CBA_fnc_vectDir); + + // Output + __gridControl ctrlSetText format ["%1", _dagrGrid]; + __speedControl ctrlSetText format ["%1", _bearing]; + __elevationControl ctrlSetText format ["%1", _dagrGrid2]; + __headingControl ctrlSetText (if (!DAGR_DIRECTION) then { format ["%1", _dagrHeading] } else { format ["%1°", _dagrHeading] }); + __timeControl ctrlSetText format ["%1", _dagrDistance]; + +}, DAGR_UPDATE_INTERVAL, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/dagr/functions/fnc_DAGR_VECTOR.sqf b/addons/dagr/functions/fnc_DAGR_VECTOR.sqf index d4373546ba..9bc85b9609 100644 --- a/addons/dagr/functions/fnc_DAGR_VECTOR.sqf +++ b/addons/dagr/functions/fnc_DAGR_VECTOR.sqf @@ -17,14 +17,14 @@ */ #include "script_component.hpp" -#define EMP_RF_ACC 5 +#define EMP_RF_ACC 5 // Rangefinder Accuracy PARAMS_3(_slopeDistance,_azimuth,_inclination); -if (!DAGR_EMPTYVECTOR) then { - DAGRLAZPOS = (eyePos player) vectorAdd ([_slopeDistance, _azimuth, _inclination] call CBA_fnc_polar2vect); - DAGRLAZDIST = _slopeDistance * cos(_inclination); - DAGRLAZDIST = floor(DAGRLAZDIST / EMP_RF_ACC) * EMP_RF_ACC; - DAGRLazHeading = _azimuth; - NODAGRDISPLAY = false; +if (!DAGR_EMPTY_VECTOR) then { + GVAR(LAZPOS) = (eyePos player) vectorAdd ([_slopeDistance, _azimuth, _inclination] call CBA_fnc_polar2vect); + GVAR(LAZDIST) = _slopeDistance * cos(_inclination); + GVAR(LAZDIST) = floor (GVAR(LAZDIST) / EMP_RF_ACC) * EMP_RF_ACC; + GVAR(LAZHEADING) = _azimuth; + DAGR_NO_DISPLAY = false; }; diff --git a/addons/dagr/functions/fnc_mapCoord.sqf b/addons/dagr/functions/fnc_mapCoord.sqf deleted file mode 100644 index 6e0d96daa2..0000000000 --- a/addons/dagr/functions/fnc_mapCoord.sqf +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Author: Rosuto, Ruthberg - * Converts any kind of position into a position string array - * - * Arguments: - * 0: position - * - * Return Value: - * 0: x-pos - * 1: y-pos - * - * Example: - * - * Public: No - */ -#include "script_component.hpp" - -private ["_pos", "_grid", "_xGrid", "_yGrid"]; -_pos = [0, 0]; - -switch (typeName _this) do { - //--- Coordinates - case "ARRAY": { - _pos = _this; - }; - //--- Unit - case "OBJECT": { - _pos = getPosASL _this; - }; - //--- Marker - case "STRING": { - _pos = markerPos _this; - }; -}; - -_grid = toArray (mapGridPosition _pos); -if (count _grid > 4) then { - if (count _grid > 6) then { - _xGrid = toString [_grid select 0, _grid select 1, _grid select 2, _grid select 3]; - _yGrid = toString [_grid select 4, _grid select 5, _grid select 6, _grid select 7]; - } else { - _xGrid = toString [_grid select 0, _grid select 1, _grid select 2]; - _yGrid = toString [_grid select 3, _grid select 4, _grid select 5]; - }; -} else { - _xGrid = toString [_grid select 0, _grid select 1]; - _yGrid = toString [_grid select 2, _grid select 3]; -}; - -[_xGrid, _yGrid] diff --git a/addons/dagr/script_component.hpp b/addons/dagr/script_component.hpp index 91e74c511d..f7a723e533 100644 --- a/addons/dagr/script_component.hpp +++ b/addons/dagr/script_component.hpp @@ -10,3 +10,6 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define DEG_TO_MIL(d) (d / 360 * 6400) +#define MIL_TO_DEG(d) (d / 6400 * 360)