Fix attempt.

This commit is contained in:
voiper 2015-08-11 10:49:39 -07:00
parent e5eaefafdb
commit 2144a56be1
17 changed files with 502 additions and 41 deletions

View File

@ -15,6 +15,10 @@ class ACE_Settings {
value = 1; value = 1;
typeName = "BOOL"; typeName = "BOOL";
}; };
class GVAR(mapGlow) {
value = 1;
typeName = "BOOL";
};
class GVAR(mapShake) { class GVAR(mapShake) {
value = 1; value = 1;
typeName = "BOOL"; typeName = "BOOL";

48
addons/map/CfgAmmo.hpp Normal file
View File

@ -0,0 +1,48 @@
class CfgAmmo {
class FlareCore;
class FlareBase: FlareCore {};
class F_20mm_White: FlareBase {};
class ACE_FlashlightProxy_White: F_20mm_White {
model = "";
effectFlare = "FlareShell";
triggerTime = 0;
intensity = 1;
flareSize = 1;
timeToLive = 10e10;
lightColor[] = {1,1,1,1};
grenadeBurningSound[] = {};
grenadeFireSound[] = {};
soundTrigger[] = {};
SmokeShellSoundHit1[] = {};
SmokeShellSoundHit2[] = {};
SmokeShellSoundHit3[] = {};
SmokeShellSoundLoop1[] = {};
SmokeShellSoundLoop2[] = {};
};
class ACE_FlashlightProxy_Red: ACE_FlashlightProxy_White {
intensity = 2.5;
lightColor[] = {1,0,0,1};
};
class ACE_FlashlightProxy_Green: ACE_FlashlightProxy_White {
intensity = 1.5;
lightColor[] = {0,1,0,1};
};
class ACE_FlashlightProxy_Blue: ACE_FlashlightProxy_White {
intensity = 2.5;
lightColor[] = {0.25,0.25,1,1};
};
class ACE_FlashlightProxy_Yellow: ACE_FlashlightProxy_White {
intensity = 1.5;
lightColor[] = {1,1,0.5,1};
};
};

7
addons/map/CfgSounds.hpp Normal file
View File

@ -0,0 +1,7 @@
class CfgSounds {
class ACE_map_flashlightClick {
name = "ACE_map_flashlightClick";
sound[] = {"\a3\sounds_f\weapons\Other\dry4.wss", 0.2, 2};
titles[] = {};
};
};

View File

@ -1,4 +1,20 @@
class CfgVehicles { class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_SelfActions {
class ACE_MapFlashlight {
displayName = CSTRING(Action_Flashlights);
icon = QUOTE(\a3\ui_f\data\IGUI\Cfg\VehicleToggles\lightsiconon_ca.paa);
condition = QUOTE(GVAR(mapIllumination) && visibleMap && (count ([ACE_player] call FUNC(getUnitFlashlights)) > 0));
statement = "true";
exceptions[] = {"isNotDragging", "notOnMap", "isNotInside", "isNotSitting"};
insertChildren = QUOTE(_this call DFUNC(compileFlashlightMenu));
showDisabled = 0;
priority = 99;
};
};
};
class ACE_Module; class ACE_Module;
class ACE_ModuleMap: ACE_Module { class ACE_ModuleMap: ACE_Module {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
@ -15,6 +31,12 @@ class CfgVehicles {
typeName = "BOOL"; typeName = "BOOL";
defaultValue = 1; defaultValue = 1;
}; };
class MapGlow {
displayName = CSTRING(MapGlow_DisplayName);
description = CSTRING(MapGlow_Description);
typeName = "BOOL";
defaultValue = 1;
};
class MapShake { class MapShake {
displayName = CSTRING(MapShake_DisplayName); displayName = CSTRING(MapShake_DisplayName);
description = CSTRING(MapShake_Description); description = CSTRING(MapShake_Description);
@ -39,13 +61,14 @@ class CfgVehicles {
}; };
}; };
class ACE_ModuleBlueForceTracking: ACE_Module { class Module_F;
class ACE_ModuleBlueForceTracking: Module_F {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
category = "ACE"; category = "ACE";
displayName = CSTRING(BFT_Module_DisplayName); displayName = CSTRING(BFT_Module_DisplayName);
function = QFUNC(blueForceTrackingModule); function = QFUNC(blueForceTrackingModule);
scope = 2; scope = 2;
isGlobal = 0; isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_BFTracking_ca.paa); icon = PATHTOF(UI\Icon_Module_BFTracking_ca.paa);
class Arguments { class Arguments {
class Enabled { class Enabled {

View File

@ -1,23 +1,24 @@
#include "script_component.hpp" #include "script_component.hpp"
// Exit on Headless as well // Exit on Headless as well
if !(hasInterface) exitWith {}; if (!hasInterface) exitWith {};
LOG(MSG_INIT); LOG(MSG_INIT);
// Calculate the maximum zoom allowed for this map // Calculate the maximum zoom allowed for this map
call FUNC(determineZoom); call FUNC(determineZoom);
// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. [{
// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. if (isNull findDisplay 12) exitWith {};
[] spawn {
// Wait until the map display is detected
waitUntil {(!isNull findDisplay 12)};
GVAR(lastStillPosition) = ((findDisplay 12) displayCtrl 51) ctrlMapScreenToWorld [0.5, 0.5]; GVAR(lastStillPosition) = ((findDisplay 12) displayCtrl 51) ctrlMapScreenToWorld [0.5, 0.5];
GVAR(lastStillTime) = ACE_time; GVAR(lastStillTime) = ACE_time;
GVAR(isShaking) = false; GVAR(isShaking) = false;
//map sizes are multiples of 1280
GVAR(worldSize) = worldSize / 1280;
GVAR(mousePos) = [0.5,0.5];
//Allow panning the lastStillPosition while mapShake is active //Allow panning the lastStillPosition while mapShake is active
GVAR(rightMouseButtonLastPos) = []; GVAR(rightMouseButtonLastPos) = [];
((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapEffects);}]; ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapEffects);}];
@ -42,13 +43,60 @@ call FUNC(determineZoom);
GVAR(rightMouseButtonLastPos) = []; GVAR(rightMouseButtonLastPos) = [];
}; };
}]; }];
};
//get mouse position on map
((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["MouseMoving", {
GVAR(mousePos) = (_this select 0) ctrlMapScreenToWorld [_this select 1, _this select 2];
}];
((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["MouseHolding", {
GVAR(mousePos) = (_this select 0) ctrlMapScreenToWorld [_this select 1, _this select 2];
}];
[_this select 1] call CBA_fnc_removePerFrameHandler;
}, 0] call CBA_fnc_addPerFrameHandler;
["SettingsInitialized", { ["SettingsInitialized", {
// Start Blue Force Tracking if Enabled // Start Blue Force Tracking if Enabled
if (GVAR(BFT_Enabled)) then { if (GVAR(BFT_Enabled)) then {
diag_log text "[ACE] Blue Force Tracking Enabled (client)";
GVAR(BFT_markers) = []; GVAR(BFT_markers) = [];
[FUNC(blueForceTrackingUpdate), GVAR(BFT_Interval), []] call CBA_fnc_addPerFrameHandler; [FUNC(blueForceTrackingUpdate), GVAR(BFT_Interval), []] call CBA_fnc_addPerFrameHandler;
}; };
//illumination settings
if (GVAR(mapIllumination)) then {
GVAR(flashlightInUse) = "";
GVAR(aceNVG) = ["ace_nightvision"] call EFUNC(common,isModLoaded);
GVAR(glow) = objNull;
["playerInventoryChanged", {
_flashlights = [ACE_player] call FUNC(getUnitFlashlights);
if ((GVAR(flashlightInUse) != "") && !(GVAR(flashlightInUse) in _flashlights)) then {
GVAR(flashlightInUse) = "";
};
}] call EFUNC(common,addEventHandler);
if (GVAR(mapGlow)) then {
["visibleMapChanged", {
params ["_player", "_mapOn"];
if (_mapOn) then {
if (!alive _player && !isNull GVAR(glow)) then {
GVAR(flashlightInUse) = "";
};
if (GVAR(flashlightInUse) != "") then {
if (isNull GVAR(glow)) then {
[GVAR(flashlightInUse)] call FUNC(flashlightGlow);
};
} else {
if (!isNull GVAR(glow)) then {
[""] call FUNC(flashlightGlow);
};
};
} else {
if (!isNull GVAR(glow)) then {
[""] call FUNC(flashlightGlow);
};
};
}] call EFUNC(common,addEventHandler);
};
};
}] call EFUNC(common,addEventHandler); }] call EFUNC(common,addEventHandler);

View File

@ -5,10 +5,15 @@ LOG(MSG_INIT);
PREP(blueForceTrackingModule); PREP(blueForceTrackingModule);
PREP(blueForceTrackingUpdate); PREP(blueForceTrackingUpdate);
PREP(compileFlashlightMenu);
PREP(determineMapLight); PREP(determineMapLight);
PREP(determineZoom); PREP(determineZoom);
PREP(flashlightGlow);
PREP(getUnitFlashlights);
PREP(moduleMap); PREP(moduleMap);
PREP(onDrawMap); PREP(onDrawMap);
PREP(simulateMapLight);
PREP(switchFlashlight);
PREP(updateMapEffects); PREP(updateMapEffects);
ADDON = true; ADDON = true;

View File

@ -27,6 +27,8 @@ class RscEdit;
#include "CfgEventHandlers.hpp" #include "CfgEventHandlers.hpp"
#include "CfgMarkers.hpp" #include "CfgMarkers.hpp"
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"
#include "CfgAmmo.hpp"
#include "CfgSounds.hpp"
class RscMapControl { class RscMapControl {
maxSatelliteAlpha = 0.5; maxSatelliteAlpha = 0.5;

View File

@ -12,12 +12,15 @@
#include "script_component.hpp" #include "script_component.hpp"
if (!isServer) exitWith {}; if !(hasInterface) exitWith {};
PARAMS_1(_logic); PARAMS_3(_logic,_units,_activated);
if !(_activated) exitWith {};
[_logic, QGVAR(BFT_Enabled), "Enabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(BFT_Enabled), "Enabled"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(BFT_Interval), "Interval"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(BFT_Interval), "Interval"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(BFT_HideAiGroups), "HideAiGroups"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(BFT_HideAiGroups), "HideAiGroups"] call EFUNC(common,readSettingFromModule);
diag_log text "[ACE]: Blue Force Tracking Module initialized. (server)"; diag_log text "[ACE]: Blue Force Tracking Module initialized.";
TRACE_2("[ACE]: Blue Force Tracking Module initialized.", GVAR(BFT_Interval), GVAR(BFT_HideAiGroups));

View File

@ -0,0 +1,65 @@
/*
* Author: voiper
* Compile list of flashlight classnames and add to the "Flashlight" parent menu.
*
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Player <OBJECT>
* 3: Parameters <ARRAY>
*
* Return value:
* None
*
* Example:
* [_player, _player, []] call ace_map_fnc_compileFlashlightMenu;
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle", "_player", "_parameters"];
_actions = [];
_flashlights = [_player] call FUNC(getUnitFlashlights);
//add all carried flashlight menus and on/off submenu actions
{
_displayName = getText (configFile >> "CfgWeapons" >> _x >> "displayName");
_icon = getText (configFile >> "CfgWeapons" >> _x >> "picture");
_children = {
params ["_vehicle", "_player", "_flashlight"];
_actions = [];
_onAction = [
(_flashlight + "_On"),
"On",
"",
{[_this select 2] call FUNC(switchFlashlight)},
{GVAR(flashlightInUse) != (_this select 2)},
{},
_flashlight
] call EFUNC(interact_menu,createAction);
_offAction = [
(_flashlight + "_Off"),
"Off",
"",
{[""] call FUNC(switchFlashlight)},
{GVAR(flashlightInUse) == (_this select 2)},
{},
_flashlight
] call EFUNC(interact_menu,createAction);
_actions pushBack [_onAction, [], _player];
_actions pushBack [_offAction, [], _player];
_actions
};
_parentAction = [_x, _displayName, _icon, {true}, {true}, _children, _x] call EFUNC(interact_menu,createAction);
_actions pushBack [_parentAction, [], _player];
} forEach _flashlights;
_actions

View File

@ -55,11 +55,13 @@ _fnc_calcColor = {
_lightLevel = 0.04 + (0.96 * call EFUNC(common,ambientBrightness)); _lightLevel = 0.04 + (0.96 * call EFUNC(common,ambientBrightness));
/*
// check if player has NVG enabled // check if player has NVG enabled
if (currentVisionMode _unit == 1) exitWith { if (currentVisionMode _unit == 1) exitWith {
// stick to nvg color // stick to nvg color
[true, [154/255,253/255,177/255,0.5]] [true, [154/255,253/255,177/255,0.5]]
}; };
*/
// Do not obscure the map if the ambient light level is above 0.95 // Do not obscure the map if the ambient light level is above 0.95
if (_lightLevel > 0.95) exitWith { if (_lightLevel > 0.95) exitWith {

View File

@ -0,0 +1,41 @@
/*
* Author: voiper
* Add or remove global flashlight glow for when player is looking at map.
*
* Arguments:
* 0: Flashlight classname ("" for off) <STRING>
*
* Return value:
* None
*
* Example:
* ["ACE_Flashlight_MX991"] call ace_map_fnc_flashlightGlow;
*
* Public: No
*/
#include "script_component.hpp"
params ["_flashlight"];
_light = GVAR(glow);
if (!isNull _light) then {deleteVehicle _light};
if (_flashlight != "") then {
_colour = getText (configFile >> "CfgWeapons" >> _flashlight >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Colour");
_class = switch (_colour) do {
case "white": {"ACE_FlashlightProxy_White"};
case "red": {"ACE_FlashlightProxy_Red"};
case "green": {"ACE_FlashlightProxy_Green"};
case "blue": {"ACE_FlashlightProxy_Blue"};
case "yellow": {"ACE_FlashlightProxy_Yellow"};
};
_light = _class createVehicle [0,0,0];
_light attachTo [ACE_player, [0,0.5,-0.1], "head"];
} else {
_light = objNull;
};
GVAR(glow) = _light;

View File

@ -0,0 +1,29 @@
/*
* Author: voiper
* Check a unit for any flashlights that can be used on map.
*
* Arguments:
* 0: Unit to check <OBJECT>
*
* Return value:
* Flashlight classnames (empty for none) <ARRAY>
*
* Example:
* [unit] call ace_map_fnc_getUnitFlashlights;
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit"];
_flashlights = [];
{
if ((isText (configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Colour")) && !(_x in _flashlights)) then {
_flashlights pushBack _x;
};
} forEach (items _unit);
_flashlights

View File

@ -8,15 +8,17 @@
* Return Value: * Return Value:
* None * None
*/ */
#include "script_component.hpp" #include "script_component.hpp"
if !(isServer) exitWith {}; if !(isServer) exitWith {};
PARAMS_3(_logic,_units,_activated); params ["_logic", "_units", "_activated"];
if !(_activated) exitWith {}; if !(_activated) exitWith {};
[_logic, QGVAR(mapIllumination), "MapIllumination" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(mapIllumination), "MapIllumination" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapGlow), "MapGlow" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] call EFUNC(common,readSettingFromModule);

View File

@ -0,0 +1,136 @@
/*
* Author: voiper
* Draw sexy flashlight beams and NVG on main map.
*
* Arguments:
* 0: Map control (Control)
* 1: Map zoom level (Number)
* 2: Current map centre (Array)
* 3: Light level from ace_map_fnc_determineMapLight (Array)
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_mapCtrl", "_mapScale", "_mapCentre", "_lightLevel"];
_hmd = hmd ACE_player;
_nvgOn = (((getText (configFile >> 'CfgWeapons' >> _hmd >> 'simulation')) == 'NVGoggles') && (currentVisionMode ACE_player == 1));
_aceNVG = GVAR(aceNVG);
_flashlight = GVAR(flashlightInUse);
//map width (on screen) in pixels
_screenSize = 640 * safeZoneW;
//resolution params (every frame in case resolution change)
getResolution params ["_resX", "_resY", "_viewPortX", "_viewPortY", "", "_uiScale"];
//engine rounds the viewport ratios, when they should be fractions; this can cause problems
_realViewPortY = _resY * _uiScale;
_realViewPortX = _realViewPortY * 4/3;
//textures
_blackTex = "#(rgb,8,8,3)color(0,0,0,1)";
_whiteTex = "#(rgb,8,8,3)color(1,1,1,1)";
//colour/alpha
_lightLevel params ["_r", "_g", "_b", "_a"];
_colourAlpha = (_r + _g + _b) min _a;
_shadeAlpha = _a;
if (_nvgOn) then {
_flashlightAdd = if (_flashlight != "") then {0.75} else {0};
_shadeAlpha = 0.8 - _a + _flashlightAdd;
_fillTex = _whiteTex;
if (_aceNVG) then {
_nvgAlpha = ACE_player getVariable [QEGVAR(nightvision,NVGBrightness), 0];
if (_nvgAlpha >= 0) then {
_shadeAlpha = _shadeAlpha + _nvgAlpha / 2;
} else {
//if flashlight off
if (_flashlight == "") then {
//if there's nearby light
if (_shadeAlpha > 0) then {
_shadeAlpha = _shadeAlpha + _nvgAlpha / 2;
} else {
_fillTex = _blackTex;
_shadeAlpha = -_nvgAlpha / 1.5;
};
} else {
_shadeAlpha = _shadeAlpha + _nvgAlpha;
};
};
_grainConfig = (configFile >> "CfgWeapons" >> _hmd >> "ACE_NightVision_grain");
_grain = if (isNumber _grainConfig) then {
(getNumber _grainConfig) / 2
} else {
0
};
if (_grain > 0) then {
_posX = (_mapCentre select 0) + (_mapScale * random 500);
_posY = (_mapCentre select 1) + (_mapScale * random 500);
_mapCtrl drawIcon [format["#(ai,2048,2048,1)perlinNoise(%1,%2,0,1)", _resX, _resX], [0.25,0.25,0.25,_grain], [_posX, _posY], _screenSize * 2.5, _screenSize * 2.5, 0, "", 0]; //noise
};
};
_mapCtrl drawIcon ["#(rgb,8,8,3)color(0,0.5,0,1)", [1,1,1,0.5], _mapCentre, _screenSize, _screenSize, 0, "", 0]; //nvg green
_mapCtrl drawIcon [_fillTex, [1,1,1,_shadeAlpha], _mapCentre, _screenSize, _screenSize, 0, "", 0]; //alpha fill
} else {
_fillTex = _blackTex;
_colourList = [_r, _g, _b];
_colourList sort false;
_maxColour = _colourList select 0;
//ambient colour fill
_mapCtrl drawIcon [format["#(rgb,8,8,3)color(%1,%2,%3,1)", _r / _maxColour, _g / _maxColour, _b / _maxColour], [1,1,1,_colourAlpha], _mapCentre, _screenSize, _screenSize, 0, "", 0];
if (_flashlight == "") then {
//ambient shade fill
_mapCtrl drawIcon [_fillTex, [1,1,1,_shadeAlpha], _mapCentre, _screenSize, _screenSize, 0, "", 0];
} else {
//mouse pos
_mousePos = GVAR(mousePos);
//flashlight settings
_colour = getText (configFile >> "CfgWeapons" >> _flashlight >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Colour");
_size = getNumber (configFile >> "CfgWeapons" >> _flashlight >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Size");
_flashTex = format[QUOTE(PATHTOF_SYS(ace,flashlights,UI\Flashlight_Beam_%1_ca.paa)), _colour];
_beamSize = _screenSize / _size;
//after 5x zoom, it's simulated to be fixed (it actually gets bigger relative to zoom)
if (_mapScale < 0.2) then {_beamSize = _beamSize / (_mapScale * (1 / 0.2))};
//assign corrective ratio to fix sub-pixel gaps/overlaps (symptom of viewport * X/Y resolution rounding)
_viewPortRatioFixY = if (_realViewPortY != _viewPortY) then {
_realViewPortX / (_realViewPortY / _viewPortY * _viewPortX)
} else {
if (_realViewPortX != _viewPortX) then {
_realViewPortX / _viewPortX
} else {
1
};
};
//offset the elements
_offsetX = _mapScale * GVAR(worldSize) * (_screenSize * 2 + _beamSize);
_offsetYDown = _mapScale * GVAR(worldSize) * (_screenSize + _beamSize) * _viewPortRatioFixY;
//up is bigger because of a potential exploit
_offsetYUp = _mapScale * GVAR(worldSize) * (_screenSize * 4 + _beamSize) * _viewPortRatioFixY;
//draw the matrix /whoa
_mapCtrl drawIcon [_flashTex, [1,1,1,_shadeAlpha], _mousePos, _beamSize, _beamSize, 0, "", 0]; //centre beam
_mapCtrl drawIcon [_fillTex, [1,1,1,_shadeAlpha], [(_mousePos select 0) - _offsetX, (_mousePos select 1)], _screenSize * 2, _beamSize, 0, "", 0]; //left
_mapCtrl drawIcon [_fillTex, [1,1,1,_shadeAlpha], [(_mousePos select 0) + _offsetX, (_mousePos select 1)], _screenSize * 2, _beamSize, 0, "", 0]; //right
_mapCtrl drawIcon [_fillTex, [1,1,1,_shadeAlpha], [(_mousePos select 0), (_mousePos select 1) - _offsetYDown], _screenSize * 4, _screenSize, 0, "", 0]; //down
_mapCtrl drawIcon [_fillTex, [1,1,1,_shadeAlpha], [(_mousePos select 0), (_mousePos select 1) + _offsetYUp], _screenSize * 4, _screenSize * 4, 0, "", 0]; //up
};
};

View File

@ -0,0 +1,25 @@
/*
* Author: voioper
* Switch flashlight.
*
* Arguments:
* 0: Flashlight classname ("" for off) <STRING>
*
* Return value:
* None
*
* Example:
* ["ACE_Flashlight_MX991"] call ace_map_fnc_switchFlashlight;
*
* Public: No
*/
#include "script_component.hpp"
params ["_flashlight"];
GVAR(flashlightInUse) = _flashlight;
if (GVAR(mapGlow)) then {
[GVAR(flashlightInUse)] call FUNC(flashlightGlow);
};
playSound "ACE_map_flashlightClick";

View File

@ -10,23 +10,21 @@
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_mapCtrl","_mapScale"]; _mapCtrl = findDisplay 12 displayCtrl 51;
_mapCtrl = ((findDisplay 12) displayCtrl 51);
_mapScale = ctrlMapScale _mapCtrl; _mapScale = ctrlMapScale _mapCtrl;
_mapCentre = _mapCtrl ctrlMapScreenToWorld [0.5, 0.5];
if (GVAR(mapIllumination)) then { if (GVAR(mapIllumination)) then {
private ["_data","_darkenFill"]; //get nearby lighting
_light = [[ACE_player], FUNC(determineMapLight), missionNamespace, QGVAR(mapLight), 0.1] call EFUNC(common,cachedCall);
// Calculate map illumination _light params ["_applyLighting", "_lightLevel"];
_data = [[ACE_player], FUNC(determineMapLight), missionNamespace, QGVAR(mapLight), 0.1] call EFUNC(common,cachedCall);
EXPLODE_2_PVT(_data,_darkenMap,_darkenColor); if (_applyLighting) then {
if (_darkenMap) then { [_mapCtrl, _mapScale, _mapCentre, _lightLevel] call FUNC(simulateMapLight);
_darkenFill = format["#(rgb,1,1,1)color(%1,%2,%3,%4)",_darkenColor select 0, _darkenColor select 1, _darkenColor select 2, _darkenColor select 3];
_mapCtrl drawRectangle [(getArray(configFile >> 'CfgWorlds' >> worldName >> 'centerPosition')),80000,80000,0,_darkenColor,_darkenFill];
}; };
}; };
@ -63,7 +61,7 @@ if (GVAR(mapShake)) then {
GVAR(isShaking) = false; GVAR(isShaking) = false;
} else { } else {
// The map is still, store state // The map is still, store state
GVAR(lastStillPosition) = _mapCtrl ctrlMapScreenToWorld [0.5, 0.5]; GVAR(lastStillPosition) = _mapCentre;
GVAR(lastStillTime) = ACE_time; GVAR(lastStillTime) = ACE_time;
}; };
}; };
@ -72,7 +70,7 @@ if (GVAR(mapShake)) then {
if (GVAR(mapLimitZoom)) then { if (GVAR(mapLimitZoom)) then {
if (GVAR(minMapSize) >= _mapScale) then { if (GVAR(minMapSize) >= _mapScale) then {
ctrlMapAnimClear _mapCtrl; ctrlMapAnimClear _mapCtrl;
_mapCtrl ctrlMapAnimAdd [0, GVAR(minMapSize) + 0.001, (_mapCtrl ctrlMapScreenToWorld [0.5, 0.5])]; _mapCtrl ctrlMapAnimAdd [0, GVAR(minMapSize) + 0.001, _mapCentre];
ctrlMapAnimCommit _mapCtrl; ctrlMapAnimCommit _mapCtrl;
}; };
}; };

View File

@ -18,12 +18,13 @@
<Portuguese>Iluminação do mapa?</Portuguese> <Portuguese>Iluminação do mapa?</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Map_MapIllumination_Description"> <Key ID="STR_ACE_Map_MapIllumination_Description">
<English>Calculate dynamic map illumination based on light conditions?</English> <English>Simulate map lighting based on ambient lighting and player's items?</English>
<Polish>Oblicza dynamiczne oświetlenie mapy bazujące na warunkach oświetleniowych</Polish> </Key>
<Spanish>Calcula la iluminación dinámica del mapa basandose en las condiciones de luz</Spanish> <Key ID="STR_ACE_Map_MapGlow_DisplayName">
<German>Berechne die Kartenauslichtung anhand des Umgebungslichts?</German> <English>Map flashlight glow?</English>
<Czech>Vypočítat dynamické osvětlení mapy na základně světelných podmínek?</Czech> </Key>
<Portuguese>Calcular a iluminação dinâmica do mapa de acordo com as condições de luz?</Portuguese> <Key ID="STR_ACE_Map_MapGlow_Description">
<English>Add external glow to players who use flashlight on map?</English>
</Key> </Key>
<Key ID="STR_ACE_Map_MapShake_DisplayName"> <Key ID="STR_ACE_Map_MapShake_DisplayName">
<English>Map shake?</English> <English>Map shake?</English>
@ -74,7 +75,7 @@
<Portuguese>Mostrar as coordenadas de grade no ponteiro do mouse?</Portuguese> <Portuguese>Mostrar as coordenadas de grade no ponteiro do mouse?</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Map_Module_Description"> <Key ID="STR_ACE_Map_Module_Description">
<English>This module allows you to customize the map screen.</English> <English></English>
<Polish>Moduł ten pozwala dostosować opcje widoku ekranu mapy.</Polish> <Polish>Moduł ten pozwala dostosować opcje widoku ekranu mapy.</Polish>
<German>Dieses Modul erweitert die Kartenfunktionen.</German> <German>Dieses Modul erweitert die Kartenfunktionen.</German>
<Czech>Tento modul umožňuje přizpůsobit mapu s obrazem.</Czech> <Czech>Tento modul umožňuje přizpůsobit mapu s obrazem.</Czech>
@ -83,7 +84,7 @@
<Key ID="STR_ACE_Map_BFT_Module_DisplayName"> <Key ID="STR_ACE_Map_BFT_Module_DisplayName">
<English>Blue Force Tracking</English> <English>Blue Force Tracking</English>
<Polish>Blue Force Tracking</Polish> <Polish>Blue Force Tracking</Polish>
<Spanish>Blue Force Tracking</Spanish> <Spanish>Seguimiento de fuerzas amigas</Spanish>
<German>Blue Force Tracking</German> <German>Blue Force Tracking</German>
<Czech>Blue Force Tracking</Czech> <Czech>Blue Force Tracking</Czech>
<Portuguese>Rastreio de forças azuis</Portuguese> <Portuguese>Rastreio de forças azuis</Portuguese>
@ -93,14 +94,12 @@
<Portuguese>RFA ativo</Portuguese> <Portuguese>RFA ativo</Portuguese>
<Polish>Aktywuj BFT</Polish> <Polish>Aktywuj BFT</Polish>
<Czech>Povolit BFT</Czech> <Czech>Povolit BFT</Czech>
<Spanish>Activar BFT</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Map_BFT_Enabled_Description"> <Key ID="STR_ACE_Map_BFT_Enabled_Description">
<English>Enable Blue Force Tracking. Default: No</English> <English>Enable Blue Force Tracking. Default: No</English>
<Portuguese>Ativa Rastreio de Forças Azuis. Padrão: Não</Portuguese> <Portuguese>Ativa Rastreio de Forças Azuis. Padrão: Não</Portuguese>
<Polish>Aktywuj Blue Force Tracking. Domyślnie: Nie</Polish> <Polish>Aktywuj Blue Force Tracking. Domyślnie: Nie</Polish>
<Czech>Povolit Blue Force Tracking. Výchozí: Ne</Czech> <Czech>Povolit Blue Force Tracking. Výchozí: Ne</Czech>
<Spanish>Activar Blue Force Tracking. Por defecto: No</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Map_BFT_Interval_DisplayName"> <Key ID="STR_ACE_Map_BFT_Interval_DisplayName">
<English>Interval</English> <English>Interval</English>
@ -135,11 +134,35 @@
<Portuguese>Esconder marcadores que pertencem ao grupo de IA?</Portuguese> <Portuguese>Esconder marcadores que pertencem ao grupo de IA?</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Map_BFT_Module_Description"> <Key ID="STR_ACE_Map_BFT_Module_Description">
<English>This module allows the tracking of allied units with BFT map markers.</English> <English></English>
<Polish>Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT.</Polish> <Polish>Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT.</Polish>
<German>Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen.</German> <German>Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen.</German>
<Czech>Umožňuje sledovat přátelské jednokty na mapě v rámci BFT.</Czech> <Czech>Umožňuje sledovat přátelské jednokty na mapě v rámci BFT.</Czech>
<Portuguese>Permite que você acompanhe as posições no mapa das unidades aliadas com marcadores RFA.</Portuguese> <Portuguese>Permite que você acompanhe as posições no mapa das unidades aliadas com marcadores RFA.</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Map_Action_Flashlights">
<English>Flashlights</English>
<Polish>Latarki</Polish>
</Key>
<Key ID="STR_ACE_Map_Action_NVG">
<English>NVG</English>
<Polish>Noktowizja</Polish>
</Key>
<Key ID="STR_ACE_Map_Action_NVGOn">
<English>On</English>
<Polish>Włącz</Polish>
</Key>
<Key ID="STR_ACE_Map_Action_NVGOff">
<English>Off</English>
<Polish>Wyłącz</Polish>
</Key>
<Key ID="STR_ACE_Map_Action_NVGUp">
<English>Increase Brightness</English>
<Polish>Zwiększ czułość</Polish>
</Key>
<Key ID="STR_ACE_Map_Action_NVGDown">
<English>Decrease Brightness</English>
<Polish>Zmniejsz czułość</Polish>
</Key>
</Package> </Package>
</Project> </Project>