mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' of https://github.com/KoffeinFlummi/ACE3 into AdvancedBallistics
This commit is contained in:
commit
b5b15ba591
BIN
ace_fcs.dll
BIN
ace_fcs.dll
Binary file not shown.
@ -28,3 +28,21 @@ class RscDisplayInventory {
|
||||
class RscDisplayChannel {
|
||||
onLoad = QUOTE(_this call FUNC(onLoadRscDisplayChannel));
|
||||
};
|
||||
|
||||
// map
|
||||
class RscDisplayMainMap {
|
||||
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'Ingame')])] call FUNC(localEvent););
|
||||
};
|
||||
|
||||
class RscDisplayGetReady: RscDisplayMainMap {
|
||||
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'Briefing')])] call FUNC(localEvent););
|
||||
};
|
||||
|
||||
class RscDisplayServerGetReady: RscDisplayGetReady {
|
||||
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'ServerBriefing')])] call FUNC(localEvent););
|
||||
};
|
||||
|
||||
|
||||
class RscDisplayClientGetReady: RscDisplayGetReady {
|
||||
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'ClientBriefing')])] call FUNC(localEvent););
|
||||
};
|
||||
|
@ -96,6 +96,14 @@ if (_lightSource isKindOf "CAManBase") then {
|
||||
|
||||
} forEach _lights;
|
||||
|
||||
// handle campfires
|
||||
if (inflamed _lightSource) then {
|
||||
private "_distance";
|
||||
_distance = _unitPos distance position _lightSource;
|
||||
|
||||
_lightLevel = _lightLevel max linearConversion [0, 30, _distance, 0.5, 0, true];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
_lightLevel
|
||||
|
@ -81,7 +81,7 @@ if (!isServer) then {
|
||||
|
||||
_index = _files find _x;
|
||||
if (_index == -1) then {
|
||||
_missingAddons pushBack _x;
|
||||
if (_x != "ace_serverconfig") then {_missingAddons pushBack _x;};
|
||||
} else {
|
||||
|
||||
_clientVersion = _versions select _index;
|
||||
|
@ -32,7 +32,7 @@ GVAR(openedMenuType) = _menuType;
|
||||
|
||||
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
|
||||
visibleMap ||
|
||||
(GVAR(AlwaysUseCursorSelfInteraction) && _menuType == 1);
|
||||
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction)}};
|
||||
if (GVAR(useCursorMenu)) then {
|
||||
createDialog QGVAR(cursorMenu);
|
||||
// The dialog sets:
|
||||
|
@ -39,14 +39,14 @@ class RscDisplayInventory {
|
||||
x = X_PART(1);
|
||||
y = Y_PART(1);
|
||||
w = W_PART(12);
|
||||
h = H_PART(22.5);
|
||||
h = H_PART(22.5); //default 23
|
||||
};
|
||||
class CA_PlayerBackground: RscText {
|
||||
//center player's container: decrease height because of progressbar height decrease
|
||||
x = X_PART(14.6);
|
||||
y = Y_PART(2);
|
||||
w = W_PART(24.4);
|
||||
h = H_PART(21.5);
|
||||
h = H_PART(21.5); //default 22
|
||||
};
|
||||
class TitleBackground: RscText {
|
||||
x = X_PART(14.6);
|
||||
@ -87,25 +87,31 @@ class RscDisplayInventory {
|
||||
class BackgroundSlotPrimaryMuzzle: BackgroundSlotPrimary {
|
||||
x = X_PART(26.6);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotPrimaryUnderBarrel: BackgroundSlotPrimary {
|
||||
x = X_PART(29);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotPrimaryFlashlight: BackgroundSlotPrimary {
|
||||
x = X_PART(29.6);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
x = X_PART(31.4);
|
||||
y = Y_PART(9.2); //not sure why different (double check release)
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotPrimaryOptics: BackgroundSlotPrimary {
|
||||
x = X_PART(32.6);
|
||||
x = X_PART(33.8);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotPrimaryMagazine: BackgroundSlotPrimary {
|
||||
x = X_PART(35.6);
|
||||
x = X_PART(36.2);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotSecondary: BackgroundSlotPrimary {
|
||||
@ -117,25 +123,31 @@ class RscDisplayInventory {
|
||||
class BackgroundSlotSecondaryMuzzle: BackgroundSlotPrimary {
|
||||
x = X_PART(26.6);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotSecondaryUnderBarrel: BackgroundSlotPrimary {
|
||||
x = X_PART(29);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotSecondaryFlashlight: BackgroundSlotPrimary {
|
||||
x = X_PART(29.6);
|
||||
x = X_PART(31.4);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotSecondaryOptics: BackgroundSlotPrimary {
|
||||
x = X_PART(32.6);
|
||||
x = X_PART(33.8);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotSecondaryMagazine: BackgroundSlotPrimary {
|
||||
x = X_PART(35.6);
|
||||
x = X_PART(36.2);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotHandgun: BackgroundSlotPrimary {
|
||||
@ -147,25 +159,31 @@ class RscDisplayInventory {
|
||||
class BackgroundSlotHandgunMuzzle: BackgroundSlotPrimary {
|
||||
x = X_PART(26.6);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotHandgunUnderBarrel: BackgroundSlotPrimary {
|
||||
x = X_PART(29);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotHandgunFlashlight: BackgroundSlotPrimary {
|
||||
x = X_PART(29.6);
|
||||
x = X_PART(31.4);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotHandgunOptics: BackgroundSlotPrimary {
|
||||
x = X_PART(32.6);
|
||||
x = X_PART(33.8);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotHandgunMagazine: BackgroundSlotPrimary {
|
||||
x = X_PART(35.6);
|
||||
x = X_PART(36.2);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class BackgroundSlotHeadgear: BackgroundSlotPrimary {
|
||||
@ -263,7 +281,7 @@ class RscDisplayInventory {
|
||||
x = X_PART(1.5);
|
||||
y = Y_PART(22.5);
|
||||
w = W_PART(11);
|
||||
h = H_PART(0.5);
|
||||
h = H_PART(0.5); //Default 1
|
||||
};
|
||||
class SlotPrimary: GroundTab {
|
||||
x = X_PART(26.6);
|
||||
@ -274,31 +292,31 @@ class RscDisplayInventory {
|
||||
class SlotPrimaryMuzzle: SlotPrimary {
|
||||
x = X_PART(26.6);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotPrimaryGrip: SlotPrimary {
|
||||
w = 0;
|
||||
h = 0;
|
||||
x = X_PART(39);
|
||||
y = Y_PART(9);
|
||||
class SlotPrimaryUnderBarrel: SlotPrimary {
|
||||
x = X_PART(29);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotPrimaryFlashlight: SlotPrimary {
|
||||
x = X_PART(29.6);
|
||||
x = X_PART(31.4);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotPrimaryOptics: SlotPrimary {
|
||||
x = X_PART(32.6);
|
||||
x = X_PART(33.8);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotPrimaryMagazine: SlotPrimary {
|
||||
x = X_PART(35.6);
|
||||
x = X_PART(36.2);
|
||||
y = Y_PART(9.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotSecondary: SlotPrimary {
|
||||
@ -310,31 +328,31 @@ class RscDisplayInventory {
|
||||
class SlotSecondaryMuzzle: SlotPrimary {
|
||||
x = X_PART(26.6);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotSecondaryGrip: SlotPrimary {
|
||||
w = 0;
|
||||
h = 0;
|
||||
x = X_PART(39);
|
||||
y = Y_PART(14.5);
|
||||
class SlotSecondaryUnderBarrel: SlotPrimary {
|
||||
x = X_PART(29);
|
||||
y = Y_PART(14.59); //Why is this different? (check release)
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotSecondaryFlashlight: SlotPrimary {
|
||||
x = X_PART(29.6);
|
||||
x = X_PART(31.4);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotSecondaryOptics: SlotPrimary {
|
||||
x = X_PART(32.6);
|
||||
x = X_PART(33.8);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotSecondaryMagazine: SlotPrimary {
|
||||
x = X_PART(35.6);
|
||||
x = X_PART(36.2);
|
||||
y = Y_PART(14.6);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotHandgun: SlotPrimary {
|
||||
@ -346,31 +364,31 @@ class RscDisplayInventory {
|
||||
class SlotHandgunMuzzle: SlotPrimary {
|
||||
x = X_PART(26.6);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotHandgunGrip: SlotPrimary {
|
||||
w = 0;
|
||||
h = 0;
|
||||
x = X_PART(39);
|
||||
y = Y_PART(20);
|
||||
class SlotHandgunUnderBarrel: SlotPrimary {
|
||||
x = X_PART(29);
|
||||
y = Y_PART(20.1);
|
||||
W = W_PART(2.3);
|
||||
H = H_PART(2);
|
||||
};
|
||||
class SlotHandgunFlashlight: SlotPrimary {
|
||||
x = X_PART(29.6);
|
||||
x = X_PART(31.4);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotHandgunOptics: SlotPrimary {
|
||||
x = X_PART(32.6);
|
||||
x = X_PART(33.8);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotHandgunMagazine: SlotPrimary {
|
||||
x = X_PART(35.6);
|
||||
x = X_PART(36.2);
|
||||
y = Y_PART(20.1);
|
||||
w = W_PART(2.9);
|
||||
w = W_PART(2.3);
|
||||
h = H_PART(2);
|
||||
};
|
||||
class SlotHeadgear: SlotPrimary {
|
||||
@ -492,7 +510,7 @@ class RscDisplayInventory {
|
||||
x = X_PART(15.1);
|
||||
y = Y_PART(22.5);
|
||||
w = W_PART(23.4);
|
||||
h = H_PART(0.5);
|
||||
h = H_PART(0.5); //Default 1
|
||||
};
|
||||
class ContainerMarker: GroundTab {
|
||||
x = X_PART(0);
|
||||
|
@ -51,6 +51,7 @@ class CfgPatches {
|
||||
"a3_anims_f_epc",
|
||||
"a3_anims_f_heli",
|
||||
"a3_anims_f_kart",
|
||||
"a3_anims_f_mark_deployment",
|
||||
"a3_armor_f",
|
||||
"a3_armor_f_amv",
|
||||
"a3_armor_f_apc_wheeled_03",
|
||||
@ -93,6 +94,7 @@ class CfgPatches {
|
||||
"a3_characters_f_heads",
|
||||
"a3_characters_f_indep",
|
||||
"a3_characters_f_kart",
|
||||
"a3_characters_f_mark",
|
||||
"a3_characters_f_opfor",
|
||||
"a3_characters_f_proxies",
|
||||
"a3_data_f",
|
||||
@ -108,6 +110,7 @@ class CfgPatches {
|
||||
"a3_data_f_hook",
|
||||
"a3_data_f_kart",
|
||||
"a3_data_f_kart_particleeffects",
|
||||
"a3_data_f_mark",
|
||||
"a3_data_f_particleeffects",
|
||||
"a3_dubbing_radio_f",
|
||||
"a3_editor_f",
|
||||
@ -117,6 +120,8 @@ class CfgPatches {
|
||||
"a3_functions_f_epa",
|
||||
"a3_functions_f_epc",
|
||||
"a3_functions_f_heli",
|
||||
"a3_functions_f_mark",
|
||||
"a3_functions_f_mp_mark",
|
||||
"a3_language_f",
|
||||
"a3_language_f_beta",
|
||||
"a3_language_f_bootcamp",
|
||||
@ -127,10 +132,13 @@ class CfgPatches {
|
||||
"a3_language_f_gamma",
|
||||
"a3_language_f_heli",
|
||||
"a3_language_f_kart",
|
||||
"a3_language_f_mark",
|
||||
"a3_language_f_mp_mark",
|
||||
"a3_languagemissions_f",
|
||||
"a3_languagemissions_f_beta",
|
||||
"a3_languagemissions_f_gamma",
|
||||
"a3_languagemissions_f_kart",
|
||||
"a3_languagemissions_f_mp_mark",
|
||||
"a3_map_altis",
|
||||
"a3_map_altis_scenes",
|
||||
"a3_map_data",
|
||||
@ -149,6 +157,8 @@ class CfgPatches {
|
||||
"a3_missions_f_gamma",
|
||||
"a3_missions_f_heli",
|
||||
"a3_missions_f_kart",
|
||||
"a3_missions_f_mark",
|
||||
"a3_missions_f_mp_mark",
|
||||
"a3_modules_f",
|
||||
"a3_modules_f_beta",
|
||||
"a3_modules_f_beta_firingdrills",
|
||||
@ -184,8 +194,12 @@ class CfgPatches {
|
||||
"a3_modules_f_kart",
|
||||
"a3_modules_f_kart_timetrials",
|
||||
"a3_modules_f_livefeed",
|
||||
"a3_modules_f_mark",
|
||||
"a3_modules_f_mark_firingdrills",
|
||||
"a3_modules_f_mark_objectives",
|
||||
"a3_modules_f_marta",
|
||||
"a3_modules_f_misc",
|
||||
"a3_modules_f_mp_mark",
|
||||
"a3_modules_f_multiplayer",
|
||||
"a3_modules_f_objectmodifiers",
|
||||
"a3_modules_f_sites",
|
||||
@ -199,6 +213,7 @@ class CfgPatches {
|
||||
"a3_music_f_epb",
|
||||
"a3_music_f_epc",
|
||||
"a3_music_f_heli",
|
||||
"a3_music_f_mark",
|
||||
"a3_plants_f_bush",
|
||||
"a3_roads_f",
|
||||
"a3_rocks_f",
|
||||
@ -244,6 +259,8 @@ class CfgPatches {
|
||||
"a3_static_f_gamma_aa",
|
||||
"a3_static_f_gamma_at",
|
||||
"a3_static_f_gamma_mortar_01",
|
||||
"a3_static_f_mark_designator_01",
|
||||
"a3_static_f_mark_designator_02",
|
||||
"a3_static_f_mortar_01",
|
||||
"a3_structures_f",
|
||||
"a3_structures_f_bootcamp_civ_camping",
|
||||
@ -385,6 +402,13 @@ class CfgPatches {
|
||||
"a3_structures_f_kart_civ_sportsgrounds",
|
||||
"a3_structures_f_kart_mil_flags",
|
||||
"a3_structures_f_kart_signs_companies",
|
||||
"a3_structures_f_mark_items_military",
|
||||
"a3_structures_f_mark_items_sport",
|
||||
"a3_structures_f_mark_mil_flags",
|
||||
"a3_structures_f_mark_training",
|
||||
"a3_structures_f_mark_vr_helpers",
|
||||
"a3_structures_f_mark_vr_shapes",
|
||||
"a3_structures_f_mark_vr_targets",
|
||||
"a3_structures_f_mil",
|
||||
"a3_structures_f_mil_bagbunker",
|
||||
"a3_structures_f_mil_bagfence",
|
||||
@ -416,6 +440,7 @@ class CfgPatches {
|
||||
"a3_supplies_f_heli_cargonets",
|
||||
"a3_supplies_f_heli_fuel",
|
||||
"a3_supplies_f_heli_slingload",
|
||||
"a3_supplies_f_mark",
|
||||
"a3_uav_f_characters_f_gamma",
|
||||
"a3_uav_f_weapons_f_gamma_ammoboxes",
|
||||
"a3_ui_f",
|
||||
@ -423,6 +448,8 @@ class CfgPatches {
|
||||
"a3_ui_f_curator",
|
||||
"a3_ui_f_heli",
|
||||
"a3_ui_f_kart",
|
||||
"a3_ui_f_mark",
|
||||
"a3_ui_f_mp_mark",
|
||||
"a3_uifonts_f",
|
||||
"a3_weapons_f",
|
||||
"a3_weapons_f_aaf",
|
||||
@ -474,6 +501,28 @@ class CfgPatches {
|
||||
"a3_weapons_f_longrangerifles_m320",
|
||||
"a3_weapons_f_machineguns_m200",
|
||||
"a3_weapons_f_machineguns_zafir",
|
||||
"a3_weapons_f_mark",
|
||||
"a3_weapons_f_mark_acc",
|
||||
"a3_weapons_f_mark_ebr",
|
||||
"a3_weapons_f_mark_longrangerifles_dmr_01",
|
||||
"a3_weapons_f_mark_longrangerifles_dmr_02",
|
||||
"a3_weapons_f_mark_longrangerifles_dmr_03",
|
||||
"a3_weapons_f_mark_longrangerifles_dmr_04",
|
||||
"a3_weapons_f_mark_longrangerifles_dmr_05",
|
||||
"a3_weapons_f_mark_longrangerifles_dmr_06",
|
||||
"a3_weapons_f_mark_longrangerifles_gm6",
|
||||
"a3_weapons_f_mark_longrangerifles_gm6_camo",
|
||||
"a3_weapons_f_mark_longrangerifles_m320",
|
||||
"a3_weapons_f_mark_longrangerifles_m320_camo",
|
||||
"a3_weapons_f_mark_machineguns_m200",
|
||||
"a3_weapons_f_mark_machineguns_mmg_01",
|
||||
"a3_weapons_f_mark_machineguns_mmg_02",
|
||||
"a3_weapons_f_mark_machineguns_zafir",
|
||||
"a3_weapons_f_mark_rifles_khaybar",
|
||||
"a3_weapons_f_mark_rifles_mk20",
|
||||
"a3_weapons_f_mark_rifles_mx",
|
||||
"a3_weapons_f_mark_rifles_sdar",
|
||||
"a3_weapons_f_mark_rifles_trg20",
|
||||
"a3_weapons_f_nato",
|
||||
"a3_weapons_f_pistols_acpc2",
|
||||
"a3_weapons_f_pistols_p07",
|
||||
|
@ -36,6 +36,15 @@ class CfgVehicles {
|
||||
class No { name = "No"; value = 0; default = 1;};
|
||||
};
|
||||
};
|
||||
class MapShowCursorCoordinates {
|
||||
displayName = "Show cursor coordinates?";
|
||||
description = "Show the grid coordinates on the mouse pointer?";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes { name = "Yes"; value = 1; };
|
||||
class No { name = "No"; value = 0; default = 1;};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -8,6 +8,7 @@ PREP(blueForceTrackingUpdate);
|
||||
PREP(determineMapLight);
|
||||
PREP(determineZoom);
|
||||
PREP(moduleMap);
|
||||
PREP(onDrawMap);
|
||||
PREP(updateMapEffects);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -48,6 +48,10 @@ class ACE_Settings {
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
};
|
||||
class GVAR(mapShowCursorCoordinates) {
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
@ -85,7 +89,8 @@ class RscMapControl {
|
||||
class RscDisplayMainMap {
|
||||
// Tweak map styling
|
||||
class controlsBackground {
|
||||
class CA_Map : RscMapControl {
|
||||
class CA_Map: RscMapControl {
|
||||
onDraw = QUOTE([ctrlParent (_this select 0)] call DFUNC(onDrawMap));
|
||||
#include "MapTweaks.hpp"
|
||||
};
|
||||
};
|
||||
@ -143,6 +148,13 @@ class RscDisplayDiary {
|
||||
|
||||
// BRIEFING SCREEN
|
||||
class RscDisplayGetReady: RscDisplayMainMap {
|
||||
// Tweak map styling
|
||||
class controlsBackground {
|
||||
class CA_Map: RscMapControl {
|
||||
onDraw = QUOTE([ctrlParent (_this select 0)] call DFUNC(onDrawMap));
|
||||
//#include "MapTweaks.hpp" @todo Shouldn't this apply to briefing too?
|
||||
};
|
||||
};
|
||||
// get rid of the "center to player position" - button (as it works even on elite)
|
||||
class controls {
|
||||
class TopRight: RscControlsGroup {
|
||||
|
@ -15,8 +15,9 @@ _activated = _this select 2;
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
[_logic, QGVAR(mapIllumination), "MapIllumination"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapIllumination), "MapIllumination" ] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] call EFUNC(common,readSettingFromModule);
|
||||
|
||||
diag_log text "[ACE]: Interaction Module Initialized.";
|
||||
|
4
addons/map/functions/fnc_onDrawMap.sqf
Normal file
4
addons/map/functions/fnc_onDrawMap.sqf
Normal file
@ -0,0 +1,4 @@
|
||||
// by commy2
|
||||
#include "script_component.hpp"
|
||||
|
||||
((_this select 0) displayCtrl 1016) ctrlShow GVAR(mapShowCursorCoordinates);
|
@ -1,26 +0,0 @@
|
||||
// MARKERS
|
||||
class CfgMarkers {
|
||||
class ACE_MapToolFixed {
|
||||
name = "MapToolFixed";
|
||||
icon = PATHTOF(data\mapToolFixed.paa);
|
||||
scope = 0;
|
||||
color[] = {1,1,1,1};
|
||||
size = 32;
|
||||
};
|
||||
|
||||
class ACE_MapToolRotatingNormal {
|
||||
name = "MapToolRotating";
|
||||
icon = PATHTOF(data\mapToolRotatingNormal.paa);
|
||||
scope = 0;
|
||||
color[] = {1,1,1,1};
|
||||
size = 32;
|
||||
};
|
||||
|
||||
class ACE_MapToolRotatingSmall {
|
||||
name = "MapToolRotating";
|
||||
icon = PATHTOF(data\mapToolRotatingSmall.paa);
|
||||
scope = 0;
|
||||
color[] = {1,1,1,1};
|
||||
size = 32;
|
||||
};
|
||||
};
|
@ -31,7 +31,7 @@ class RscTitles {
|
||||
};
|
||||
class heading: RscText{
|
||||
idc = 913590;
|
||||
x = X_gps + W_gps * 0.25;
|
||||
x = X_gps + W_gps * 0.225;
|
||||
y = Y_gps + H_gps * 0.12;
|
||||
w = W_gps * 0.2;
|
||||
h = H_gps * 0.16;
|
||||
@ -46,7 +46,7 @@ class RscTitles {
|
||||
};
|
||||
class altitude: RscText{
|
||||
idc = 913591;
|
||||
x = X_gps + W_gps * 0.55;
|
||||
x = X_gps + W_gps * 0.575;
|
||||
y = Y_gps + H_gps * 0.12;
|
||||
w = W_gps * 0.2;
|
||||
h = H_gps * 0.16;
|
||||
@ -61,9 +61,9 @@ class RscTitles {
|
||||
};
|
||||
class coordinates: RscText{
|
||||
idc = 913592;
|
||||
x = X_gps + W_gps * 0.2;
|
||||
x = X_gps + W_gps * 0.15;
|
||||
y = Y_gps + H_gps * 0.33;
|
||||
w = W_gps * 0.6;
|
||||
w = W_gps * 0.7;
|
||||
h = H_gps * 0.35;
|
||||
style = ST_CENTER;
|
||||
text = "012.3 115.1";
|
||||
|
Binary file not shown.
@ -28,7 +28,7 @@ GVAR(drawing_controls) = [36732, 36733, 36734, 36735, 36736, 36737];
|
||||
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseMoving", {_this call FUNC(handleMouseMove);}];
|
||||
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonDown", {[1, _this] call FUNC(handleMouseButton);}];
|
||||
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonUp", {[0, _this] call FUNC(handleMouseButton)}];
|
||||
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapToolMarkers);}];
|
||||
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(updateMapToolMarkers);}];
|
||||
(finddisplay _d) displayAddEventHandler ["KeyDown", {_this call FUNC(handleKeyDown);}];
|
||||
};
|
||||
|
||||
|
@ -32,7 +32,6 @@ class RscEdit;
|
||||
|
||||
#include "MapGpsUI.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgMarkers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Add the line marker
|
||||
*
|
||||
* Argument:
|
||||
* 0: Marker Name (string)
|
||||
* 1: Marker start pos (array)
|
||||
* 2: Marker end pos (array)
|
||||
* 3: Color index (Number)
|
||||
* Arguments:
|
||||
* 0: Marker Name <STRING>
|
||||
* 1: Marker start pos <ARRAY>
|
||||
* 2: Marker end pos <ARRAY>
|
||||
* 3: Color index <NUMBER>
|
||||
*
|
||||
* Return value:
|
||||
* Return
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
_name = _this select 0;
|
||||
@ -27,16 +27,16 @@ _name setMarkerColorLocal _color;
|
||||
_name setMarkerPosLocal (_startPos vectorAdd (_difPos vectorMultiply 0.5));
|
||||
_mag = vectorMagnitude _difPos;
|
||||
if (_mag > 0) then {
|
||||
_name setMarkerSizeLocal [5, _mag / 2];
|
||||
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
|
||||
_name setMarkerSizeLocal [5, _mag / 2];
|
||||
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
|
||||
} else {
|
||||
_name setMarkerSizeLocal [5, 5];
|
||||
_name setMarkerDirLocal 0;
|
||||
_name setMarkerSizeLocal [5, 5];
|
||||
_name setMarkerDirLocal 0;
|
||||
};
|
||||
|
||||
GVAR(drawing_lineMarkers) pushBack (+_this);
|
||||
|
||||
if (isServer && GVAR(drawing_syncMarkers)) then {
|
||||
GVAR(drawing_serverLineMarkers) pushBack (+_this);
|
||||
publicVariable QGVAR(drawing_serverLineMarkers);
|
||||
GVAR(drawing_serverLineMarkers) pushBack (+_this);
|
||||
publicVariable QGVAR(drawing_serverLineMarkers);
|
||||
};
|
||||
|
@ -1,15 +1,15 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Returns the equivalent of 100m in screen coordinates
|
||||
*
|
||||
* Argument:
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* Return
|
||||
* No
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
_pos = ((finddisplay 12) displayctrl 51) ctrlMapScreenToWorld [0.5, 0.5];
|
||||
|
@ -1,5 +1,15 @@
|
||||
// by esteldunedain
|
||||
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
* canDraw
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* <BOOL>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
(missionNameSpace getVariable [QGVAR(drawing_syncMarkers), true] && {GVAR(EveryoneCanDrawOnBriefing)}) ||
|
||||
|
@ -1,5 +1,15 @@
|
||||
// by esteldunedain
|
||||
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
* canUseMapGPS
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* <BOOL>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
visibleMap &&
|
||||
|
@ -1,5 +1,15 @@
|
||||
// by esteldunedain
|
||||
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
* canUseMapTools
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* <BOOL>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
visibleMap &&
|
||||
|
@ -1,19 +1,19 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Cancel the drawing of the current line marker
|
||||
*
|
||||
* Argument:
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
GVAR(drawing_isDrawing) = false;
|
||||
if (count GVAR(drawing_tempLineMarker) > 0) then {
|
||||
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
|
||||
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
|
||||
};
|
||||
GVAR(drawing_tempLineMarker) = [];
|
||||
|
@ -1,23 +1,23 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Copy recieved markers to map
|
||||
*
|
||||
* Argument:
|
||||
* 0: Array of markers to copy (Array)
|
||||
* Arguments:
|
||||
* 0: Array of markers to copy <ARRAY>
|
||||
*
|
||||
* Return value:
|
||||
* Return
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_lineMarkers);
|
||||
|
||||
{
|
||||
_marker = _x;
|
||||
//Add marker if we don't already have it
|
||||
if (({(_x select 0) == (_marker select 0)} count GVAR(drawing_lineMarkers)) == 0) then {
|
||||
_marker call FUNC(addLineMarker);
|
||||
};
|
||||
_marker = _x;
|
||||
//Add marker if we don't already have it
|
||||
if (({(_x select 0) == (_marker select 0)} count GVAR(drawing_lineMarkers)) == 0) then {
|
||||
_marker call FUNC(addLineMarker);
|
||||
};
|
||||
} forEach _lineMarkers;
|
||||
|
@ -1,11 +1,10 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Send request to remote player
|
||||
*
|
||||
* Argument:
|
||||
* 0: Player (Unit)
|
||||
* 0: Target player (Unit)
|
||||
* Arguments:
|
||||
* 0: Player <OBJECT>
|
||||
* 0: Target player <OBJECT>
|
||||
*
|
||||
* Code Chain:
|
||||
* START: copyMapStart: triggers event drawing_requestMarkers on remote
|
||||
|
@ -1,9 +1,8 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Handle key down on map.
|
||||
*
|
||||
* Argument:
|
||||
* Arguments:
|
||||
* 0: Display (display)
|
||||
* 1: Key code (number)
|
||||
* 2: Shift Key (boolean)
|
||||
@ -30,45 +29,45 @@ _handled = false;
|
||||
|
||||
// If pressed Esc while drawing
|
||||
if (_code == DIK_ESCAPE) exitWith {
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
_handled = true;
|
||||
};
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
_handled = true;
|
||||
};
|
||||
};
|
||||
|
||||
if (_code == DIK_DELETE) exitWith {
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
_handled = true;
|
||||
} else {
|
||||
|
||||
// Check if a line marker needs to be deleted
|
||||
{
|
||||
_relPos = GVAR(mousePosition) vectorDiff (_x select 1);
|
||||
_diffVector = (_x select 2) vectorDiff (_x select 1);
|
||||
_magDiffVector = vectorMagnitude _diffVector;
|
||||
if (_magDiffVector == 0) then {
|
||||
_diffVector = [10,0,0];
|
||||
_magDiffVector = vectorMagnitude _diffVector;
|
||||
};
|
||||
_diffVector = _diffVector vectorMultiply (1/_magDiffVector);
|
||||
|
||||
// Projection of the relative position over the longitudinal axis
|
||||
_lambdaLong = _diffVector vectorDotProduct _relPos;
|
||||
// Projection of the relative position over the trasversal axis
|
||||
_lambdaTrasAbs = vectorMagnitude (_relPos vectorDiff (_diffVector vectorMultiply _lambdaLong));
|
||||
if (_lambdaLong >= 0 && _lambdaLong <= _magDiffVector && _lambdaTrasAbs <= 5) exitWith {
|
||||
// Delete the line marker
|
||||
if (GVAR(drawing_syncMarkers)) then {
|
||||
["drawing_removeLineMarker", [_x select 0]] call EFUNC(common,globalEvent);
|
||||
} else {
|
||||
deleteMarkerLocal (_x select 0);
|
||||
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
|
||||
};
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
_handled = true;
|
||||
};
|
||||
} forEach GVAR(drawing_lineMarkers);
|
||||
};
|
||||
} else {
|
||||
|
||||
// Check if a line marker needs to be deleted
|
||||
{
|
||||
_relPos = GVAR(mousePosition) vectorDiff (_x select 1);
|
||||
_diffVector = (_x select 2) vectorDiff (_x select 1);
|
||||
_magDiffVector = vectorMagnitude _diffVector;
|
||||
if (_magDiffVector == 0) then {
|
||||
_diffVector = [10,0,0];
|
||||
_magDiffVector = vectorMagnitude _diffVector;
|
||||
};
|
||||
_diffVector = _diffVector vectorMultiply (1/_magDiffVector);
|
||||
|
||||
// Projection of the relative position over the longitudinal axis
|
||||
_lambdaLong = _diffVector vectorDotProduct _relPos;
|
||||
// Projection of the relative position over the trasversal axis
|
||||
_lambdaTrasAbs = vectorMagnitude (_relPos vectorDiff (_diffVector vectorMultiply _lambdaLong));
|
||||
if (_lambdaLong >= 0 && _lambdaLong <= _magDiffVector && _lambdaTrasAbs <= 5) exitWith {
|
||||
// Delete the line marker
|
||||
if (GVAR(drawing_syncMarkers)) then {
|
||||
["drawing_removeLineMarker", [_x select 0]] call EFUNC(common,globalEvent);
|
||||
} else {
|
||||
deleteMarkerLocal (_x select 0);
|
||||
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
|
||||
};
|
||||
_handled = true;
|
||||
};
|
||||
} forEach GVAR(drawing_lineMarkers);
|
||||
};
|
||||
};
|
||||
|
||||
_handled
|
||||
|
@ -31,72 +31,72 @@ if (_button != 0) exitWith {};
|
||||
|
||||
// If releasing
|
||||
if (_dir != 1 && (GVAR(mapTool_isDragging) or GVAR(mapTool_isRotating))) exitWith {
|
||||
GVAR(mapTool_isDragging) = false;
|
||||
GVAR(mapTool_isRotating) = false;
|
||||
_handled = true;
|
||||
_handled
|
||||
GVAR(mapTool_isDragging) = false;
|
||||
GVAR(mapTool_isRotating) = false;
|
||||
_handled = true;
|
||||
_handled
|
||||
};
|
||||
|
||||
// If clicking
|
||||
if (_dir == 1) exitWith {
|
||||
|
||||
if !(call FUNC(canDraw)) exitWith {_handled = false;};
|
||||
if !(call FUNC(canDraw)) exitWith {_handled = false;};
|
||||
|
||||
// Transform mouse screen position to coordinates
|
||||
_pos = _control ctrlMapScreenToWorld _screenPos;
|
||||
_pos set [count _pos, 0];
|
||||
// Transform mouse screen position to coordinates
|
||||
_pos = _control ctrlMapScreenToWorld _screenPos;
|
||||
_pos set [count _pos, 0];
|
||||
|
||||
if (GVAR(drawing_isDrawing)) exitWith {
|
||||
// Already drawing -> Add tempLineMarker to permanent list
|
||||
if (GVAR(drawing_syncMarkers)) then {
|
||||
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
|
||||
// [GVAR(drawing_tempLineMarker), "FUNC(addLineMarker)", 2] call EFUNC(common,execRemoteFnc);
|
||||
["drawing_addLineMarker", GVAR(drawing_tempLineMarker)] call EFUNC(common,globalEvent);
|
||||
// Log who drew on the briefing screen
|
||||
(text format ["[ACE] Server: Player %1 drew on the briefing screen", name player]) call EFUNC(common,serverLog);
|
||||
} else {
|
||||
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
|
||||
GVAR(drawing_lineMarkers) pushBack (+GVAR(drawing_tempLineMarker));
|
||||
if (GVAR(drawing_isDrawing)) exitWith {
|
||||
// Already drawing -> Add tempLineMarker to permanent list
|
||||
if (GVAR(drawing_syncMarkers)) then {
|
||||
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
|
||||
// [GVAR(drawing_tempLineMarker), "FUNC(addLineMarker)", 2] call EFUNC(common,execRemoteFnc);
|
||||
["drawing_addLineMarker", GVAR(drawing_tempLineMarker)] call EFUNC(common,globalEvent);
|
||||
// Log who drew on the briefing screen
|
||||
(text format ["[ACE] Server: Player %1 drew on the briefing screen", name player]) call EFUNC(common,serverLog);
|
||||
} else {
|
||||
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
|
||||
GVAR(drawing_lineMarkers) pushBack (+GVAR(drawing_tempLineMarker));
|
||||
};
|
||||
GVAR(drawing_tempLineMarker) = [];
|
||||
GVAR(drawing_isDrawing) = false;
|
||||
_handled = true;
|
||||
};
|
||||
GVAR(drawing_tempLineMarker) = [];
|
||||
GVAR(drawing_isDrawing) = false;
|
||||
_handled = true;
|
||||
};
|
||||
|
||||
if (_altKey) exitWith {
|
||||
// Start drawing
|
||||
GVAR(drawing_isDrawing) = true;
|
||||
// Create tempLineMarker
|
||||
_gui = format ["%1%2%3%4", random (100), random (100), random (100), random (100)];
|
||||
GVAR(drawing_tempLineMarker) = [_gui, + _pos, + _pos, GVAR(drawing_drawColor)];
|
||||
_marker = createMarkerLocal [_gui, [0,0]];
|
||||
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
|
||||
_handled = true;
|
||||
};
|
||||
|
||||
GVAR(mapTool_isDragging) = false;
|
||||
GVAR(mapTool_isRotating) = false;
|
||||
|
||||
// If no map tool marker then exit
|
||||
if (isNil QGVAR(mapTool_markerRotatingFixed)) exitWith {_handled = false;};
|
||||
|
||||
// Check if clicking the maptool
|
||||
if (_pos call FUNC(isInsideMapTool)) exitWith {
|
||||
// Store data for dragging
|
||||
GVAR(mapTool_startPos) = + GVAR(mapTool_pos);
|
||||
GVAR(mapTool_startDragPos) = + _pos;
|
||||
if (_ctrlKey) then {
|
||||
// Store data for rotating
|
||||
GVAR(mapTool_startAngle) = + GVAR(mapTool_angle);
|
||||
GVAR(mapTool_startDragAngle) = (180 + ((GVAR(mapTool_startDragPos) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mapTool_startDragPos) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
|
||||
// Start rotating
|
||||
GVAR(mapTool_isRotating) = true;
|
||||
} else {
|
||||
// Start dragging
|
||||
GVAR(mapTool_isDragging) = true;
|
||||
if (_altKey) exitWith {
|
||||
// Start drawing
|
||||
GVAR(drawing_isDrawing) = true;
|
||||
// Create tempLineMarker
|
||||
_gui = format ["%1%2%3%4", random (100), random (100), random (100), random (100)];
|
||||
GVAR(drawing_tempLineMarker) = [_gui, + _pos, + _pos, GVAR(drawing_drawColor)];
|
||||
_marker = createMarkerLocal [_gui, [0,0]];
|
||||
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
|
||||
_handled = true;
|
||||
};
|
||||
|
||||
GVAR(mapTool_isDragging) = false;
|
||||
GVAR(mapTool_isRotating) = false;
|
||||
|
||||
// If no map tool marker then exit
|
||||
if (GVAR(mapTool_Shown) == 0) exitWith {_handled = false;};
|
||||
|
||||
// Check if clicking the maptool
|
||||
if (_pos call FUNC(isInsideMapTool)) exitWith {
|
||||
// Store data for dragging
|
||||
GVAR(mapTool_startPos) = + GVAR(mapTool_pos);
|
||||
GVAR(mapTool_startDragPos) = + _pos;
|
||||
if (_ctrlKey) then {
|
||||
// Store data for rotating
|
||||
GVAR(mapTool_startAngle) = + GVAR(mapTool_angle);
|
||||
GVAR(mapTool_startDragAngle) = (180 + ((GVAR(mapTool_startDragPos) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mapTool_startDragPos) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
|
||||
// Start rotating
|
||||
GVAR(mapTool_isRotating) = true;
|
||||
} else {
|
||||
// Start dragging
|
||||
GVAR(mapTool_isDragging) = true;
|
||||
};
|
||||
_handled = true;
|
||||
};
|
||||
_handled = true;
|
||||
};
|
||||
};
|
||||
|
||||
_handled
|
||||
|
@ -22,42 +22,42 @@ GVAR(mousePosition) set [2, 0]; //convert 2d pos to 3d
|
||||
|
||||
// If cannot draw then exit
|
||||
if !(call FUNC(canDraw)) exitWith {
|
||||
// If was drawing, cancel
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
};
|
||||
false
|
||||
// If was drawing, cancel
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
};
|
||||
false
|
||||
};
|
||||
|
||||
// Handle drawing
|
||||
if (GVAR(drawing_isDrawing)) exitWith {
|
||||
GVAR(drawing_tempLineMarker) set [2, GVAR(mousePosition)];
|
||||
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
|
||||
false
|
||||
GVAR(drawing_tempLineMarker) set [2, GVAR(mousePosition)];
|
||||
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
|
||||
false
|
||||
};
|
||||
|
||||
// Handle Map tools
|
||||
if (isNil QGVAR(mapTool_markerRotatingFixed)) exitWith {false};
|
||||
if (GVAR(mapTool_Shown) == 0) exitWith {false};
|
||||
|
||||
// Translation
|
||||
if (GVAR(mapTool_isDragging)) exitWith {
|
||||
GVAR(mapTool_pos) set [0, (GVAR(mapTool_startPos) select 0) + (GVAR(mousePosition) select 0) - (GVAR(mapTool_startDragPos) select 0)];
|
||||
GVAR(mapTool_pos) set [1, (GVAR(mapTool_startPos) select 1) + (GVAR(mousePosition) select 1) - (GVAR(mapTool_startDragPos) select 1)];
|
||||
GVAR(mapTool_pos) set [0, (GVAR(mapTool_startPos) select 0) + (GVAR(mousePosition) select 0) - (GVAR(mapTool_startDragPos) select 0)];
|
||||
GVAR(mapTool_pos) set [1, (GVAR(mapTool_startPos) select 1) + (GVAR(mousePosition) select 1) - (GVAR(mapTool_startDragPos) select 1)];
|
||||
|
||||
// Update the size and rotation of the maptool
|
||||
[] call FUNC(updateMapToolMarkers);
|
||||
true
|
||||
// Update the size and rotation of the maptool
|
||||
[] call FUNC(updateMapToolMarkers);
|
||||
true
|
||||
};
|
||||
|
||||
// Rotation
|
||||
if (GVAR(mapTool_isRotating)) exitWith {
|
||||
// Get new angle
|
||||
_angle = (180 + ((GVAR(mousePosition) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mousePosition) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
|
||||
GVAR(mapTool_angle) = GVAR(mapTool_startAngle) + _angle - GVAR(mapTool_startDragAngle);
|
||||
// Get new angle
|
||||
_angle = (180 + ((GVAR(mousePosition) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mousePosition) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
|
||||
GVAR(mapTool_angle) = GVAR(mapTool_startAngle) + _angle - GVAR(mapTool_startDragAngle);
|
||||
|
||||
// Update the size and rotation of the maptool
|
||||
[] call FUNC(updateMapToolMarkers);
|
||||
true
|
||||
// Update the size and rotation of the maptool
|
||||
[] call FUNC(updateMapToolMarkers);
|
||||
true
|
||||
};
|
||||
|
||||
false
|
||||
|
@ -29,16 +29,16 @@ _handled = true;
|
||||
// ACE_Map_drawColors is never defined
|
||||
|
||||
/* if (count GVAR(drawing_tempLineMarker) > 0) then {
|
||||
ACE_Map_drawColor = if (_dir > 0) then {ACE_Map_drawColor + 1} else {ACE_Map_drawColor - 1};
|
||||
if (ACE_Map_drawColor >= count ACE_Map_drawColors) then {
|
||||
ACE_Map_drawColor = if (_dir > 0) then {ACE_Map_drawColor + 1} else {ACE_Map_drawColor - 1};
|
||||
if (ACE_Map_drawColor >= count ACE_Map_drawColors) then {
|
||||
ACE_Map_drawColor = ACE_Map_drawColor - count ACE_Map_drawColors;
|
||||
};
|
||||
if (ACE_Map_drawColor < 0) then {
|
||||
};
|
||||
if (ACE_Map_drawColor < 0) then {
|
||||
ACE_Map_drawColor = ACE_Map_drawColor + count ACE_Map_drawColors;
|
||||
};
|
||||
GVAR(drawing_tempLineMarker) set [3, ACE_Map_drawColor];
|
||||
GVAR(drawing_tempLineMarker) call ACE_Map_fnc_updateLineMarker;
|
||||
};
|
||||
GVAR(drawing_tempLineMarker) set [3, ACE_Map_drawColor];
|
||||
GVAR(drawing_tempLineMarker) call ACE_Map_fnc_updateLineMarker;
|
||||
|
||||
_handled = true;
|
||||
_handled = true;
|
||||
}; */
|
||||
_handled
|
||||
|
@ -1,16 +1,14 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Return true if the position is inside the map marker (to allow dragging).
|
||||
*
|
||||
* Argument:
|
||||
* 0: x Position (in meters)
|
||||
* 1: y Position (in meters)
|
||||
* Arguments:
|
||||
* 0: x Position (in meters) <NUMBER>
|
||||
* 1: y Position (in meters) <NUMBER>
|
||||
*
|
||||
* Return value:
|
||||
* Boolean
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define TEXTURE_WIDTH_IN_M 6205
|
||||
@ -18,6 +16,7 @@
|
||||
#define DIST_TOP_TO_CENTER_PERC 0.65
|
||||
#define DIST_LEFT_TO_CENTER_PERC 0.30
|
||||
|
||||
|
||||
if (GVAR(mapTool_Shown) == 0) exitWith {false};
|
||||
_textureWidth = [TEXTURE_WIDTH_IN_M, TEXTURE_WIDTH_IN_M / 2] select (GVAR(mapTool_Shown) - 1);
|
||||
|
||||
|
@ -2,39 +2,32 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (visibleMap) then {
|
||||
// Show/Hide draw buttons
|
||||
if ("ACE_MapTools" in items ACE_player) then {
|
||||
{ ((finddisplay 12) displayctrl _x) ctrlShow true; } forEach GVAR(drawing_controls);
|
||||
} else {
|
||||
{ ((finddisplay 12) displayctrl _x) ctrlShow false; } forEach GVAR(drawing_controls);
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
// Show/Hide draw buttons
|
||||
if ("ACE_MapTools" in items ACE_player) then {
|
||||
{ ((finddisplay 12) displayctrl _x) ctrlShow true; } forEach GVAR(drawing_controls);
|
||||
} else {
|
||||
{ ((finddisplay 12) displayctrl _x) ctrlShow false; } forEach GVAR(drawing_controls);
|
||||
if (GVAR(drawing_isDrawing)) then {
|
||||
call FUNC(cancelDrawing);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
//When Map is Closed:
|
||||
if (GVAR(mapVisableLastFrame) && (!visibleMap)) then {
|
||||
GVAR(mapVisableLastFrame) = false;
|
||||
// Hide GPS
|
||||
[false] call FUNC(openMapGps);
|
||||
// Hide Map tools
|
||||
deleteMarkerLocal MARKERNAME_MAPTOOL_FIXED;
|
||||
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGNORMAL;
|
||||
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGSMALL;
|
||||
GVAR(mapTool_markerRotatingFixed) = nil;
|
||||
GVAR(mapTool_markerRotatingNormal) = nil;
|
||||
GVAR(mapTool_markerRotatingSmall) = nil;
|
||||
// Cancel drawing
|
||||
call FUNC(cancelDrawing);
|
||||
GVAR(mapVisableLastFrame) = false;
|
||||
// Hide GPS
|
||||
[false] call FUNC(openMapGps);
|
||||
// Cancel drawing
|
||||
call FUNC(cancelDrawing);
|
||||
};
|
||||
|
||||
//When Map is Opened:
|
||||
if ((!GVAR(mapVisableLastFrame)) && (visibleMap)) then {
|
||||
//todo: "mapOpened" Event????
|
||||
GVAR(mapVisableLastFrame) = true;
|
||||
// Show and update map tools if required
|
||||
[] call FUNC(updateMapToolMarkers);
|
||||
// Show GPS if required
|
||||
[GVAR(mapGpsShow)] call FUNC(openMapGps);
|
||||
//todo: "mapOpened" Event????
|
||||
GVAR(mapVisableLastFrame) = true;
|
||||
// Show and update map tools if required
|
||||
[] call FUNC(updateMapToolMarkers);
|
||||
// Show GPS if required
|
||||
[GVAR(mapGpsShow)] call FUNC(openMapGps);
|
||||
};
|
||||
|
@ -1,25 +1,24 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Opens or closes the gps on the map screen, showing coordinates
|
||||
*
|
||||
* Argument:
|
||||
* 0: Open GPS? (Boolean)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
|
||||
* Author: esteldunedain
|
||||
* Opens or closes the gps on the map screen, showing coordinates
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Open GPS? <BOOL>
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
_shouldOpenGps = _this select 0;
|
||||
_isOpen = !(isNull (uiNamespace getVariable [QGVAR(ui_mapGpsDisplay), displayNull]));
|
||||
|
||||
if (_shouldOpenGps && {"ItemGPS" in assignedItems ACE_player} && {!_isOpen}) then {
|
||||
("RscACE_MapGps" call BIS_fnc_rscLayer) cutRsc ["RscACE_MapGps","PLAIN"];
|
||||
("RscACE_MapGps" call BIS_fnc_rscLayer) cutRsc ["RscACE_MapGps","PLAIN"];
|
||||
|
||||
[FUNC(openMapGpsUpdate), 0.5, []] call CBA_fnc_addPerFrameHandler; //update bearing/altitude every 0.5 sec (ticktime)
|
||||
[FUNC(openMapGpsUpdate), 0.5, []] call CBA_fnc_addPerFrameHandler; //update bearing/altitude every 0.5 sec (ticktime)
|
||||
} else {
|
||||
("RscACE_MapGps" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
|
||||
("RscACE_MapGps" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
|
||||
};
|
||||
|
||||
|
@ -11,8 +11,8 @@ disableSerialization;
|
||||
|
||||
_mapGpsDisplay = uiNamespace getVariable [QGVAR(ui_mapGpsDisplay), displayNull];
|
||||
_ctrl = _mapGpsDisplay displayCtrl 913590;
|
||||
_ctrl ctrlSetText str(round(getDir player)); //set Heading
|
||||
_ctrl ctrlSetText str(round(getDir ACE_player)); //set Heading
|
||||
_ctrl = _mapGpsDisplay displayCtrl 913591;
|
||||
_ctrl ctrlSetText str(round((getPosASL player) select 2)); //set Altitude
|
||||
_ctrl ctrlSetText str(round((getPosASL ACE_player) select 2)); //set Altitude
|
||||
_ctrl = _mapGpsDisplay displayCtrl 913592;
|
||||
_ctrl ctrlSetText mapGridPosition player; //set grid cords
|
||||
_ctrl ctrlSetText mapGridPosition ACE_player; //set grid cords
|
||||
|
@ -1,10 +1,9 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Remove the line marker
|
||||
*
|
||||
* Argument:
|
||||
* 0: Marker Name (string)
|
||||
* Arguments:
|
||||
* 0: Marker Name <STRING>
|
||||
*
|
||||
* Return value:
|
||||
* Return
|
||||
@ -12,20 +11,20 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
_name = _this select 0;
|
||||
_name = _this select 0;
|
||||
|
||||
deleteMarkerLocal _name;
|
||||
deleteMarkerLocal _name;
|
||||
{
|
||||
if ((_x select 0) == _name) exitWith {
|
||||
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
|
||||
};
|
||||
if ((_x select 0) == _name) exitWith {
|
||||
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
|
||||
};
|
||||
} forEach GVAR(drawing_lineMarkers);
|
||||
|
||||
if (isServer && GVAR(drawing_syncMarkers)) then {
|
||||
{
|
||||
if ((_x select 0) == _name) exitWith {
|
||||
GVAR(drawing_serverLineMarkers) = GVAR(drawing_serverLineMarkers) - [_x];
|
||||
publicVariable QGVAR(drawing_serverLineMarkers);
|
||||
};
|
||||
} forEach GVAR(drawing_serverLineMarkers);
|
||||
{
|
||||
if ((_x select 0) == _name) exitWith {
|
||||
GVAR(drawing_serverLineMarkers) = GVAR(drawing_serverLineMarkers) - [_x];
|
||||
publicVariable QGVAR(drawing_serverLineMarkers);
|
||||
};
|
||||
} forEach GVAR(drawing_serverLineMarkers);
|
||||
};
|
||||
|
@ -1,24 +1,22 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Updates the line marker position and scale
|
||||
*
|
||||
* Argument:
|
||||
* 0: Marker Name (string)
|
||||
* 1: Marker start pos (array)
|
||||
* 2: Marker end pos (array)
|
||||
* 3: Color index (Number)
|
||||
* Arguments:
|
||||
* 0: Marker Name <STRING>
|
||||
* 1: Marker start pos <ARRAY>
|
||||
* 2: Marker end pos <ARRAY>
|
||||
* 3: Color index <NUMBER>
|
||||
*
|
||||
* Return value:
|
||||
* Return
|
||||
* None
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
_name = _this select 0;
|
||||
_startPos = _this select 1;
|
||||
_difPos = (_this select 2) vectorDiff _startPos ;
|
||||
_color = _this select 3;
|
||||
_name = _this select 0;
|
||||
_startPos = _this select 1;
|
||||
_difPos = (_this select 2) vectorDiff _startPos ;
|
||||
_color = _this select 3;
|
||||
|
||||
_name setMarkerShapeLocal "RECTANGLE";
|
||||
_name setMarkerAlphaLocal 1;
|
||||
@ -26,9 +24,9 @@ _name setMarkerColorLocal GVAR(drawing_drawColor);
|
||||
_name setMarkerPosLocal (_startPos vectorAdd (_difPos vectorMultiply 0.5));
|
||||
_mag = vectorMagnitude _difPos;
|
||||
if (_mag > 0) then {
|
||||
_name setMarkerSizeLocal [5, _mag / 2];
|
||||
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
|
||||
_name setMarkerSizeLocal [5, _mag / 2];
|
||||
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
|
||||
} else {
|
||||
_name setMarkerSizeLocal [5, 5];
|
||||
_name setMarkerDirLocal 0;
|
||||
_name setMarkerSizeLocal [5, 5];
|
||||
_name setMarkerDirLocal 0;
|
||||
};
|
||||
|
@ -1,73 +1,46 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
*
|
||||
* Update the map tool markers, position, size, rotation and visibility.
|
||||
*
|
||||
* Argument:
|
||||
* None
|
||||
* Arguments:
|
||||
* 0: The Map <CONTROL>
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define TEXTURE_WIDTH_IN_M 6205
|
||||
#define CENTER_OFFSET_Y_PERC 0.1606
|
||||
#define CONSTANT_SCALE 0.2
|
||||
|
||||
// If markers exist and they should'nt, delete them
|
||||
if (!("ACE_MapTools" in items ACE_player) || {GVAR(mapTool_Shown) == 0}) then {
|
||||
// If markers exist, delete them
|
||||
if (!isNil QGVAR(mapTool_markerRotatingFixed)) then {
|
||||
deleteMarkerLocal MARKERNAME_MAPTOOL_FIXED;
|
||||
GVAR(mapTool_markerRotatingFixed) = nil;
|
||||
};
|
||||
};
|
||||
if (!("ACE_MapTools" in items ACE_player) || {GVAR(mapTool_Shown) != 1}) then {
|
||||
if (!isNil QGVAR(mapTool_markerRotatingNormal)) then {
|
||||
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGNORMAL;
|
||||
GVAR(mapTool_markerRotatingNormal) = nil;
|
||||
};
|
||||
};
|
||||
if (!("ACE_MapTools" in items ACE_player) || {GVAR(mapTool_Shown) != 2}) then {
|
||||
if (!isNil QGVAR(mapTool_markerRotatingSmall)) then {
|
||||
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGSMALL;
|
||||
GVAR(mapTool_markerRotatingSmall) = nil;
|
||||
};
|
||||
};
|
||||
PARAMS_1(_theMap);
|
||||
|
||||
if (!("ACE_MapTools" in items ACE_player)|| {GVAR(mapTool_Shown) == 0}) exitWith {};
|
||||
|
||||
// If markers don't exist and should, create them
|
||||
if (isNil QGVAR(mapTool_markerRotatingFixed)) then {
|
||||
GVAR(mapTool_markerRotatingFixed) = createMarkerLocal [MARKERNAME_MAPTOOL_FIXED, GVAR(mapTool_pos)];
|
||||
MARKERNAME_MAPTOOL_FIXED setMarkerType MARKERNAME_MAPTOOL_FIXED;
|
||||
_rotatingTexture = "";
|
||||
_textureWidth = 0;
|
||||
if (GVAR(mapTool_Shown) == 1) then {
|
||||
_rotatingTexture = QUOTE(PATHTOF(data\mapToolRotatingNormal.paa));
|
||||
_textureWidth = TEXTURE_WIDTH_IN_M;
|
||||
} else {
|
||||
_rotatingTexture = QUOTE(PATHTOF(data\mapToolRotatingSmall.paa));
|
||||
_textureWidth = TEXTURE_WIDTH_IN_M / 2;
|
||||
};
|
||||
if ((isNil QGVAR(mapTool_markerRotatingNormal)) && {GVAR(mapTool_Shown) == 1}) then {
|
||||
GVAR(mapTool_markerRotatingNormal) = createMarkerLocal [MARKERNAME_MAPTOOL_ROTATINGNORMAL, GVAR(mapTool_pos)];
|
||||
MARKERNAME_MAPTOOL_ROTATINGNORMAL setMarkerType MARKERNAME_MAPTOOL_ROTATINGNORMAL;
|
||||
};
|
||||
if ((isNil QGVAR(mapTool_markerRotatingSmall)) && {GVAR(mapTool_Shown) == 2}) then {
|
||||
GVAR(mapTool_markerRotatingSmall) = createMarkerLocal [MARKERNAME_MAPTOOL_ROTATINGSMALL, GVAR(mapTool_pos)];
|
||||
MARKERNAME_MAPTOOL_ROTATINGSMALL setMarkerType MARKERNAME_MAPTOOL_ROTATINGSMALL;
|
||||
};
|
||||
|
||||
_rotatingMarker = [MARKERNAME_MAPTOOL_ROTATINGNORMAL, MARKERNAME_MAPTOOL_ROTATINGSMALL] select (GVAR(mapTool_Shown) - 1);
|
||||
_textureWidth = [TEXTURE_WIDTH_IN_M, TEXTURE_WIDTH_IN_M / 2] select (GVAR(mapTool_Shown) - 1);
|
||||
|
||||
// Update scale of both parts
|
||||
_scale = _textureWidth * CONSTANT_SCALE * (call FUNC(calculateMapScale));
|
||||
MARKERNAME_MAPTOOL_FIXED setMarkerSizeLocal [_scale,_scale];
|
||||
_rotatingMarker setMarkerSizeLocal [_scale,_scale];
|
||||
_scale = _textureWidth * CONSTANT_SCALE * (call FUNC(calculateMapScale));
|
||||
|
||||
// Position of the fixed part
|
||||
_xPos = GVAR(mapTool_pos) select 0;
|
||||
_yPos = (GVAR(mapTool_pos) select 1) + _textureWidth * CENTER_OFFSET_Y_PERC;
|
||||
MARKERNAME_MAPTOOL_FIXED setMarkerPosLocal [_xPos,_yPos];
|
||||
|
||||
_theMap drawIcon [QUOTE(PATHTOF(data\mapToolFixed.paa)), [1,1,1,1], [_xPos,_yPos], (32 * _scale), (32 * _scale), 0, "", 0];
|
||||
|
||||
// Position and rotation of the rotating part
|
||||
_xPos = (GVAR(mapTool_pos) select 0) + sin(GVAR(mapTool_angle)) * _textureWidth * CENTER_OFFSET_Y_PERC;
|
||||
_yPos = (GVAR(mapTool_pos) select 1) + cos(GVAR(mapTool_angle)) * _textureWidth * CENTER_OFFSET_Y_PERC;
|
||||
_rotatingMarker setMarkerPosLocal [_xPos,_yPos];
|
||||
_rotatingMarker setMarkerDirLocal GVAR(mapTool_angle);
|
||||
|
||||
_theMap drawIcon [_rotatingTexture, [1,1,1,1], [_xPos,_yPos], (32 * _scale), (32 * _scale), GVAR(mapTool_angle), "", 0];
|
||||
|
@ -10,8 +10,3 @@
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
|
||||
|
||||
#define MARKERNAME_MAPTOOL_FIXED "ACE_MapToolFixed"
|
||||
#define MARKERNAME_MAPTOOL_ROTATINGNORMAL "ACE_MapToolRotatingNormal"
|
||||
#define MARKERNAME_MAPTOOL_ROTATINGSMALL "ACE_MapToolRotatingSmall"
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
class RscPicture;
|
||||
class RscText;
|
||||
class RscStructuredText;
|
||||
@ -13,91 +12,34 @@ class RscXSliderH;
|
||||
class RscDisplayInsertMarker {
|
||||
onLoad = QUOTE(_this call DFUNC(initInsertMarker););
|
||||
onUnload = QUOTE(_this call DFUNC(placeMarker););
|
||||
idd = 54;
|
||||
// idd = 54;
|
||||
movingEnable = 1;
|
||||
class controlsBackground {
|
||||
class RscText_1000: RscText {
|
||||
idc = 1000;
|
||||
/*x = "0 * GUI_GRID_INSERTMARKER_W + GUI_GRID_INSERTMARKER_X";
|
||||
y = "0 * GUI_GRID_INSERTMARKER_H + GUI_GRID_INSERTMARKER_Y";
|
||||
w = "8 * GUI_GRID_INSERTMARKER_W";
|
||||
h = "2.5 * GUI_GRID_INSERTMARKER_H";
|
||||
colorBackground[] = {0,0,0,0.5};*/
|
||||
};
|
||||
class Description: RscStructuredText {
|
||||
colorBackground[] = {0,0,0,0.7};
|
||||
idc = 1100;
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "9.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};
|
||||
// class RscText_1000: RscText {idc = 1000;};
|
||||
};
|
||||
class controls {
|
||||
//delete ButtonOK;
|
||||
class ButtonMenuOK: RscButtonMenuOK {
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "15.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "8.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
// size = "0.85 * ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
|
||||
// sizeEx = "0.85 * ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
|
||||
text = "";
|
||||
// class ButtonMenuOK: RscButtonMenuOK {idc = 1;};
|
||||
// class ButtonMenuCancel: RscButtonMenuCancel {idc = 2;};
|
||||
// class Title: RscText {idc = 1001;};
|
||||
// class Description: RscStructuredText {idc = 1100;};
|
||||
// class DescriptionChannel: RscStructuredText {idc = 1101;};
|
||||
// class MarkerPicture: RscPicture {idc = 102;};
|
||||
// class MarkerText: RscEdit {idc = 101;};
|
||||
// class MarkerChannel: RscCombo {idc = 103;};
|
||||
|
||||
class MarkerShape: RscCombo {
|
||||
idc = 1210;
|
||||
};
|
||||
class ButtonMenuCancel: RscButtonMenuCancel {
|
||||
x = "23 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "15.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "1.1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
|
||||
text = "X";
|
||||
colorBackground[] = {0.75,0,0,0.5};
|
||||
colorBackgroundFocused[] = {0.75,0,0,0.5};
|
||||
colorBackground2[] = {1,0,0,0.5};
|
||||
class MarkerColor: RscCombo {
|
||||
idc = 1211;
|
||||
};
|
||||
/*class ButtonMenuInfo: RscButtonMenu {
|
||||
idc = 2400;
|
||||
text = "$STR_A3_RscDisplayInsertMarker_ButtonMenuInfo";
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};*/
|
||||
delete ButtonMenuInfo;
|
||||
class Title: RscText {
|
||||
moving = 1;
|
||||
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"};
|
||||
idc = 1001;
|
||||
text = "$STR_A3_RscDisplayInsertMarker_Title";
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "8.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
class MarkerAngle: RscXSliderH {
|
||||
idc = 1220;
|
||||
};
|
||||
delete Description;
|
||||
/*class Info: RscStructuredText {
|
||||
colorBackground[] = {0,0,0,0.7};
|
||||
idc = 1101;
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};*/
|
||||
delete Info;
|
||||
class Picture: RscPicture {
|
||||
idc = 102;
|
||||
x = 0.259984;
|
||||
y = 0.4;
|
||||
w = 0.05;
|
||||
h = 0.0666667;
|
||||
};
|
||||
class Text: RscEdit {
|
||||
idc = 101;
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "10.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
class MarkerAngleText: RscText {
|
||||
idc = 1221;
|
||||
};
|
||||
|
||||
/*class SizeX: RscEdit {
|
||||
idc = 1200;
|
||||
text = "10";
|
||||
@ -114,34 +56,5 @@ class RscDisplayInsertMarker {
|
||||
w = "5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};*/
|
||||
class MarkerShape: RscCombo {
|
||||
idc = 1210;
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};
|
||||
class MarkerColor: RscCombo {
|
||||
idc = 1211;
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "12.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};
|
||||
class MarkerAngle: RscXSliderH {
|
||||
idc = 1220;
|
||||
text = "10";
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};
|
||||
class MarkerAngleText: RscText {
|
||||
idc = 1221;
|
||||
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
|
||||
y = "14.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
|
||||
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
|
||||
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -11,6 +11,12 @@
|
||||
if (isMultiplayer && {!isServer} && {hasInterface}) then {
|
||||
private "_logic";
|
||||
_logic = createGroup sideLogic createUnit ["Logic", [0,0,0], [], 0, "NONE"];
|
||||
|
||||
[QGVAR(sendMarkersJIP), _logic] call EFUNC(common,serverEvent);
|
||||
[QGVAR(sendMarkersJIP), [_logic]] call EFUNC(common,serverEvent);
|
||||
};
|
||||
|
||||
|
||||
GVAR(mapDisplaysWithDrawEHs) = [];
|
||||
GVAR(currentMarkerPosition) = [];
|
||||
GVAR(currentMarkerAngle) = 0;
|
||||
GVAR(currentMarkerColorConfigName) = "";
|
||||
GVAR(currentMarkerConfigName) = "";
|
@ -3,6 +3,7 @@
|
||||
ADDON = false;
|
||||
|
||||
PREP(initInsertMarker);
|
||||
PREP(mapDrawEH);
|
||||
PREP(onLBSelChangedColor);
|
||||
PREP(onLBSelChangedShape);
|
||||
PREP(onSliderPosChangedAngle);
|
||||
@ -14,25 +15,15 @@ PREP(setMarkerNetwork);
|
||||
// init marker types
|
||||
if (isNil QGVAR(MarkersCache)) then {
|
||||
_config = configfile >> "CfgMarkers";
|
||||
_index = 0;
|
||||
|
||||
GVAR(MarkersCache) = [];
|
||||
|
||||
for "_a" from 0 to (count _config - 1) do {
|
||||
_marker = _config select _a;
|
||||
|
||||
_scope = getNumber (_marker >> "scope");
|
||||
_name = getText (_marker >> "name");
|
||||
_icon = getText (_marker >> "icon");
|
||||
|
||||
if (_scope == 2) then {
|
||||
_shape lbAdd _name;
|
||||
_shape lbSetValue [_index, _a];
|
||||
_shape lbSetPicture [_index, _icon];
|
||||
|
||||
_name = getText (_marker >> "name");
|
||||
_icon = getText (_marker >> "icon");
|
||||
GVAR(MarkersCache) pushBack [_name, _a, _icon];
|
||||
|
||||
_index = _index + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -40,39 +31,27 @@ if (isNil QGVAR(MarkersCache)) then {
|
||||
// init marker colors
|
||||
if (isNil QGVAR(MarkerColorsCache)) then {
|
||||
_config = configfile >> "CfgMarkerColors";
|
||||
_index = 0;
|
||||
|
||||
GVAR(MarkerColorsCache) = [];
|
||||
|
||||
for "_a" from 0 to (count _config - 1) do {
|
||||
_marker = _config select _a;
|
||||
|
||||
_scope = getNumber (_marker >> "scope");
|
||||
_name = getText (_marker >> "name");
|
||||
|
||||
if (_scope == 2) then {
|
||||
_color lbAdd _name;
|
||||
_color lbSetValue [_index, _a];
|
||||
|
||||
_name = getText (_marker >> "name");
|
||||
_rgba = getArray (_marker >> "color");
|
||||
|
||||
{
|
||||
if (typeName _x != "SCALAR") then {
|
||||
_rgba set [_forEachIndex, call compile _x];
|
||||
};
|
||||
} forEach _rgba;
|
||||
|
||||
_icon = format ["#(argb,8,8,3)color(%1,%2,%3,%4)", _rgba select 0, _rgba select 1, _rgba select 2, _rgba select 3];
|
||||
|
||||
_color lbSetPicture [_index, _icon];
|
||||
|
||||
GVAR(MarkerColorsCache) pushBack [_name, _a, _icon];
|
||||
|
||||
_index = _index + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
//Server Sync JIP markers:
|
||||
[QGVAR(sendMarkersJIP), FUNC(sendMarkersJIP)] call EFUNC(common,addEventHandler);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -1,87 +1,84 @@
|
||||
// stuff taken from bohemia, edited by commy2
|
||||
/*
|
||||
* Author: BIS, commy2
|
||||
* Sets up the marker placement
|
||||
* Run instead of \a3\ui_f\scripts\GUI\RscDisplayInsertMarker.sqf
|
||||
*
|
||||
* Arguments:
|
||||
* 0: RscDisplayInsertMarker <DISPLAY>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [onLoad] call ace_markers_fnc_initInsertMarker;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define BORDER 0.005
|
||||
|
||||
[{
|
||||
disableserialization;
|
||||
_display = _this select 0;
|
||||
PARAMS_1(_display);
|
||||
|
||||
//Prevent Captive Players from placing markers
|
||||
/*if (ACE_player getVariable ["ACE_isCaptive", false]) exitWith {
|
||||
//Can't place markers when can't interact
|
||||
if (!([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith))) exitWith {
|
||||
_display closeDisplay 2; //emulate "Cancel" button
|
||||
};*/
|
||||
|
||||
// prevent vanilla key input
|
||||
_display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}];
|
||||
};
|
||||
|
||||
//BIS Controls:
|
||||
_text = _display displayctrl 101;
|
||||
_picture = _display displayctrl 102;
|
||||
_channel = _display displayctrl 103;
|
||||
_buttonOK = _display displayctrl 1;
|
||||
_buttonCancel = _display displayctrl 2;
|
||||
_description = _display displayctrl 1100;
|
||||
_title = _display displayctrl 1001;
|
||||
_sizeX = _display displayctrl 1200;
|
||||
_sizeY = _display displayctrl 1201;
|
||||
_shape = _display displayctrl 1210;
|
||||
_color = _display displayctrl 1211;
|
||||
_angle = _display displayctrl 1220;
|
||||
_angleText = _display displayctrl 1221;
|
||||
_descriptionChannel = _display displayctrl 1101;
|
||||
|
||||
//ACE Controls:
|
||||
// _sizeX = _display displayctrl 1200;
|
||||
// _sizeY = _display displayctrl 1201;
|
||||
_aceShapeLB = _display displayctrl 1210;
|
||||
_aceColorLB = _display displayctrl 1211;
|
||||
_aceAngleSlider = _display displayctrl 1220;
|
||||
_aceAngleSliderText = _display displayctrl 1221;
|
||||
|
||||
|
||||
//Install MapDrawEH on current map
|
||||
_mapIDD = -1;
|
||||
{
|
||||
if (!isNull (findDisplay _x)) exitWith {_mapIDD = _x};
|
||||
} forEach [12, 37, 52, 53, 160];
|
||||
if (_mapIDD == -1) exitWith {ERROR("No Map?");};
|
||||
if (!(_mapIDD in GVAR(mapDisplaysWithDrawEHs))) then {
|
||||
GVAR(mapDisplaysWithDrawEHs) pushBack _mapIDD;
|
||||
((finddisplay _mapIDD) displayctrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(mapDrawEH)}];
|
||||
};
|
||||
|
||||
//Calculate center position of the marker placement ctrl
|
||||
_pos = ctrlPosition _picture;
|
||||
_pos = [(_pos select 0) + (_pos select 2) / 2, (_pos select 1) + (_pos select 3) / 2];
|
||||
GVAR(currentMarkerPosition) = ((findDisplay _mapIDD) displayCtrl 51) ctrlMapScreenToWorld _pos;
|
||||
|
||||
//Hide the bis picture:
|
||||
_picture ctrlShow false;
|
||||
|
||||
// prevent vanilla key input
|
||||
_display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}];
|
||||
|
||||
|
||||
//Focus on the text input
|
||||
ctrlSetFocus _text;
|
||||
|
||||
//Change ok button's text based on current channel
|
||||
[{
|
||||
EXPLODE_2_PVT(_this,_params,_pfhId);
|
||||
EXPLODE_1_PVT(_params,_buttonOK);
|
||||
|
||||
if (isNull _buttonOK) exitWith {
|
||||
[_pfhId] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
_channel = "";
|
||||
_textColor = [1,1,1,1];
|
||||
switch (call EFUNC(common,currentChannel)) do {
|
||||
case ("global"): {
|
||||
_channel = localize "str_channel_global";
|
||||
_textColor = [(216/255),(216/255),(216/255),1];
|
||||
};
|
||||
case ("side"): {
|
||||
_channel = localize "str_channel_side";
|
||||
_textColor = [(70/255),(211/255),(252/255),1];
|
||||
};
|
||||
case ("group"): {
|
||||
_channel = localize "str_channel_group";
|
||||
_textColor = [(181/255),(248/255),(98/255),1];
|
||||
};
|
||||
case ("vehicle"): {
|
||||
_channel = localize "str_channel_vehicle";
|
||||
_textColor = [(255/255),(208/255),(0/255),1];
|
||||
};
|
||||
case ("direct"): {
|
||||
_channel = localize "str_channel_direct";
|
||||
_textColor = [(255/255),(255/255),(255/255),1];
|
||||
};
|
||||
case ("command"): {
|
||||
_channel = localize "str_channel_command";
|
||||
_textColor = [(255/255),(255/255),(70/255),1];
|
||||
};
|
||||
};
|
||||
|
||||
//If localization not found, then don't touch anything (default is RscButtonMenuOK's localized text)
|
||||
if (_channel != "") then {
|
||||
_buttonOK ctrlSetTextColor _textColor;
|
||||
_buttonOK ctrlSetText format [localize "STR_ACE_Markers_PlaceIn", _channel];
|
||||
};
|
||||
}, 0, [_buttonOK]] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
//--- Background
|
||||
_pos = ctrlposition _text;
|
||||
_posX = (_pos select 0) + 0.01;
|
||||
_posY = _pos select 1;
|
||||
_posW = _pos select 2;
|
||||
_posH = _pos select 3;
|
||||
_posY = _posY min ((safeZoneH + safeZoneY) - (6 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen
|
||||
_posY = _posY min ((safeZoneH + safeZoneY) - (8 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen
|
||||
_pos set [0,_posX];
|
||||
_pos set [1,_posY];
|
||||
_text ctrlsetposition _pos;
|
||||
@ -96,46 +93,67 @@
|
||||
//--- Description
|
||||
_pos set [1,_posY - 1*_posH];
|
||||
_pos set [3,6*_posH + 6 * BORDER];
|
||||
_description ctrlenable false;
|
||||
_description ctrlsetposition _pos;
|
||||
_description ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>","Description:"]; //--- ToDo: Localze
|
||||
_description ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>", (localize "str_lib_label_description")];
|
||||
_description ctrlcommit 0;
|
||||
|
||||
_activeColor = (["IGUI","WARNING_RGB"] call bis_fnc_displaycolorget) call bis_fnc_colorRGBtoHTML;
|
||||
|
||||
//--- Shape
|
||||
_pos set [1,_posY + 1 * _posH + 2 * BORDER];
|
||||
_pos set [2,_posW];
|
||||
_pos set [3,_posH];
|
||||
_shape ctrlsetposition _pos;
|
||||
_shape ctrlcommit 0;
|
||||
_aceShapeLB ctrlsetposition _pos;
|
||||
_aceShapeLB ctrlcommit 0;
|
||||
|
||||
//--- Color
|
||||
_pos set [1,_posY + 2 * _posH + 3 * BORDER];
|
||||
_pos set [2,_posW];
|
||||
_color ctrlsetposition _pos;
|
||||
_color ctrlcommit 0;
|
||||
_aceColorLB ctrlsetposition _pos;
|
||||
_aceColorLB ctrlcommit 0;
|
||||
|
||||
//--- Angle
|
||||
_pos set [1,_posY + 3 * _posH + 4 * BORDER];
|
||||
_pos set [2,_posW];
|
||||
_angle ctrlsetposition _pos;
|
||||
_angle ctrlcommit 0;
|
||||
_aceAngleSlider ctrlsetposition _pos;
|
||||
_aceAngleSlider ctrlcommit 0;
|
||||
|
||||
//--- Angle Text
|
||||
_pos set [1,_posY + 4 * _posH + 5 * BORDER];
|
||||
_pos set [2,_posW];
|
||||
_angleText ctrlsetposition _pos;
|
||||
_angleText ctrlcommit 0;
|
||||
_aceAngleSliderText ctrlsetposition _pos;
|
||||
_aceAngleSliderText ctrlcommit 0;
|
||||
|
||||
_offsetButtons = 0;
|
||||
if (isMultiplayer) then {
|
||||
_pos set [1,_posY + 5 * _posH + 7 * BORDER];
|
||||
_pos set [3,_posH];
|
||||
_descriptionChannel ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>", (localize "str_a3_cfgvehicles_modulerespawnposition_f_arguments_marker_0") + ":"];
|
||||
_descriptionChannel ctrlsetposition _pos;
|
||||
_descriptionChannel ctrlcommit 0;
|
||||
|
||||
_pos set [1,_posY + 6 * _posH + 7 * BORDER];
|
||||
_pos set [3,_posH];
|
||||
_channel ctrlsetposition _pos;
|
||||
_channel ctrlcommit 0;
|
||||
_offsetButtons = 7 * _posH + 8 * BORDER;
|
||||
} else {
|
||||
_descriptionChannel ctrlshow false;
|
||||
_channel ctrlshow false;
|
||||
_offsetButtons = 5 * _posH + 7 * BORDER;
|
||||
};
|
||||
|
||||
//--- ButtonOK
|
||||
_pos set [1,_posY + 5 * _posH + 7 * BORDER];
|
||||
_pos set [2,_posW * (8.9/10) - BORDER];
|
||||
_pos set [1,_posY + _offsetButtons];
|
||||
_pos set [2,_posW / 2 - BORDER];
|
||||
_pos set [3,_posH];
|
||||
_buttonOk ctrlsetposition _pos;
|
||||
_buttonOk ctrlcommit 0;
|
||||
|
||||
//--- ButtonCancel
|
||||
_pos set [0,_posX + _posW * (8.9 / 10)];
|
||||
_pos set [2,_posW * (1.1 / 10)];
|
||||
_pos set [0,_posX + _posW / 2];
|
||||
_pos set [1,_posY + _offsetButtons];
|
||||
_pos set [2,_posW / 2];
|
||||
_pos set [3,_posH];
|
||||
_buttonCancel ctrlsetposition _pos;
|
||||
_buttonCancel ctrlcommit 0;
|
||||
|
||||
@ -151,56 +169,41 @@
|
||||
|
||||
|
||||
// init marker shape lb
|
||||
lbClear _aceShapeLB;
|
||||
{
|
||||
_shape lbAdd (_x select 0);
|
||||
_shape lbSetValue [_forEachIndex, _x select 1];
|
||||
_shape lbSetPicture [_forEachIndex, _x select 2];
|
||||
_aceShapeLB lbAdd (_x select 0);
|
||||
_aceShapeLB lbSetValue [_forEachIndex, _x select 1];
|
||||
_aceShapeLB lbSetPicture [_forEachIndex, _x select 2];
|
||||
} forEach GVAR(MarkersCache);
|
||||
|
||||
_shape ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedShape)}];
|
||||
|
||||
_curSelShape = GETGVAR(curSelMarkerShape,0);
|
||||
_shape lbSetCurSel _curSelShape;
|
||||
_data = _shape lbValue _curSelShape;
|
||||
_config = (configfile >> "CfgMarkers") select _data;
|
||||
_icon = getText (_config >> "icon");
|
||||
_picture ctrlSetText _icon;
|
||||
_aceShapeLB lbSetCurSel _curSelShape;
|
||||
|
||||
//Update now and add eventHandler:
|
||||
[_aceShapeLB, _curSelShape] call FUNC(onLBSelChangedShape);
|
||||
_aceShapeLB ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedShape)}];
|
||||
|
||||
|
||||
// init marker color lb
|
||||
lbClear _aceColorLB;
|
||||
{
|
||||
_color lbAdd (_x select 0);
|
||||
_color lbSetValue [_forEachIndex, _x select 1];
|
||||
_color lbSetPicture [_forEachIndex, _x select 2];
|
||||
_aceColorLB lbAdd (_x select 0);
|
||||
_aceColorLB lbSetValue [_forEachIndex, _x select 1];
|
||||
_aceColorLB lbSetPicture [_forEachIndex, _x select 2];
|
||||
} forEach GVAR(MarkerColorsCache);
|
||||
|
||||
_color ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedColor)}];
|
||||
|
||||
_curSelColor = GETGVAR(curSelMarkerColor,0);
|
||||
_color lbSetCurSel _curSelColor;
|
||||
_data = _color lbValue _curSelColor;
|
||||
_config = (configfile >> "CfgMarkerColors") select _data;
|
||||
_rgba = getArray (_config >> "color");
|
||||
{
|
||||
if (typeName _x != "SCALAR") then {
|
||||
_rgba set [_forEachIndex, call compile _x];
|
||||
};
|
||||
} forEach _rgba;
|
||||
_picture ctrlSetTextColor _rgba;
|
||||
_aceColorLB lbSetCurSel _curSelColor;
|
||||
|
||||
//Update now and add eventHandler:
|
||||
[_aceColorLB, _curSelColor] call FUNC(onLBSelChangedColor);
|
||||
_aceColorLB ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedColor)}];
|
||||
|
||||
|
||||
// init marker angle slider
|
||||
_angle sliderSetRange [-180, 180];
|
||||
_angle ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedAngle)}];
|
||||
|
||||
_curSelAngle = GETGVAR(curSelMarkerAngle,0);
|
||||
_angle sliderSetPosition _curSelAngle;
|
||||
|
||||
_curSelAngle = round _curSelAngle;
|
||||
if (_curSelAngle < 0) then {
|
||||
_curSelAngle = _curSelAngle + 360;
|
||||
};
|
||||
|
||||
_angleText ctrlSetText format [localize "STR_ACE_Markers_MarkerDirection", _curSelAngle];
|
||||
_aceAngleSlider sliderSetRange [-180, 180];
|
||||
_curSelAngle = GETGVAR(currentMarkerAngle,0);
|
||||
_aceAngleSlider sliderSetPosition _curSelAngle;
|
||||
//Update now and add eventHandler:
|
||||
[_aceAngleSlider, _curSelAngle] call FUNC(onSliderPosChangedAngle);
|
||||
_aceAngleSlider ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedAngle)}];
|
||||
|
||||
}, _this] call EFUNC(common,execNextFrame);
|
||||
|
45
addons/markers/functions/fnc_mapDrawEH.sqf
Normal file
45
addons/markers/functions/fnc_mapDrawEH.sqf
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Draws the current temp marker. Allows rotation.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: TheMap <Control>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [theMapControl] call ace_markers_fnc_mapDrawEH;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_theMap", "_sizeX", "_sizeY", "_textureConfig", "_texture", "_markerSize", "_markerShadow", "_colorConfig", "_drawColor"];
|
||||
|
||||
PARAMS_1(_theMap);
|
||||
|
||||
//Only show if marker place is open:
|
||||
if (isNull (findDisplay 54)) exitWith {};
|
||||
//Error checking:
|
||||
if ((GVAR(currentMarkerConfigName) == "") || {GVAR(currentMarkerColorConfigName) == ""} || {GVAR(currentMarkerPosition) isEqualTo []}) exitWith {ERROR("Bad Data");};
|
||||
|
||||
_sizeX = 1;
|
||||
_sizeY = 1;
|
||||
|
||||
_textureConfig = configFile >> "CfgMarkers" >> GVAR(currentMarkerConfigName);
|
||||
_texture = getText (_textureConfig >> "icon");
|
||||
_markerSize = getNumber (_textureConfig >> "size");
|
||||
_markerShadow = getNumber (_textureConfig >> "shadow");
|
||||
_colorConfig = (configFile >> "CfgMarkerColors" >> GVAR(currentMarkerColorConfigName));
|
||||
_drawColor = getArray (_colorConfig >> "color");
|
||||
|
||||
//Convert possible code into numbers
|
||||
{
|
||||
if (typeName _x == "STRING") then {
|
||||
_drawColor set [_forEachIndex, (call compile _x)];
|
||||
};
|
||||
} forEach _drawColor;
|
||||
_drawColor set [3, ((_drawColor select 3) * 0.875)]; //Arma adds a slight transparency
|
||||
|
||||
_theMap drawIcon [_texture, _drawColor, GVAR(currentMarkerPosition), (_sizeX * _markerSize), (_sizeY * _markerSize), GVAR(currentMarkerAngle), "", _markerShadow];
|
@ -1,23 +1,28 @@
|
||||
// by commy2
|
||||
/*
|
||||
* Author: commy2
|
||||
* When the color list box is changed.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Color ListBox (idc 1211) <CONTROL>
|
||||
* 1: Selected Index <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [ColorLB, 5] call ace_markers_fnc_onLBSelChangedColor;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ctrl", "_data", "_config", "_color"];
|
||||
private ["_data", "_config"];
|
||||
|
||||
_ctrl = _this select 0;
|
||||
_data = _ctrl lbValue (_this select 1);
|
||||
PARAMS_2(_ctrl,_index);
|
||||
_data = _ctrl lbValue _index;
|
||||
|
||||
GVAR(curSelMarkerColor) = _this select 1;
|
||||
GVAR(curSelMarkerColor) = _index;
|
||||
|
||||
_config = (configfile >> "CfgMarkerColors") select _data;
|
||||
|
||||
_color = getArray (_config >> "color");
|
||||
|
||||
{
|
||||
if (typeName _x != "SCALAR") then {
|
||||
_color set [_forEachIndex, call compile _x];
|
||||
};
|
||||
} forEach _color;
|
||||
|
||||
((ctrlParent _ctrl) displayCtrl 102) ctrlSetTextColor _color;
|
||||
|
||||
GVAR(currentMarkerColorConfigName) = (configName _config);
|
||||
|
@ -1,17 +1,28 @@
|
||||
// by commy2
|
||||
/*
|
||||
* Author: commy2
|
||||
* When the shape list box is changed.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Shape ListBox (idc 1210) <CONTROL>
|
||||
* 1: Selected Index <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [ColorLB, 5] call ace_markers_fnc_onLBSelChangedShape;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ctrl", "_data", "_config", "_icon"];
|
||||
private ["_data", "_config"];
|
||||
|
||||
_ctrl = _this select 0;
|
||||
_data = _ctrl lbValue (_this select 1);
|
||||
PARAMS_2(_ctrl,_index);
|
||||
_data = _ctrl lbValue _index;
|
||||
|
||||
GVAR(curSelMarkerShape) = _this select 1;
|
||||
GVAR(curSelMarkerShape) = _index;
|
||||
|
||||
_config = (configfile >> "CfgMarkers") select _data;
|
||||
|
||||
_icon = getText (_config >> "icon");
|
||||
|
||||
((ctrlParent _ctrl) displayCtrl 102) ctrlSetText _icon;
|
||||
|
||||
GVAR(currentMarkerConfigName) = (configName _config);
|
||||
|
@ -1,12 +1,24 @@
|
||||
// by commy2
|
||||
/*
|
||||
* Author: commy2
|
||||
* Angle Slider Pos changed
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Slider (idc 1210) <CONTROL>
|
||||
* 1: Slider Data (angle: -180..180) <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [Slider, 2] call ace_markers_fnc_onSliderPosChangedAngle;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ctrl", "_data", "_direction"];
|
||||
private ["_direction"];
|
||||
|
||||
_ctrl = _this select 0;
|
||||
_data = _this select 1;
|
||||
|
||||
GVAR(curSelMarkerAngle) = _data;
|
||||
PARAMS_2(_ctrl,_data);
|
||||
|
||||
_direction = round _data;
|
||||
if (_direction < 0) then {
|
||||
|
@ -1,46 +1,36 @@
|
||||
// by commy2
|
||||
/*
|
||||
* Author: commy2
|
||||
* MarkerPlacement closed
|
||||
*
|
||||
* Arguments:
|
||||
* 0: RscDisplayInsertMarker <DISPLAY>
|
||||
* 1: CloseNumber (1 = ButtonOk) <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [onUnloadEvent] call ace_markers_fnc_placeMarker;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (_this select 1 == 1) then {
|
||||
disableserialization;
|
||||
_display = _this select 0;
|
||||
disableserialization;
|
||||
PARAMS_2(_display,_closeNum);
|
||||
|
||||
_pos = ctrlPosition (_display displayCtrl 102);
|
||||
_pos = [
|
||||
(_pos select 0) + (_pos select 2) / 2,
|
||||
(_pos select 1) + (_pos select 3) / 2
|
||||
];
|
||||
|
||||
switch (true) do {
|
||||
case (!isNull findDisplay 12): {
|
||||
_pos = (findDisplay 12 displayCtrl 51) ctrlMapScreenToWorld _pos;
|
||||
};
|
||||
case (!isNull findDisplay 37): {
|
||||
_pos = (findDisplay 37 displayCtrl 51) ctrlMapScreenToWorld _pos;
|
||||
};
|
||||
case (!isNull findDisplay 52): {
|
||||
_pos = (findDisplay 52 displayCtrl 51) ctrlMapScreenToWorld _pos;
|
||||
};
|
||||
case (!isNull findDisplay 53): {
|
||||
_pos = (findDisplay 53 displayCtrl 51) ctrlMapScreenToWorld _pos;
|
||||
};
|
||||
};
|
||||
if (_closeNum == 1) then {
|
||||
|
||||
// set and send marker data the next frame. the actual marker isn't created yet
|
||||
[
|
||||
{
|
||||
|
||||
[QGVAR(setMarkerNetwork), [
|
||||
allMapMarkers select (count allMapMarkers - 1), [
|
||||
GETGVAR(currentMarkerConfigName,""),
|
||||
GETGVAR(currentMarkerColorConfigName,""),
|
||||
_this,
|
||||
GETGVAR(currentMarkerAngle,0)
|
||||
]
|
||||
]] call EFUNC(common,globalEvent);
|
||||
|
||||
},
|
||||
_pos
|
||||
] call EFUNC(common,execNextFrame);
|
||||
[{
|
||||
[QGVAR(setMarkerNetwork), [
|
||||
allMapMarkers select (count allMapMarkers - 1), [
|
||||
GETGVAR(currentMarkerConfigName,""),
|
||||
GETGVAR(currentMarkerColorConfigName,""),
|
||||
GETGVAR(currentMarkerPosition,[]),
|
||||
GETGVAR(currentMarkerAngle,0)
|
||||
]
|
||||
]] call EFUNC(common,globalEvent);
|
||||
|
||||
}, []] call EFUNC(common,execNextFrame);
|
||||
};
|
||||
|
@ -1,13 +1,25 @@
|
||||
// by commy2
|
||||
/*
|
||||
* Author: commy2
|
||||
* Server: Recives a dummy logic, sends marker data back to the owner.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Logic <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [onUnloadEvent] call ace_markers_fnc_sendMarkerJIP;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private "_logic";
|
||||
PARAMS_1(_logic);
|
||||
|
||||
_logic = _this;
|
||||
|
||||
[QGVAR(setMarkerJIP), _logic, [
|
||||
GETGVAR(allMapMarkers,[]),
|
||||
GETGVAR(allMapMarkersProperties,[]),
|
||||
_logic
|
||||
]
|
||||
[QGVAR(setMarkerJIP), [_logic], [
|
||||
GETGVAR(allMapMarkers,[]),
|
||||
GETGVAR(allMapMarkersProperties,[]),
|
||||
_logic
|
||||
]
|
||||
] call EFUNC(common,targetEvent);
|
||||
|
@ -1,35 +1,49 @@
|
||||
// by commy2
|
||||
/*
|
||||
* Author: commy2
|
||||
* Client: Recives a marker data from server.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Array of map marker names <ARRAY>
|
||||
* 1: Array of map marker data <ARRAY>
|
||||
* 2: Logic <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [[],[],dummyLogic] call ace_markers_fnc_setMarkerJIP;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_allMapMarkers", "_allMapMarkersProperties", "_index", "_data", "_config"];
|
||||
private ["_index", "_data", "_config"];
|
||||
|
||||
_allMapMarkers = _this select 0;
|
||||
_allMapMarkersProperties = _this select 1;
|
||||
_logic = _this select 2;
|
||||
PARAMS_3(_allMapMarkers,_allMapMarkersProperties,_logic);
|
||||
|
||||
{
|
||||
_index = _allMapMarkers find _x;
|
||||
_index = _allMapMarkers find _x;
|
||||
|
||||
if (_index != -1) then {
|
||||
_data = _allMapMarkersProperties select _index;
|
||||
if (_index != -1) then {
|
||||
_data = _allMapMarkersProperties select _index;
|
||||
|
||||
_config = (configfile >> "CfgMarkers") >> (_data select 0);
|
||||
if (!isClass _config) then {
|
||||
WARNING("CfgMarker not found, changed to milDot");
|
||||
_config == (configFile >> "CfgMarkers" >> "MilDot");
|
||||
_config = (configfile >> "CfgMarkers") >> (_data select 0);
|
||||
if (!isClass _config) then {
|
||||
WARNING("CfgMarker not found, changed to milDot");
|
||||
_config == (configFile >> "CfgMarkers" >> "MilDot");
|
||||
};
|
||||
_x setMarkerTypeLocal (configName _config);
|
||||
|
||||
_config = (configfile >> "CfgMarkerColors") >> (_data select 1);
|
||||
if (!isClass _config) then {
|
||||
WARNING("CfgMarkerColors not found, changed to Default");
|
||||
_config == (configFile >> "CfgMarkerColors" >> "Default");
|
||||
};
|
||||
_x setMarkerColorLocal (configName _config);
|
||||
|
||||
_x setMarkerPosLocal (_data select 2);
|
||||
_x setMarkerDirLocal (_data select 3);
|
||||
};
|
||||
_x setMarkerTypeLocal (configName _config);
|
||||
|
||||
_config = (configfile >> "CfgMarkerColors") >> (_data select 1);
|
||||
if (!isClass _config) then {
|
||||
WARNING("CfgMarkerColors not found, changed to Default");
|
||||
_config == (configFile >> "CfgMarkerColors" >> "Default");
|
||||
};
|
||||
_x setMarkerColorLocal (configName _config);
|
||||
|
||||
_x setMarkerPosLocal (_data select 2);
|
||||
_x setMarkerDirLocal (_data select 3);
|
||||
};
|
||||
} forEach allMapMarkers;
|
||||
|
||||
deleteVehicle _logic;
|
||||
|
@ -1,45 +1,61 @@
|
||||
// by commy2
|
||||
/*
|
||||
* Author: commy2
|
||||
* Sets newly placed marker
|
||||
* Handles the QGVAR(setMarkerNetwork) event.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Markername <STRING>
|
||||
* 1: Marker Data <ARRAY>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [[],[],dummyLogic] call ace_markers_fnc_setMarkerJIP;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_marker", "_data", "_config"];
|
||||
private ["_config"];
|
||||
|
||||
_marker = _this select 0;
|
||||
_data = _this select 1;
|
||||
PARAMS_2(_marker,_data);
|
||||
EXPLODE_4_PVT(_data,_markerClassname,_colorClassname,_markerPos,_markerDir);
|
||||
|
||||
_config = (configfile >> "CfgMarkers") >> (_data select 0);
|
||||
_config = (configfile >> "CfgMarkers") >> _markerClassname;
|
||||
if (!isClass _config) then {
|
||||
WARNING("CfgMarker not found, changed to milDot");
|
||||
_config == (configFile >> "CfgMarkers" >> "MilDot");
|
||||
WARNING("CfgMarker not found, changed to milDot");
|
||||
_config == (configFile >> "CfgMarkers" >> "MilDot");
|
||||
};
|
||||
_marker setMarkerTypeLocal (configName _config);
|
||||
|
||||
_config = (configfile >> "CfgMarkerColors") >> (_data select 1);
|
||||
_config = (configfile >> "CfgMarkerColors") >> _colorClassname;
|
||||
if (!isClass _config) then {
|
||||
WARNING("CfgMarkerColors not found, changed to Default");
|
||||
_config == (configFile >> "CfgMarkerColors" >> "Default");
|
||||
WARNING("CfgMarkerColors not found, changed to Default");
|
||||
_config == (configFile >> "CfgMarkerColors" >> "Default");
|
||||
};
|
||||
_marker setMarkerColorLocal configName _config;
|
||||
|
||||
_marker setMarkerPosLocal (_data select 2);
|
||||
_marker setMarkerDirLocal (_data select 3);
|
||||
_marker setMarkerPosLocal _markerPos;
|
||||
_marker setMarkerDirLocal _markerDir;
|
||||
|
||||
// save properties on server machine for JIP, marker editing ready
|
||||
if (isMultiplayer && {isServer}) then {
|
||||
private ["_allMapMarkers", "_allMapMarkersProperties", "_index"];
|
||||
private ["_allMapMarkers", "_allMapMarkersProperties", "_index"];
|
||||
|
||||
_allMapMarkers = GETMVAR(allMapMarkers,[]);
|
||||
_allMapMarkersProperties = GETMVAR(allMapMarkersProperties,[]);
|
||||
_allMapMarkers = GETGVAR(allMapMarkers,[]);
|
||||
_allMapMarkersProperties = GETGVAR(allMapMarkersProperties,[]);
|
||||
|
||||
_index = _allMapMarkers find _marker;
|
||||
_index = _allMapMarkers find _marker;
|
||||
|
||||
if (_index == -1) then {
|
||||
_allMapMarkers pushBack _marker;
|
||||
_allMapMarkersProperties pushBack _data;
|
||||
} else {
|
||||
_allMapMarkers set [_index, _marker];
|
||||
_allMapMarkersProperties set [_index, _data];
|
||||
};
|
||||
if (_index == -1) then {
|
||||
_allMapMarkers pushBack _marker;
|
||||
_allMapMarkersProperties pushBack _data;
|
||||
} else {
|
||||
_allMapMarkers set [_index, _marker];
|
||||
_allMapMarkersProperties set [_index, _data];
|
||||
};
|
||||
|
||||
GVAR(allMapMarkers) = _allMapMarkers;
|
||||
GVAR(allMapMarkersProperties) = _allMapMarkersProperties;
|
||||
GVAR(allMapMarkers) = _allMapMarkers;
|
||||
GVAR(allMapMarkersProperties) = _allMapMarkersProperties;
|
||||
};
|
||||
|
@ -11,13 +11,5 @@
|
||||
<Spanish>Dirección: %1°</Spanish>
|
||||
<Russian>Направление: %1</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Markers_PlaceIn">
|
||||
<English>Place in: %1</English>
|
||||
<German>Platz in: %1</German>
|
||||
<Spanish>Colocar en: %1</Spanish>
|
||||
<Polish>Umieść na: %1</Polish>
|
||||
<Czech>Umístit do: %1</Czech>
|
||||
<Russian>Место в: %1</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -94,4 +94,13 @@ class RscDisplayInterruptEditor3D: RscStandardDisplay {
|
||||
class controls {
|
||||
class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {};
|
||||
};
|
||||
};
|
||||
};
|
||||
class RscDisplayMain: RscStandardDisplay {
|
||||
class controls {
|
||||
class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {
|
||||
action = "if (missionName != '') then {createDialog 'ACE_settingsMenu';};";
|
||||
y = "4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1,43 +0,0 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_FiredBis_EventHandlers {
|
||||
class CAManBase {
|
||||
class ADDON {
|
||||
clientFiredBis = QUOTE(if (_this select 0 == ACE_player) then {_this call FUNC(camShake); _this call FUNC(burstDispersion);};);
|
||||
};
|
||||
};
|
||||
class Tank {
|
||||
class ADDON {
|
||||
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||
};
|
||||
};
|
||||
class Car {
|
||||
class ADDON {
|
||||
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||
};
|
||||
};
|
||||
class Helicopter {
|
||||
class ADDON {
|
||||
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||
};
|
||||
};
|
||||
class Plane {
|
||||
class ADDON {
|
||||
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||
};
|
||||
};
|
||||
class Ship_F {
|
||||
class ADDON {
|
||||
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||
};
|
||||
};
|
||||
class StaticWeapon {
|
||||
class ADDON {
|
||||
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||
};
|
||||
};
|
||||
};
|
@ -1,8 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(burstDispersion);
|
||||
PREP(camShake);
|
||||
|
||||
ADDON = true;
|
@ -6,14 +6,12 @@ class CfgPatches {
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"KoffeinFlummi", "TaoSensai", "commy2"};
|
||||
author[] = {"KoffeinFlummi","TaoSensai","commy2"};
|
||||
authorUrl = "https://github.com/Taosenai/tmr";
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
|
||||
// DOC: http://forums.bistudio.com/showthread.php?94464-explaining-the-cfgRecoils-array
|
||||
class CfgRecoils {
|
||||
#define KICKBACK 0.07
|
||||
@ -114,17 +112,18 @@ class CfgRecoils {
|
||||
recoil_single_titan[] = {0,0,0};
|
||||
};
|
||||
|
||||
class CfgCameraShake {
|
||||
/*class CfgCameraShake {
|
||||
// Seems to be ignored by Arma
|
||||
defaultCaliberCoefWeaponFire = 0;
|
||||
};
|
||||
};*/
|
||||
|
||||
// Completely disable BI's camshake on fire.
|
||||
class CfgMovesBasic {
|
||||
/*class CfgMovesBasic {
|
||||
class Default {
|
||||
camShakeFire = 0;
|
||||
};
|
||||
};
|
||||
|
||||
class CfgMovesMaleSdr : CfgMovesBasic {
|
||||
class States {
|
||||
class AmovPercMstpSlowWrflDnon;
|
||||
@ -183,128 +182,4 @@ class CfgMovesMaleSdr : CfgMovesBasic {
|
||||
camShakeFire = 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// Ammo
|
||||
class CfgAmmo {
|
||||
class MissileCore;
|
||||
class MissileBase: MissileCore {
|
||||
GVAR(shakeMultiplier) = 2;
|
||||
};
|
||||
|
||||
class BombCore;
|
||||
class LaserBombCore: BombCore {
|
||||
GVAR(shakeMultiplier) = 2;
|
||||
};
|
||||
class Bo_Mk82: BombCore {
|
||||
GVAR(shakeMultiplier) = 2;
|
||||
};
|
||||
|
||||
class RocketCore;
|
||||
class ArtilleryRocketCore: RocketCore {
|
||||
GVAR(shakeMultiplier) = 1.4;
|
||||
};
|
||||
class RocketBase: RocketCore {
|
||||
GVAR(shakeMultiplier) = 1.4;
|
||||
};
|
||||
|
||||
class BulletCore;
|
||||
class BulletBase: BulletCore {
|
||||
GVAR(shakeMultiplier) = 1;
|
||||
};
|
||||
|
||||
class ShotgunCore;
|
||||
class ShotgunBase: ShotgunCore {
|
||||
GVAR(shakeMultiplier) = 1.1;
|
||||
};
|
||||
|
||||
class ShellCore;
|
||||
class ShellBase: ShellCore {
|
||||
GVAR(shakeMultiplier) = 3;
|
||||
};
|
||||
|
||||
class SubmunitionCore;
|
||||
class SubmunitionBase: SubmunitionCore {
|
||||
GVAR(shakeMultiplier) = 3;
|
||||
};
|
||||
|
||||
class ShotDeployCore;
|
||||
class ShotDeployBase: ShotDeployCore {
|
||||
GVAR(shakeMultiplier) = 3;
|
||||
};
|
||||
};
|
||||
|
||||
// Weapons
|
||||
// 1. Set the recoil profiles for all fire modes.
|
||||
// 2. Set the shake multiplier. This determines the camshake for the weapon.
|
||||
// Ex: GVAR(shakeMultiplier) = 1; (disabled currently)
|
||||
|
||||
class CfgWeapons {
|
||||
class CannonCore;
|
||||
class autocannon_Base_F: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class autocannon_35mm: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class cannon_120mm: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class mortar_155mm_AMOS: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class mortar_82mm: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
|
||||
// No camshake for gatlings
|
||||
class gatling_20mm: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class gatling_25mm: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class gatling_30mm: CannonCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
|
||||
class MGunCore;
|
||||
class MGun: MGunCore {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
// No camshake for smoke launchers
|
||||
class SmokeLauncher: MGun {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
|
||||
// No camshake for coax machine guns
|
||||
class LMG_RCWS;
|
||||
class LMG_M200: LMG_RCWS {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class LMG_coax: LMG_RCWS {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
class LMG_Minigun: LMG_RCWS {
|
||||
GVAR(shakeMultiplier) = 0;
|
||||
};
|
||||
};
|
||||
|
||||
// Vehicles
|
||||
class CfgVehicles {
|
||||
class LandVehicle;
|
||||
class Tank: LandVehicle {
|
||||
GVAR(enableCamshake) = 1;
|
||||
};
|
||||
class Car: LandVehicle {
|
||||
GVAR(enableCamshake) = 1;
|
||||
};
|
||||
class StaticWeapon: LandVehicle {
|
||||
GVAR(enableCamshake) = 1;
|
||||
};
|
||||
|
||||
class Allvehicles;
|
||||
class Air: Allvehicles {
|
||||
GVAR(enableCamshake) = 1;
|
||||
};
|
||||
};
|
||||
};*/
|
||||
|
@ -1,62 +0,0 @@
|
||||
// TMR: Small Arms - Recoil initialization and functions
|
||||
// (C) 2013 Ryan Schultz. See LICENSE.
|
||||
// Edited for compatability in ACE by KoffeinFlummi
|
||||
// Edited by commy2
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_weapon", "_projectile"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_projectile = _this select 6;
|
||||
|
||||
if (_weapon in ["Throw", "Put"]) exitWith {};
|
||||
|
||||
private ["_lastFired", "_burst"];
|
||||
|
||||
_lastFired = _unit getVariable [QUOTE(GVAR(lastFired)), -1];
|
||||
_burst = _unit getVariable [QUOTE(GVAR(burst)), 0];
|
||||
|
||||
if (time - _lastFired < 0.45) then {
|
||||
private "_startDisperse";
|
||||
_burst = _burst + 1;
|
||||
_unit setVariable [QUOTE(GVAR(burst)), _burst, false];
|
||||
|
||||
_startDisperse = [1, 3] select (cameraView == "GUNNER");
|
||||
|
||||
if (_burst > _startDisperse) then {
|
||||
// Reset burst size for calcs
|
||||
_burst = _burst - _startDisperse;
|
||||
|
||||
// Increase dispersion cap if player is not using sights
|
||||
_sightsBurst = [30, 0] select (cameraView == "GUNNER");
|
||||
|
||||
// Increase initial dispersion and cap if player is moving
|
||||
if (speed _unit > 0.5) then {
|
||||
_sightsBurst = 25;
|
||||
_burst = _burst + 15;
|
||||
};
|
||||
|
||||
// Maximum possible dispersion (without _sightsBurst mod)
|
||||
_maxBurst = 50;
|
||||
|
||||
if (_unit getVariable [QUOTE(EGVAR(resting,weaponRested)), false]) then {_maxBurst = 25};
|
||||
if (_unit getVariable [QUOTE(EGVAR(resting,bipodDeployed)), false]) then {_maxBurst = 18};
|
||||
|
||||
// Cap the dispersion
|
||||
_burst = (_burst min _maxBurst) + _sightsBurst;
|
||||
|
||||
// Add random variance
|
||||
_elevAngle = (_burst / 300) - random (_burst / 300) * 2;
|
||||
_travAngle = (_burst / 260) - random (_burst / 260) * 2;
|
||||
|
||||
[_projectile, _travAngle, _elevAngle] call EFUNC(common,changeProjectileDirection);
|
||||
};
|
||||
} else {
|
||||
|
||||
// Long enough delay, reset burst
|
||||
_unit setVariable [QUOTE(GVAR(burst)), 0, false];
|
||||
};
|
||||
|
||||
_unit setVariable [QUOTE(GVAR(lastFired)), time, false];
|
@ -1,61 +0,0 @@
|
||||
// TMR: Small Arms - Recoil initialization and functions
|
||||
// (C) 2013 Ryan Schultz. See LICENSE.
|
||||
// Edited for compatability in ACE by KoffeinFlummi
|
||||
// Edited by commy2
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define BASE_POWER 0.40
|
||||
#define BASE_TIME 0.19
|
||||
#define BASE_FREQ 13
|
||||
#define RECOIL_COEF 40
|
||||
|
||||
private ["_unit", "_weapon", "_muzzle", "_ammo"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_muzzle = _this select 2;
|
||||
_ammo = _this select 4;
|
||||
|
||||
if (_weapon in [handgunWeapon _unit, "Throw", "Put"]) exitWith {};
|
||||
|
||||
private ["_powerMod", "_timeMod", "_freqMod", "_powerCoef"];
|
||||
|
||||
_powerMod = ([0, -0.1, -0.1, 0, -0.2] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find stance _unit)) + ([0, -1, 0, -1] select (["INTERNAL", "EXTERNAL", "GUNNER", "GROUP"] find cameraView));
|
||||
_timeMod = 0;
|
||||
_freqMod = 0;
|
||||
|
||||
_powerCoef = 0;
|
||||
if (_unit != vehicle _unit) then {
|
||||
_powerCoef = getNumber (configFile >> "CfgWeapons" >> _weapon >> QUOTE(GVAR(shakeMultiplier)));
|
||||
_powerCoef = _powerCoef * getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(GVAR(shakeMultiplier)));
|
||||
} else {
|
||||
private ["_type", "_config", "_recoil"];
|
||||
|
||||
_type = ["recoil", "recoilProne"] select (stance _unit == "PRONE");
|
||||
|
||||
_config = configFile >> "CfgWeapons" >> _weapon;
|
||||
_recoil = if (_muzzle == _weapon) then {
|
||||
getText (_config >> _type)
|
||||
} else {
|
||||
getText (_config >> _muzzle >> _type)
|
||||
};
|
||||
|
||||
_recoil = getArray (configFile >> "CfgRecoils" >> _recoil);
|
||||
if (count _recoil < 2) exitWith {};
|
||||
|
||||
_powerCoef = _recoil select 1;
|
||||
_powerCoef = (call compile format ["%1", _powerCoef]) * RECOIL_COEF;
|
||||
};
|
||||
|
||||
if (_unit getVariable [QUOTE(EGVAR(resting,weaponRested)), false]) then {_powerMod = _powerMod - 0.07};
|
||||
if (_unit getVariable [QUOTE(EGVAR(resting,bipodDeployed)), false]) then {_powerMod = _powerMod - 0.11};
|
||||
|
||||
private "_camshake";
|
||||
_camshake = [
|
||||
_powerCoef * (BASE_POWER + _powerMod) max 0,
|
||||
BASE_TIME + _timeMod max 0,
|
||||
BASE_FREQ + _freqMod max 0
|
||||
];
|
||||
|
||||
addCamShake _camshake;
|
@ -1,12 +0,0 @@
|
||||
#define COMPONENT recoil
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_RECOIL
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_RECOIL
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_RECOIL
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
@ -1 +0,0 @@
|
||||
z\ace\addons\resting
|
@ -1,12 +0,0 @@
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE( call COMPILE_FILE(XEH_postInit) );
|
||||
};
|
||||
};
|
File diff suppressed because it is too large
Load Diff
@ -1,14 +0,0 @@
|
||||
class CfgSounds {
|
||||
class GVAR(rest)
|
||||
{
|
||||
name=QGVAR(rest);
|
||||
sound[]={QUOTE(PATHTOF(sounds\weaponrest_rest.wav)),1,1};
|
||||
titles[]={};
|
||||
};
|
||||
class GVAR(unrest)
|
||||
{
|
||||
name=QGVAR(unrest);
|
||||
sound[]={QUOTE(PATHTOF(sounds\weaponrest_unrest.wav)),1,1};
|
||||
titles[]={};
|
||||
};
|
||||
};
|
@ -1,22 +0,0 @@
|
||||
class CfgWeapons {
|
||||
class Rifle_Long_Base_F;
|
||||
class arifle_MX_Base_F;
|
||||
|
||||
class arifle_MX_SW_F : arifle_MX_Base_F {
|
||||
ACE_Bipod = 1;
|
||||
};
|
||||
|
||||
class LMG_Mk200_F : Rifle_Long_Base_F {
|
||||
ACE_Bipod = 1;
|
||||
};
|
||||
class LMG_Zafir_F: Rifle_Long_Base_F {
|
||||
ACE_Bipod = 1;
|
||||
};
|
||||
|
||||
class LRR_base_F : Rifle_Long_Base_F {
|
||||
ACE_Bipod = 1;
|
||||
};
|
||||
class GM6_base_F : Rifle_Long_Base_F {
|
||||
ACE_Bipod = 1;
|
||||
};
|
||||
};
|
@ -1,12 +0,0 @@
|
||||
ace_resting
|
||||
===========
|
||||
|
||||
Introduces weapon resting and bipod deployment, allowing the player to increase the stability of his weapon.
|
||||
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [KoffeinFlummi](https://github.com/KoffeinFlummi)
|
||||
- [commy2](https://github.com/commy2)
|
@ -1,23 +0,0 @@
|
||||
// by esteldunedain
|
||||
#include "script_component.hpp"
|
||||
|
||||
if !(hasInterface) exitWith {};
|
||||
|
||||
// Add keybinds
|
||||
["ACE3", QGVAR(RestWeapon), localize "STR_ACE_Resting_RestWeapon",
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if !([ACE_player] call EFUNC(common,canUseWeapon) &&
|
||||
{inputAction 'reloadMagazine' == 0} &&
|
||||
{!weaponLowered ACE_player} &&
|
||||
{speed ACE_player < 1}) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[ACE_player, vehicle ACE_player, currentWeapon ACE_player] call FUNC(restWeapon);
|
||||
// Return false so it doesn't block other actions
|
||||
false
|
||||
},
|
||||
{false},
|
||||
[15, [false, false, false]], false] call cba_fnc_addKeybind;
|
@ -1,11 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(getIntersection);
|
||||
PREP(hasBipod);
|
||||
PREP(pfhCheckRest);
|
||||
PREP(restWeapon);
|
||||
PREP(unRestWeapon);
|
||||
|
||||
ADDON = true;
|
@ -1,21 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"KoffeinFlummi", "TaoSensai", "esteldunedain"};
|
||||
authorUrl = "https://github.com/KoffeinFlummi/";
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
|
||||
#include "CfgWeapons.hpp"
|
||||
|
||||
#include "CfgMoves.hpp"
|
||||
|
||||
#include "CfgSounds.hpp"
|
Binary file not shown.
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
|
||||
*
|
||||
* Prepares intersects
|
||||
*
|
||||
* Arguments:
|
||||
* 0: unit
|
||||
* 1: vehicle
|
||||
* 2: weapon
|
||||
*
|
||||
* Return Values:
|
||||
* [_intersectsMiddle, _intersectsLeft, _intersectsRight, _intersectsDown]
|
||||
*
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_3_PVT(_this,_unit,_vehicle,_weapon);
|
||||
|
||||
private ["_weaponPos", "_weaponDir", "_weaponPosDown"];
|
||||
|
||||
_weaponPos = ATLtoASL (_unit modelToWorldVisual (_unit selectionPosition "RightHand"));
|
||||
_weaponDir = _unit weaponDirection _weapon;
|
||||
_weaponPosDown = _weaponPos vectorAdd [0,0,-MAXHEIGHT];
|
||||
|
||||
private ["_checkPosMiddle", "_checkPosLeft", "_checkPosRight", "_checkPosDown"];
|
||||
|
||||
_checkPosMiddle = [
|
||||
(_weaponPos select 0) + MAXDISTANCE * (_weaponDir select 0),
|
||||
(_weaponPos select 1) + MAXDISTANCE * (_weaponDir select 1),
|
||||
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2)
|
||||
];
|
||||
_checkPosLeft = [
|
||||
(_weaponPos select 0) + MAXDISTANCE * sin (((_weaponDir select 0) atan2 (_weaponDir select 1)) + 360 - MAXANGLE),
|
||||
(_weaponPos select 1) + MAXDISTANCE * cos (((_weaponDir select 0) atan2 (_weaponDir select 1)) + 360 - MAXANGLE),
|
||||
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2)
|
||||
];
|
||||
_checkPosRight = [
|
||||
(_weaponPos select 0) + MAXDISTANCE * sin (((_weaponDir select 0) atan2 (_weaponDir select 1)) + MAXANGLE),
|
||||
(_weaponPos select 1) + MAXDISTANCE * cos (((_weaponDir select 0) atan2 (_weaponDir select 1)) + MAXANGLE),
|
||||
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2)
|
||||
];
|
||||
_checkPosDown = [
|
||||
(_weaponPos select 0) + MAXDISTANCE * (_weaponDir select 0),
|
||||
(_weaponPos select 1) + MAXDISTANCE * (_weaponDir select 1),
|
||||
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2) - MAXHEIGHT
|
||||
];
|
||||
|
||||
/* UNCOMMENT THIS FOR DEBUGGING
|
||||
weaponPos = ASLtoATL _weaponPos;
|
||||
weaponPosDown = ASLtoATL _weaponPosDown;
|
||||
checkPosMiddle = ASLtoATL _checkPosMiddle;
|
||||
checkPosLeft = ASLtoATL _checkPosLeft;
|
||||
checkPosRight = ASLtoATL _checkPosRight;
|
||||
checkPosDown = ASLtoATL _checkPosDown;
|
||||
|
||||
onEachFrame {
|
||||
drawLine3D [weaponPos, checkPosMiddle, [1,0,0,1]];
|
||||
drawLine3D [weaponPos, checkPosLeft, [1,0,0,1]];
|
||||
drawLine3D [weaponPos, checkPosRight, [1,0,0,1]];
|
||||
drawLine3D [weaponPosDown, checkPosDown, [1,0,0,1]];
|
||||
};*/
|
||||
|
||||
private ["_intersectsMiddle", "_intersectsLeft", "_intersectsRight", "_intersectsDown"];
|
||||
|
||||
_intersectsMiddle = lineIntersects [_weaponPos, _checkPosMiddle];
|
||||
_intersectsLeft = lineIntersects [_weaponPos, _checkPosLeft];
|
||||
_intersectsRight = lineIntersects [_weaponPos, _checkPosRight];
|
||||
_intersectsDown = lineIntersects [_weaponPos, _checkPosDown] || {terrainIntersectASL [_weaponPosDown, _checkPosDown]};
|
||||
|
||||
[_intersectsMiddle, _intersectsLeft, _intersectsRight, _intersectsDown]
|
@ -1,22 +0,0 @@
|
||||
/*
|
||||
* Author: Commy2
|
||||
*
|
||||
* Check if the weapon has a bipod
|
||||
*
|
||||
* Arguments:
|
||||
* 0: weapon
|
||||
*
|
||||
* Return Values:
|
||||
* Boolean
|
||||
*
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_1_PVT(_this,_weapon);
|
||||
|
||||
private ["_config"];
|
||||
_config = configFile >> "CfgWeapons" >> _weapon;
|
||||
|
||||
getNumber (_config >> "ACE_Bipod") == 1 ||
|
||||
getNumber (_config >> "AGM_Bipod") == 1 ||
|
||||
{getNumber (_config >> "tmr_autorest_deployable") == 1}
|
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
|
||||
*
|
||||
* PFH that check for player moving away, changing weapon, etc
|
||||
* and unrests the weapon if necessary
|
||||
*
|
||||
* Arguments:
|
||||
* 0: unit
|
||||
* 1: vehicle
|
||||
* 2: weapon
|
||||
* 3: rested position
|
||||
*
|
||||
* Return Values:
|
||||
* None
|
||||
*
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_2_PVT(_this,_params,_pfhId);
|
||||
EXPLODE_4_PVT(_params,_unit,_vehicle,_weapon,_restedPosition);
|
||||
|
||||
if !(_unit getVariable ["ACE_weaponRested", false]) exitWith {
|
||||
[_pfhId] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
private ["_intersects"];
|
||||
_intersects = _params call FUNC(getIntersection);
|
||||
|
||||
if (
|
||||
_unit != ACE_player
|
||||
|| {_vehicle != vehicle _unit}
|
||||
|| {inputAction "reloadMagazine" != 0}
|
||||
|| {weaponLowered _unit}
|
||||
|| {speed _unit > 1}
|
||||
|| {currentWeapon _unit != _weapon}
|
||||
|| {getPosASL _unit distanceSqr _restedPosition > 1}
|
||||
|| {!(true in _intersects)}
|
||||
) exitWith {
|
||||
[_pfhId] call cba_fnc_removePerFrameHandler;
|
||||
[_unit, _vehicle, _weapon] call FUNC(unRestWeapon);
|
||||
};
|
@ -1,66 +0,0 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
|
||||
*
|
||||
* Rests the player's weapon if possible.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Values:
|
||||
* None
|
||||
*
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_3_PVT(_this,_unit,_vehicle,_weapon);
|
||||
|
||||
if (_weapon != primaryWeapon _unit) exitWith {};
|
||||
|
||||
if (_unit getVariable ["ACE_weaponRested", false]) exitWith {_this call FUNC(unRestWeapon)};
|
||||
|
||||
// exit if this is not an available animation
|
||||
if (!isClass (configFile >> "CfgMovesMaleSdr" >> "States" >> format ["%1_ace_deploy", animationState _unit])) exitWith {};
|
||||
|
||||
// CHECK FOR APPROPRIATE SURFACE
|
||||
private "_intersects";
|
||||
_intersects = _this call FUNC(getIntersection);
|
||||
|
||||
if (true in _intersects) then {
|
||||
_unit setVariable ["ACE_weaponRested", true];
|
||||
if (_unit == ACE_PLAYER) then {
|
||||
[QGVAR(bipodDeployed), true, QUOTE(PATHTOF(data\icons\icon_bipod.paa)), [1,1,1,1], -1] call EFUNC(common,displayIcon);
|
||||
};
|
||||
|
||||
private "_restedPosition";
|
||||
_restedPosition = getPosASL _unit;
|
||||
|
||||
// REST THE WEAPON
|
||||
addCamShake CAMSHAKE;
|
||||
playSound QGVAR(rest);
|
||||
|
||||
if ([_weapon] call FUNC(hasBipod) && {_intersects select 3}) then {
|
||||
_unit setVariable ["ACE_bipodDeployed", true];
|
||||
|
||||
_unit setUnitRecoilCoefficient (BIPODRECOIL * unitRecoilCoefficient _unit);
|
||||
//[_unit, format ["%1_ace_deploy", animationState _unit], 2] call EFUNC(common,doAnimation);
|
||||
_unit switchMove format ["%1_ace_deploy", animationState _unit];
|
||||
|
||||
private "_picture";
|
||||
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
|
||||
[localize "STR_ACE_Resting_BipodDeployed", _picture] call EFUNC(common,displayTextPicture);
|
||||
|
||||
} else {
|
||||
_unit setVariable ["ACE_bipodDeployed", false];
|
||||
|
||||
_unit setUnitRecoilCoefficient (RESTEDRECOIL * unitRecoilCoefficient _unit);
|
||||
//[_unit, format ["%1_ace_rested", animationState _unit], 2] call EFUNC(common,doAnimation);
|
||||
_unit switchMove format ["%1_ace_rested", animationState _unit];
|
||||
|
||||
private "_picture";
|
||||
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
|
||||
[localize "STR_ACE_Resting_WeaponRested", _picture] call EFUNC(common,displayTextPicture);
|
||||
};
|
||||
|
||||
// Launch a PFH to check for player moving away, changing weapon, etc
|
||||
[FUNC(pfhCheckRest), 0.2, [_unit, _vehicle, _weapon, _restedPosition] ] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
@ -1,53 +0,0 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
|
||||
*
|
||||
* Un Rests the player's weapon
|
||||
*
|
||||
* Arguments:
|
||||
* 0: unit
|
||||
* 1: vehicle
|
||||
* 2: weapon
|
||||
*
|
||||
* Return Values:
|
||||
* None
|
||||
*
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_3_PVT(_this,_unit,_vehicle,_weapon);
|
||||
|
||||
addCamShake CAMSHAKE;
|
||||
|
||||
private "_animation";
|
||||
_animation = animationState _unit;
|
||||
|
||||
if (_unit getVariable ["ACE_bipodDeployed", false]) then {
|
||||
_unit setUnitRecoilCoefficient (unitRecoilCoefficient _unit / BIPODRECOIL);
|
||||
if (_animation find "_ace_deploy" != -1) then {
|
||||
//[_unit, [_animation, "_ace_deploy", ""] call CBA_fnc_replace, 2] call EFUNC(common,doAnimation);
|
||||
_unit switchMove ([_animation, "_ace_deploy", ""] call CBA_fnc_replace);
|
||||
};
|
||||
|
||||
private "_picture";
|
||||
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
|
||||
[localize "STR_ACE_Resting_BipodUndeployed", _picture] call EFUNC(common,displayTextPicture);
|
||||
|
||||
} else {
|
||||
_unit setUnitRecoilCoefficient (unitRecoilCoefficient _unit / RESTEDRECOIL);
|
||||
if (_animation find "_ace_rested" != -1) then {
|
||||
//[_unit, [_animation, "_ace_rested", ""] call CBA_fnc_replace, 2] call EFUNC(common,doAnimation);
|
||||
_unit switchMove ([_animation, "_ace_rested", ""] call CBA_fnc_replace);
|
||||
};
|
||||
|
||||
private "_picture";
|
||||
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
|
||||
[localize "STR_ACE_Resting_WeaponLifted", _picture] call EFUNC(common,displayTextPicture);
|
||||
};
|
||||
playSound QGVAR(unrest);
|
||||
|
||||
_unit setVariable ["ACE_weaponRested", false];
|
||||
_unit setVariable ["ACE_bipodDeployed", false];
|
||||
|
||||
if (_unit == ACE_PLAYER) then {
|
||||
[QGVAR(bipodDeployed), false, "", [1,1,1,1], -1] call EFUNC(common,displayIcon);
|
||||
};
|
@ -1 +0,0 @@
|
||||
#include "\z\ace\addons\resting\script_component.hpp"
|
@ -1,19 +0,0 @@
|
||||
#define COMPONENT resting
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_RESTING
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_RESTING
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_RESTING
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
|
||||
#define RESTEDRECOIL 0.6
|
||||
#define BIPODRECOIL 0.3
|
||||
#define MAXDISTANCE 1
|
||||
#define MAXANGLE 15
|
||||
#define MAXHEIGHT 0.45
|
||||
#define CAMSHAKE [1,0.5,5]
|
Binary file not shown.
Binary file not shown.
@ -1,69 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Resting">
|
||||
|
||||
<Key ID="STR_ACE_Resting_RestWeapon">
|
||||
<English>Rest Weapon</English>
|
||||
<German>Waffe auflegen</German>
|
||||
<Spanish>Apoyar el arma</Spanish>
|
||||
<Polish>Oprzyj broń</Polish>
|
||||
<Czech>Zapřít zbraň</Czech>
|
||||
<French>Appuyer l'arme</French>
|
||||
<Russian>Зафиксировать оружие</Russian>
|
||||
<Hungarian>Fegyver kitámasztása</Hungarian>
|
||||
<Portuguese>Apoiar Arma</Portuguese>
|
||||
<Italian>Appoggia l'arma</Italian>
|
||||
</Key>
|
||||
|
||||
<Key ID="STR_ACE_Resting_BipodDeployed">
|
||||
<English>Bipod deployed</English>
|
||||
<German>Zweibein ausgeklappt</German>
|
||||
<Spanish>Bípode desplegado</Spanish>
|
||||
<Polish>Dwójnóg rozstawiony</Polish>
|
||||
<Czech>Dvojnožka rozložena</Czech>
|
||||
<French>Bipied déployé</French>
|
||||
<Russian>Сошки установлены</Russian>
|
||||
<Hungarian>Állványon</Hungarian>
|
||||
<Portuguese>Bipé apoiado</Portuguese>
|
||||
<Italian>Bipiede appoggiato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Resting_WeaponRested">
|
||||
<English>Weapon rested</English>
|
||||
<German>Waffe aufgelegt</German>
|
||||
<Spanish>Arma apoyada</Spanish>
|
||||
<Polish>Broń oparta</Polish>
|
||||
<Czech>Zbraň zapřena</Czech>
|
||||
<French>Arme appuyée</French>
|
||||
<Russian>Оружие зафиксировано</Russian>
|
||||
<Hungarian>Fegyver kitámasztva</Hungarian>
|
||||
<Portuguese>Arma apoiada</Portuguese>
|
||||
<Italian>Arma appoggiata</Italian>
|
||||
</Key>
|
||||
|
||||
<Key ID="STR_ACE_Resting_BipodUndeployed">
|
||||
<English>Bipod undeployed</English>
|
||||
<German>Zweibein eingeklappt</German>
|
||||
<Spanish>Bípode plegado</Spanish>
|
||||
<Polish>Dwójnóg złożony</Polish>
|
||||
<Czech>Dvojnožka rozložena</Czech>
|
||||
<French>Bipied replié</French>
|
||||
<Russian>Сошки убраны</Russian>
|
||||
<Hungarian>Állvány csukva</Hungarian>
|
||||
<Portuguese>Bipé recolhido</Portuguese>
|
||||
<Italian>Bipiede richiuso</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Resting_WeaponLifted">
|
||||
<English>Weapon lifted</English>
|
||||
<German>Waffe gehoben</German>
|
||||
<Spanish>Arma levantada</Spanish>
|
||||
<Polish>Broń podniesiona</Polish>
|
||||
<Czech>Zbraň zdvihnuta</Czech>
|
||||
<French>Arme relevée</French>
|
||||
<Russian>Оружие не зафиксировано</Russian>
|
||||
<Hungarian>Fegyver nincs támasztva</Hungarian>
|
||||
<Portuguese>Arma levantada</Portuguese>
|
||||
<Italian>Arma sollevata</Italian>
|
||||
</Key>
|
||||
|
||||
</Package>
|
||||
</Project>
|
@ -21,7 +21,7 @@
|
||||
#include <string>
|
||||
|
||||
#define MAXELEVATION 20
|
||||
#define MAXITERATIONS 120
|
||||
#define MAXITERATIONS 600
|
||||
#define PRECISION 0.1
|
||||
#define RADIANS(X) (X / (180 / M_PI))
|
||||
|
||||
|
@ -188,10 +188,16 @@ def find_bi_tools(work_drive):
|
||||
else:
|
||||
raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.")
|
||||
|
||||
def find_depbo_tools():
|
||||
def find_depbo_tools(regKey):
|
||||
"""Use registry entries to find DePBO-based tools."""
|
||||
stop = False
|
||||
|
||||
if regKey == "HKCU":
|
||||
reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
|
||||
stop = True
|
||||
else:
|
||||
reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
|
||||
|
||||
reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
|
||||
try:
|
||||
k = winreg.OpenKey(reg, r"Software\Mikero\pboProject")
|
||||
try:
|
||||
@ -217,7 +223,10 @@ def find_depbo_tools():
|
||||
except:
|
||||
print_error("Could not find makepbo.")
|
||||
except:
|
||||
raise Exception("BadDePBO", "DePBO tools not installed correctly")
|
||||
if stop == True:
|
||||
raise Exception("BadDePBO", "DePBO tools not installed correctly")
|
||||
return -1
|
||||
|
||||
|
||||
#Strip any quotations from the path due to a MikeRo tool bug which leaves a trailing space in some of its registry paths.
|
||||
return [pboproject_path.strip('"'),rapify_path.strip('"'),makepbo_path.strip('"')]
|
||||
@ -439,7 +448,9 @@ See the make.cfg file for additional build options.
|
||||
|
||||
if build_tool == "pboproject":
|
||||
try:
|
||||
depbo_tools = find_depbo_tools()
|
||||
depbo_tools = find_depbo_tools("HKLM")
|
||||
if depbo_tools == -1:
|
||||
depbo_tools = find_depbo_tools("HKCU")
|
||||
pboproject = depbo_tools[0]
|
||||
rapifyTool = depbo_tools[1]
|
||||
makepboTool = depbo_tools[2]
|
||||
@ -580,7 +591,7 @@ See the make.cfg file for additional build options.
|
||||
|
||||
os.chdir("P:\\")
|
||||
|
||||
cmd = [os.path.join(work_drive, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")]
|
||||
cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")]
|
||||
ret = subprocess.call(cmd)
|
||||
#ret = subprocess.call(["cfgConvertGUI.exe", os.path.join(work_drive, prefix, module, "config.cpp")])
|
||||
|
||||
@ -589,7 +600,7 @@ See the make.cfg file for additional build options.
|
||||
input("Press Enter to continue...")
|
||||
|
||||
|
||||
cmd = [os.path.join(work_drive, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")]
|
||||
cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")]
|
||||
ret = subprocess.call(cmd)
|
||||
if ret != 0:
|
||||
print_error("CfgConvert -txt) return code == " + str(ret))
|
||||
|
358
tools/cba/addons/xeh/init_pre.sqf
Normal file
358
tools/cba/addons/xeh/init_pre.sqf
Normal file
@ -0,0 +1,358 @@
|
||||
// #define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
SCRIPT(init_pre);
|
||||
|
||||
if !(isNil'SLX_XEH_MACHINE') exitWith {}; // Doublecheck..
|
||||
|
||||
LOG(MSG_INIT);
|
||||
// No _this in pre/PostInit, also fixes call to init_compile
|
||||
private "_this";
|
||||
_this = nil;
|
||||
|
||||
private ["_id", "_cfgRespawn", "_respawn", "_level"];
|
||||
|
||||
// UNIQUE Session ID since start of game
|
||||
_id = uiNamespace getVariable "SLX_XEH_ID";
|
||||
if (isNil "_id") then { _id = 1 } else { if (typeName _id != "SCALAR") then { _id = 0 }; if (_id < 0) then { _id = 0 }; INC(_id) };
|
||||
uiNamespace setVariable ["SLX_XEH_ID", _id];
|
||||
|
||||
CBA_isCached = uiNamespace getVariable "CBA_isCached";
|
||||
CBA_isCached = if (isNil "CBA_isCached" && {isMultiplayer} && {!isDedicated}) then { -1 } else { _id };
|
||||
uiNamespace setVariable ["CBA_isCached", CBA_isCached];
|
||||
|
||||
if (isNil "SLX_XEH_RECOMPILE") then { SLX_XEH_RECOMPILE = CACHE_DIS(xeh) };
|
||||
|
||||
if (!isMultiplayer || {isDedicated} || {CBA_isCached == -1}) then {
|
||||
uiNamespace setVariable ["SLX_XEH_CACHE_KEYS", []];
|
||||
uiNamespace setVariable ["SLX_XEH_CACHE_KEYS2", []];
|
||||
uiNamespace setVariable ["SLX_XEH_CACHE_KEYS3", []];
|
||||
uiNamespace setVariable ["CBA_CACHE_KEYS", []];
|
||||
};
|
||||
|
||||
SLX_XEH_CACHE_KEYS = uiNamespace getVariable "SLX_XEH_CACHE_KEYS";
|
||||
SLX_XEH_CACHE_KEYS2 = uiNamespace getVariable "SLX_XEH_CACHE_KEYS2";
|
||||
SLX_XEH_CACHE_KEYS3 = uiNamespace getVariable "SLX_XEH_CACHE_KEYS3";
|
||||
CBA_CACHE_KEYS = uiNamespace getVariable "CBA_CACHE_KEYS";
|
||||
|
||||
// Always compile cache function once
|
||||
call compile preProcessFileLineNumbers 'x\cba\addons\xeh\init_compile.sqf';
|
||||
|
||||
// Log
|
||||
SLX_XEH_DisableLogging = isClass(configFile/"CfgPatches"/"Disable_XEH_Logging");
|
||||
|
||||
// Backup functions for macros
|
||||
// TODO: Cleanup...
|
||||
// CBA_fnc_log = { diag_log [diag_frameNo, diag_tickTime, time, _this] };
|
||||
|
||||
|
||||
/* CBA_fnc_defaultParam = {
|
||||
PARAMS_3(_params,_index,_defaultValue);
|
||||
|
||||
private "_value";
|
||||
|
||||
if (!isNil "_defaultValue") then {
|
||||
_value = _defaultValue;
|
||||
};
|
||||
|
||||
if (!isNil "_params" && {(typeName _params) == "ARRAY"} && {count _params > _index} && {!isNil { _params select _index }}) then {
|
||||
_value = _params select _index;
|
||||
};
|
||||
|
||||
// Return.
|
||||
if (isNil "_value") then {
|
||||
nil;
|
||||
} else {
|
||||
_value;
|
||||
};
|
||||
};
|
||||
*/
|
||||
|
||||
XEH_LOG("XEH: PreInit Started. v"+getText(configFile >> "CfgPatches" >> "CBA_XEH" >> "version")+". "+PFORMAT_5("MISSINIT",missionName,worldName,isMultiplayer,isServer,isDedicated));
|
||||
if (time > 0) then { XEH_LOG("XEH WARNING: Time > 0; This probably means there are no XEH compatible units by default on the map, perhaps add the SLX_XEH_Logic module.") };
|
||||
|
||||
// Compile all necessary scripts and start one vehicle crew initialisation thread
|
||||
_cfgRespawn = (missionConfigFile/"respawn");
|
||||
_respawn = false;
|
||||
if ( isNumber(_cfgRespawn) ) then {
|
||||
_respawn = !(getNumber(_cfgRespawn) in [0, 1, 4, 5]);
|
||||
};
|
||||
if ( isText(_cfgRespawn) ) then {
|
||||
_respawn = !(getText(_cfgRespawn) in ["none", "bird", "group", "side"]);
|
||||
};
|
||||
|
||||
SLX_XEH_objects = []; // Temporary array, to track InitPosts at mission initialization
|
||||
SLX_XEH_INIT_MEN = []; // Temporary array, to track ManBased inits - to workaround JIP issue "Double init eh ran for crew units"
|
||||
SLX_XEH_DELAYED = []; // Temporary array, to track Delayed Inits at mission initialization
|
||||
|
||||
|
||||
// Game version detection
|
||||
_level = 0; // pre v1.60
|
||||
// TODO: Improve v1.60 detection
|
||||
// TODO: Temporary disabled due to #28652
|
||||
//if ((isNumber (configFile >> "CfgDifficulties" >> "recruit" >> "recoilCoef")) && (isNumber (configFile >> "CfgVehicles" >> "Car" >> "turnCoef"))) then {
|
||||
//_level = 1; // v1.60
|
||||
//};
|
||||
|
||||
FUNC(determineProductVersion) = {
|
||||
private "_pv";
|
||||
_pv = call {productVersion};
|
||||
|
||||
// A2 (and OA pre 1.61beta, and TOH pre 1.05?) does not support productVersion so we deal with it manually
|
||||
if (isNil "_pv") then {
|
||||
_pv = if (isClass(configFile >> "CfgPatches" >> "A3_Map_Stratis")) then {
|
||||
// A3 Backup
|
||||
["Arma 3 Alpha","Arma3Alpha", -1, -1]; //,5,102571]
|
||||
|
||||
} else {
|
||||
if (isClass(configFile >> "CfgPatches" >> "United_States_H")) then {
|
||||
// TOH Backup
|
||||
["TakeOn H", "TakeOnH", -1, -1];
|
||||
} else {
|
||||
if (isClass(configFile >> "CfgPatches" >> "Takistan")) then {
|
||||
// OA Backup
|
||||
["ArmA 2OA", "ArmA2OA", -1, -1];
|
||||
} else {
|
||||
// A2 Backup
|
||||
["ArmA 2", "ArmA2", -1, -1];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
_pv;
|
||||
};
|
||||
|
||||
FUNC(determineGame) = {
|
||||
// 0 = A2
|
||||
// 1 = OA
|
||||
// 2 = TOH
|
||||
// 3 = A3 :P
|
||||
private "_pv";
|
||||
_pv = call FUNC(determineProductVersion);
|
||||
|
||||
switch (_pv select 1) do {
|
||||
case "ArmA2": {0};
|
||||
case "ArmA2OA": {1};
|
||||
case "TakeOnH": {2};
|
||||
case "Arma3Alpha": {3};
|
||||
case "Arma3": {3};
|
||||
default {0};
|
||||
};
|
||||
};
|
||||
|
||||
// System array with machine / mission / session information
|
||||
SLX_XEH_MACHINE =
|
||||
[
|
||||
!isDedicated, // 0 - isClient (and thus has player)
|
||||
false, // 1 - isJip
|
||||
!isServer, // 2 - isDedicatedClient (and thus not a Client-Server)
|
||||
isServer, // 3 - isServer
|
||||
isDedicated, // 4 - isDedicatedServer (and thus not a Client-Server)
|
||||
false, // 5 - Player Check Finished
|
||||
!isMultiplayer, // 6 - SP?
|
||||
false, // 7 - StartInit Passed
|
||||
false, // 8 - Postinit Passed
|
||||
isMultiplayer && {_respawn}, // 9 - Multiplayer && respawn?
|
||||
if (isDedicated) then { 0 } else { if (isServer) then { 1 } else { 2 } }, // 10 - Machine type (only 3 possible configurations)
|
||||
_id, // 11 - SESSION_ID
|
||||
_level, // 12 - LEVEL - Used for version determination
|
||||
false, // 13 - TIMEOUT - PostInit timedOut
|
||||
call FUNC(determineGame), // 14 - Game
|
||||
call FUNC(determineProductVersion) // 15 - Product+Version
|
||||
];
|
||||
|
||||
SLX_XEH_DUMMY = switch (SLX_XEH_MACHINE select 14) do {
|
||||
case 2: {"Helipad_Invisible_H" };
|
||||
case 3: {"Land_HelipadEmpty_F" };
|
||||
default { "HeliHEmpty" };
|
||||
};
|
||||
|
||||
SLX_XEH_STR = ""; // Empty string
|
||||
SLX_XEH_STR_INIT_EH = "Extended_Init_EventHandlers";
|
||||
SLX_XEH_STR_INIT_POST_EH = "Extended_InitPost_EventHandlers";
|
||||
SLX_XEH_STR_PreInit = "Extended_PreInit_EventHandlers";
|
||||
SLX_XEH_STR_PostInit = "Extended_PostInit_EventHandlers";
|
||||
SLX_XEH_STR_DEH = "DefaultEventhandlers";
|
||||
SLX_XEH_STR_TAG = "SLX_XEH_";
|
||||
SLX_XEH_STR_PLAYABLE = "SLX_XEH_PLAYABLE";
|
||||
|
||||
SLX_XEH_STR_PROCESSED = "SLX_XEH_PROCESSED";
|
||||
SLX_XEH_AR_FALSE = [SLX_XEH_STR_PROCESSED, false];
|
||||
SLX_XEH_AR_TRUE = [SLX_XEH_STR_PROCESSED, true];
|
||||
|
||||
SLX_XEH_OTHER_EVENTS = [XEH_EVENTS,XEH_CUSTOM_EVENTS]; // All events except the init event
|
||||
SLX_XEH_OTHER_EVENTS_FULL = [];
|
||||
{ SLX_XEH_OTHER_EVENTS_FULL pushBack format["Extended_%1_EventHandlers", _x] } forEach SLX_XEH_OTHER_EVENTS;
|
||||
SLX_XEH_OTHER_EVENTS_XEH = [];
|
||||
{ SLX_XEH_OTHER_EVENTS_XEH pushBack format["Extended_%1EH", _x] } forEach SLX_XEH_OTHER_EVENTS;
|
||||
SLX_XEH_OTHER_EVENTS_XEH_PLAYERS = [];
|
||||
{ SLX_XEH_OTHER_EVENTS_XEH_PLAYERS pushBack format["Extended_%1EH_Player", _x] } forEach SLX_XEH_OTHER_EVENTS;
|
||||
SLX_XEH_OTHER_EVENTS_PLAYERS = [];
|
||||
|
||||
// HitPart is special in that the passed parameter to the event handler is an array of arrays
|
||||
{
|
||||
if (_x == "HitPart") then
|
||||
{
|
||||
SLX_XEH_OTHER_EVENTS_PLAYERS pushBack (compile format["{ { _this call _x } forEach (((_this select 0) select 0) getVariable [SLX_XEH_STR_%1_Player,[]]) }",_x])
|
||||
}
|
||||
else
|
||||
{
|
||||
SLX_XEH_OTHER_EVENTS_PLAYERS pushBack (compile format["{ { _this call _x } forEach ((_this select 0) getVariable [SLX_XEH_STR_%1_Player,[]]) }",_x])
|
||||
}
|
||||
} forEach SLX_XEH_OTHER_EVENTS;
|
||||
|
||||
SLX_XEH_CONFIG_FILES = [configFile, campaignConfigFile, missionConfigFile];
|
||||
SLX_XEH_CONFIG_FILES_VARIABLE = [campaignConfigFile, missionConfigFile];
|
||||
|
||||
SLX_XEH_DEF_CLASSES = [SLX_XEH_STR, "All"];
|
||||
|
||||
// XEH for non XEH supported addons
|
||||
// Only works until someone uses removeAllEventhandlers on the object
|
||||
// Only works if there is at least 1 XEH-enabled object on the Map - Place SLX_XEH_Logic to make sure XEH initializes.
|
||||
// TODO: Perhaps do a config verification - if no custom eventhandlers detected in _all_ CfgVehicles classes, don't run this XEH handler - might be too much processing.
|
||||
SLX_XEH_EVENTS_NAT = [XEH_EVENTS];
|
||||
SLX_XEH_EVENTS_FULL_NAT = [];
|
||||
{ SLX_XEH_EVENTS_FULL_NAT pushBack format["Extended_%1_EventHandlers", _x] } forEach SLX_XEH_EVENTS_NAT;
|
||||
|
||||
SLX_XEH_EXCLUDES = []; // TODO: Anything else?? - Ammo crates for instance have no XEH by default due to crashes) - however, they don't appear in 'vehicles' list anyway.
|
||||
SLX_XEH_CLASSES = []; // Used to cache classes that have full XEH setup - TODO: Performance test.. Could use object with a variable space, classname as key
|
||||
SLX_XEH_FULL_CLASSES = []; // Used to cache classes that NEED full XEH setup
|
||||
SLX_XEH_EXCL_CLASSES = []; // Used for exclusion classes
|
||||
|
||||
|
||||
// Function Compilation
|
||||
SLX_XEH_LOG = { XEH_LOG(_this); };
|
||||
|
||||
PREP(init_once); // Pre and PostInits
|
||||
|
||||
PREP(init_delayed);
|
||||
PREP(init_playable);
|
||||
|
||||
// Inits and InitPosts
|
||||
PREP(init);
|
||||
PREP(init_enum);
|
||||
PREP(init_enum_cache);
|
||||
PREP(init_post);
|
||||
|
||||
// Init Others
|
||||
PREP(init_others);
|
||||
PREP(init_others_enum);
|
||||
PREP(init_others_enum_cache);
|
||||
|
||||
PREP(addPlayerEvents); // Add / Remove the playerEvents
|
||||
PREP(removePlayerEvents);
|
||||
PREP(support_monitor);
|
||||
PREP(support_monitor2);
|
||||
|
||||
call COMPILE_FILE(init_eh); // All XEH Event functions
|
||||
|
||||
|
||||
/*
|
||||
* Process the crews of vehicles. This "thread" will run just
|
||||
* before PostInit and the mission init.sqf is processed. The order of execution is
|
||||
*
|
||||
* 1) all config.cpp init EHs (including all Extended_Init_Eventhandlers)
|
||||
* 2) all the init lines in the mission.sqm
|
||||
* 3) spawn:ed "threads" are started
|
||||
* 4) the mission's init.sqf/sqs is run
|
||||
*/
|
||||
|
||||
GVAR(init_obj) = SLX_XEH_DUMMY createVehicleLocal [0, 0, 0];
|
||||
GVAR(init_obj) addEventHandler ["killed", {
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
XEH_LOG("XEH: VehicleCrewInit: "+str(count vehicles));
|
||||
#endif
|
||||
|
||||
{
|
||||
_sim = getText(configFile/"CfgVehicles"/(typeOf _x)/"simulation");
|
||||
_crew = crew _x;
|
||||
/*
|
||||
* If it's a vehicle then start event handlers for the crew.
|
||||
* (Vehicles have crew and are neither humanoids nor game logics)
|
||||
*/
|
||||
if (count _crew > 0 && {{ _sim == _x }count["soldier", "invisible"] == 0}) then {
|
||||
{ if !(_x in SLX_XEH_INIT_MEN) then { [_x] call SLX_XEH_EH_Init } } forEach _crew;
|
||||
};
|
||||
} forEach vehicles;
|
||||
SLX_XEH_INIT_MEN = nil;
|
||||
|
||||
deleteVehicle GVAR(init_obj);GVAR(init_obj) = nil
|
||||
}];
|
||||
|
||||
GVAR(init_obj) setDamage 1; // Schedule to run itsy bitsy later
|
||||
|
||||
// Prepare postInit
|
||||
GVAR(init_obj2) = SLX_XEH_DUMMY createVehicleLocal [0, 0, 0];
|
||||
GVAR(init_obj2) addEventHandler ["killed", {
|
||||
call COMPILE_FILE(init_post);
|
||||
deleteVehicle GVAR(init_obj2);GVAR(init_obj2) = nil;
|
||||
}];
|
||||
|
||||
// Schedule PostInit
|
||||
SLX_XEH_STR spawn {
|
||||
// Warn if PostInit takes longer than 10 tickTime seconds
|
||||
SLX_XEH_STR spawn {
|
||||
private["_time2Wait"];
|
||||
_time2Wait = diag_ticktime + 10;
|
||||
waituntil {diag_ticktime > _time2Wait};
|
||||
if !(SLX_XEH_MACHINE select 8) then {
|
||||
XEH_LOG("WARNING: PostInit did not finish in a timely fashion");
|
||||
waitUntil {time > 0};
|
||||
// Consider there will be no player if neither PostInit-Ready, nor PlayerCheck-Ready
|
||||
if !(SLX_XEH_MACHINE select 8 || {SLX_XEH_MACHINE select 5}) then { SLX_XEH_MACHINE set [13, true]; };
|
||||
};
|
||||
};
|
||||
|
||||
// On Server + Non JIP Client, we are now after all objects have inited
|
||||
// and at the briefing, still time == 0
|
||||
if (isNull player) then {
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
"NULL PLAYER" call SLX_XEH_LOG;
|
||||
#endif
|
||||
if !((SLX_XEH_MACHINE select 4) || {(SLX_XEH_MACHINE select 6)}) then { // only if MultiPlayer and not dedicated
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
"JIP" call SLX_XEH_LOG;
|
||||
#endif
|
||||
|
||||
SLX_XEH_MACHINE set [1, true]; // set JIP
|
||||
// TEST for weird jip-is-server-issue :S
|
||||
if (!(SLX_XEH_MACHINE select 2) || {SLX_XEH_MACHINE select 3} || {SLX_XEH_MACHINE select 4}) then {
|
||||
str(["WARNING: JIP Client, yet wrong detection", SLX_XEH_MACHINE]) call SLX_XEH_LOG;
|
||||
SLX_XEH_MACHINE set [2, true]; // set Dedicated client
|
||||
SLX_XEH_MACHINE set [3, false]; // set server
|
||||
SLX_XEH_MACHINE set [4, false]; // set dedicatedserver
|
||||
};
|
||||
waitUntil { !(isNull player) || {SLX_XEH_MACHINE select 13} };
|
||||
if (SLX_XEH_MACHINE select 13) then { XEH_LOG("WARNING: TimedOut waiting for player object to be ready. Continueing PostInit without Player ready") };
|
||||
};
|
||||
};
|
||||
|
||||
if !(isNull player) then {
|
||||
if (isNull (group player) && {player isKindOf "CAManBase"}) then {
|
||||
// DEBUG TEST: Crashing due to JIP, or when going from briefing
|
||||
// into game
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
"NULLGROUP" call SLX_XEH_LOG;
|
||||
#endif
|
||||
waitUntil { !(isNull (group player)) };
|
||||
};
|
||||
waitUntil { local player };
|
||||
};
|
||||
|
||||
GVAR(init_obj2) setDamage 1; // Schedule to run itsy bitsy later
|
||||
|
||||
SLX_XEH_MACHINE set [5, true]; // set player check = complete
|
||||
};
|
||||
|
||||
// Load and call any "pre-init", run-once event handlers
|
||||
/*
|
||||
Compile code strings in the Extended_PreInit_EventHandlers class and call
|
||||
them. This is done once per mission and before any extended init event
|
||||
handler code is run. An addon maker can put run-once initialisation code
|
||||
in such a pre-init "EH" rather than in a normal XEH init EH which might be
|
||||
called several times.
|
||||
*/
|
||||
{ (_x/SLX_XEH_STR_PreInit) call FUNC(init_once) } forEach SLX_XEH_CONFIG_FILES;
|
||||
|
||||
|
||||
XEH_LOG("XEH: PreInit Finished. " + PFORMAT_3("CACHE DISABLED? (Disable caching with cba_cache_disable.pbo)",SLX_XEH_RECOMPILE,CBA_COMPILE_RECOMPILE,CBA_FUNC_RECOMPILE));
|
Loading…
Reference in New Issue
Block a user