Merge pull request #2133 from jonpas/dynamicViewDistance

Mk 1 eyeballs Integration
This commit is contained in:
Thomas Kooi 2015-11-28 20:40:29 +01:00
commit c132ef86cf
16 changed files with 115 additions and 46 deletions

View File

@ -37,6 +37,7 @@ alef <alefor@gmail.com>
Aleksey EpMAK Yermakov <epmak777@gmail.com>
Alganthe <alganthe@live.fr>
Anthariel <Contact@storm-simulation.com>
Arkhir <wonsz666@gmail.com >
Asgar Serran <piechottaf@web.de>
Bamse <bamsis@gmail.com>
Bla1337

View File

@ -9,7 +9,7 @@ class ACE_Settings {
typeName = "SCALAR";
isClientSettable = 1;
value = 0; // index, NOT value // Can set it to client's actual viewdistance in the init function once ACE_Settings supports numbers (if ever).
values[] = {CSTRING(videosettings),"500","1000","1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf
values[] = {CSTRING(videosettings), "500", "1000", "1500", "2000", "2500", "3000", "3500", "4000", "5000", "6000", "7000", "8000", "9000", "10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf
displayName = CSTRING(onFoot_DisplayName);
description = CSTRING(onFoot_Description);
};
@ -17,7 +17,7 @@ class ACE_Settings {
typeName = "SCALAR";
isClientSettable = 1;
value = 0; // index, NOT value
values[] = {CSTRING(videosettings),"500","1000","1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf
values[] = {CSTRING(videosettings), "500", "1000", "1500", "2000", "2500", "3000", "3500", "4000", "5000", "6000", "7000", "8000", "9000", "10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf
displayName = CSTRING(landVehicle_DisplayName);
description = CSTRING(landVehicle_Description);
};
@ -25,7 +25,7 @@ class ACE_Settings {
typeName = "SCALAR";
isClientSettable = 1;
value = 0; // index, NOT value
values[] = {CSTRING(videosettings),"500","1000","1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf
values[] = {CSTRING(videosettings), "500", "1000", "1500", "2000", "2500", "3000", "3500", "4000", "5000", "6000", "7000", "8000", "9000", "10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf
displayName = CSTRING(airVehicle_DisplayName);
description = CSTRING(airVehicle_Description);
};
@ -39,7 +39,7 @@ class ACE_Settings {
typeName = "SCALAR";
isClientSettable = 1;
value = 0; // index. Actual coefficient is given by functions/fnc_returnObjectCoeff.sqf
values[] = {CSTRING(object_off),CSTRING(object_verylow),CSTRING(object_low),CSTRING(object_medium),CSTRING(object_high),CSTRING(object_veryhigh)};
values[] = {CSTRING(object_off), CSTRING(object_verylow), CSTRING(object_low), CSTRING(object_medium),CSTRING(object_high), CSTRING(object_veryhigh), CSTRING(object_fovBased)};
displayName = CSTRING(object_DisplayName);
description = CSTRING(object_Description);
};

View File

@ -1,4 +1,3 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
@ -7,6 +6,6 @@ class Extended_PreInit_EventHandlers {
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit));
};
};
};

View File

@ -1,7 +1,7 @@
ace_viewdistance
===========
Adds various View Distance settings and allows limiting maximum view distance that can be set by players.
Adds various View Distance settings, including Field of View based Object View Distance, and allows limiting maximum view distance that can be set by players.
## Maintainers
@ -9,3 +9,4 @@ Adds various View Distance settings and allows limiting maximum view distance th
The people responsible for merging changes to this component or answering potential questions.
- [Winter](https://github.com/Winter259)
- [Jonpas](https://github.com/jonpas)

View File

@ -11,10 +11,11 @@ if (!hasInterface) exitWith {};
// Set the EH which waits for any of the view distance settings to be changed, so that the effect is show immediately
["SettingChanged",{
if ((_this select 0 == QGVAR(viewDistanceOnFoot)) ||
(_this select 0 == QGVAR(viewDistanceLandVehicle)) ||
(_this select 0 == QGVAR(viewDistanceAirVehicle)) ||
(_this select 0 == QGVAR(objectViewDistanceCoeff))) then {
params ["_name"];
if ((_name == QGVAR(viewDistanceOnFoot)) ||
(_name == QGVAR(viewDistanceLandVehicle)) ||
(_name == QGVAR(viewDistanceAirVehicle)) ||
(_name == QGVAR(objectViewDistanceCoeff))) then {
[true] call FUNC(adaptViewDistance);
};

View File

@ -2,10 +2,11 @@
ADDON = false;
PREP(initModule);
PREP(returnValue);
PREP(returnObjectCoeff);
PREP(changeViewDistance);
PREP(adaptViewDistance);
PREP(changeViewDistance);
PREP(initModule);
PREP(returnObjectCoeff);
PREP(returnValue);
PREP(setFovBasedOvdPFH);
ADDON = true;
ADDON = true;

View File

@ -6,7 +6,7 @@ class CfgPatches {
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"Winter"};
author[] = {"Winter", "Jonpas", "Arkhir"};
authorUrl = "https://github.com/Winter259";
VERSION_CONFIG;
};
@ -14,4 +14,4 @@ class CfgPatches {
#include "CfgEventHandlers.hpp"
#include "ACE_Settings.hpp"
#include "CfgVehicles.hpp"
#include "CfgVehicles.hpp"

View File

@ -10,7 +10,7 @@
* None
*
* Example:
* [] call ace_viewdistance_fnc_adaptViewDistance;
* [] call ace_viewdistance_fnc_adaptViewDistance
*
* Public: No
*/
@ -36,4 +36,4 @@ if (_land_vehicle) exitWith {
if (_air_vehicle) exitWith {
[GVAR(viewDistanceAirVehicle),_show_prompt] call FUNC(changeViewDistance);
};
};

View File

@ -2,7 +2,6 @@
* Author: Winter
* Sets the player's current view distance according to allowed values.
*
*
* Arguments:
* 0: View Distance setting INDEX <SCALAR>
* 1: Show Prompt <BOOL>
@ -11,14 +10,13 @@
* None
*
* Example:
* [] call ace_viewdistance_fnc_changeViewDistance;
* [] call ace_viewdistance_fnc_changeViewDistance
*
* Public: No
*/
#include "script_component.hpp"
private ["_text","_new_view_distance","_view_distance_limit","_object_view_distance_coeff"];
private ["_text", "_new_view_distance", "_view_distance_limit", "_object_view_distance_coeff"];
params ["_index_requested", "_show_prompt"];
@ -29,19 +27,34 @@ _view_distance_limit = GVAR(limitViewDistance); // Grab the limit
TRACE_2("Limit",_new_view_distance,_view_distance_limit);
setViewDistance (_new_view_distance min _view_distance_limit);
if (_object_view_distance_coeff > 0) then {
setObjectViewDistance (_object_view_distance_coeff * viewDistance);
if (typeName _object_view_distance_coeff == "SCALAR") then {
if (_object_view_distance_coeff > 0) then {
setObjectViewDistance (_object_view_distance_coeff * viewDistance);
} else {
// Restore correct view distance when changing from FoV Based to Off
// Restoring directly inside PFH's self-exit resulted in the need of selecting another option to take effect
setObjectViewDistance GVAR(fovBasedPFHminimalViewDistance);
};
} else {
if (isNil QGVAR(fovBasedPFHminimalViewDistance)) then {
GVAR(fovBasedPFHminimalViewDistance) = getObjectViewDistance select 0; // Minimal view distance holder and PFH isRunning variable
[FUNC(setFovBasedOvdPFH), 0, []] call CBA_fnc_addPerFrameHandler;
};
};
if (_show_prompt) then {
_text = if (_new_view_distance <= _view_distance_limit) then {
format ["<t align='center'>%1 %2m", (localize "STR_ACE_ViewDistance_infotext"), str(viewDistance)];
} else {
format ["<t align='center'>%1 %2m", (localize "STR_ACE_ViewDistance_invalid"), str(viewDistance)];
};
if (GVAR(objectViewDistanceCoeff) > 0) then {
_text = _text + format ["<br/><t align='center'>%1 %2%3</t>", (localize "STR_ACE_ViewDistance_objectinfotext"), str(_object_view_distance_coeff * 100),"%"];
// FoV Based or %
if (GVAR(objectViewDistanceCoeff) == 6) then {
_text = format ["<t align='center'>%1 %2<br/>Min. %3<br/>Max. %4</t>", localize LSTRING(objectinfotext), localize LSTRING(object_fovBased), GVAR(fovBasedPFHminimalViewDistance), viewDistance];
} else {
_text = if (_new_view_distance <= _view_distance_limit) then {
format ["<t align='center'>%1 %2m", localize LSTRING(infotext), viewDistance];
} else {
format ["<t align='center'>%1 %2m", localize LSTRING(invalid), viewDistance];
};
_text = _text + format ["<br/><t align='center'>%1 %2%3</t>", localize LSTRING(objectinfotext), _object_view_distance_coeff * 100, "%"];
};
[parseText _text, 2] call EFUNC(common,displayTextStructured);
};
[parseText _text,2] call EFUNC(common,displayTextStructured);
};

View File

@ -1,7 +1,6 @@
/*
* Author: Winter
* Initialises the view distance limiter module
*
* Initializes the view distance limiter module.
*
* Arguments:
* 0: logic <OBJECT>
@ -10,7 +9,6 @@
*
* Return Value:
* None
*
*/
#include "script_component.hpp"

View File

@ -2,7 +2,6 @@
* Author: Winter
* Returns the object view distance coefficient according to the given index
*
*
* Arguments:
* 0: Object View Distance setting Index <SCALAR>
*
@ -28,6 +27,7 @@ _return = switch (_index) do {
case 3: {0.60}; // Medium
case 4: {0.80}; // High
case 5: {1.00}; // Very High
case 6: {"fov"}; // FoV Based
default {0.50}; // something broke if this returns
};

View File

@ -1,7 +1,6 @@
/*
* Author: Winter
* Returns the view distance value according to the given index
*
* Returns the view distance value according to the given index.
*
* Arguments:
* 0: View Distance Index <SCALAR>
@ -10,7 +9,7 @@
* View Distance <SCALAR>
*
* Example:
* [2] call ace_viewdistance_fnc_returnViewDistanceValue;
* [2] call ace_viewdistance_fnc_returnViewDistanceValue
*
* Public: No
*/

View File

@ -0,0 +1,53 @@
/*
* Author: Jonpas
* Sets Object View Distance dynamically based on current Field of View, between Object View Distance (minimal value) and View Distance (maximum value) set before this PFH starts.
*
* Arguments:
* 0: PFH Arguments <ARRAY>
* 1: PFH Handle <NUMBER>
*
* Return Value:
* PFH Handle <NUMBER>
*
* Example:
* [] call ace_viewdistance_fnc_setFovBasedOvdPFH
*
* Public: No
*/
#include "script_component.hpp"
#define VD_ZOOM_NORMAL 1.00041
#define VD_ZOOM_DIVISION 35
#define VD_ZOOM_DIVISION_AIR 10
params ["", "_idPFH"];
// Remove PFH and set Object View Distance back to what it was before
if (GVAR(objectViewDistanceCoeff) < 6) exitWith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
GVAR(fovBasedPFHminimalViewDistance) = nil;
};
private ["_zoom"];
_zoom = (call CBA_fnc_getFov) select 1;
// Air
if ((vehicle ACE_player) isKindOf "Air") exitWith {
if (_zoom > VD_ZOOM_NORMAL) then {
// Dynamically set Object View Distance based on player's Zoom Level and View Distance
setObjectViewDistance ((_zoom / VD_ZOOM_DIVISION_AIR * (viewDistance - GVAR(fovBasedPFHminimalViewDistance))) + GVAR(fovBasedPFHminimalViewDistance));
} else {
setObjectViewDistance (GVAR(fovBasedPFHminimalViewDistance) + viewDistance / 10);
};
TRACE_2("FoV Based",getObjectViewDistance select 0,_zoom);
};
// Land
if (_zoom > VD_ZOOM_NORMAL) then {
// Dynamically set Object View Distance based on player's Zoom Level and View Distance
setObjectViewDistance ((_zoom / VD_ZOOM_DIVISION * (viewDistance - GVAR(fovBasedPFHminimalViewDistance))) + GVAR(fovBasedPFHminimalViewDistance));
} else {
setObjectViewDistance GVAR(fovBasedPFHminimalViewDistance);
};
TRACE_2("FoV Based",getObjectViewDistance select 0,_zoom);

View File

@ -1 +1 @@
#include "\z\ace\addons\viewdistance\script_component.hpp"
#include "\z\ace\addons\viewdistance\script_component.hpp"

View File

@ -9,4 +9,4 @@
#define DEBUG_SETTINGS DEBUG_SETTINGS_VIEWDISTANCE
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#include "\z\ace\addons\main\script_macros.hpp"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="View Distance">
<Package name="ViewDistance">
<Key ID="STR_ACE_ViewDistance_Module_DisplayName">
<English>View Distance Limiter</English>
<Polish>Ogranicznik zasięgu widzenia</Polish>
@ -156,7 +156,7 @@
<Russian>Динамич. дальность отрисовки объектов</Russian>
</Key>
<Key ID="STR_ACE_ViewDistance_object_Description">
<English>Sets the object view distance as a coefficient of the view distance.</English>
<English>Sets the object view distance as a coefficient of the view distance or based on field of view. FoV Based's lowest and highest value is the value which is set when enabling the option.</English>
<Polish>Zmienia zasięg rysowania obiektów jako mnożnik zasięgu widzenia.</Polish>
<Spanish>Establece la distancia de visión de objetos como un coeficiente de la distancia de visión.</Spanish>
<Czech>Nastaví objekt dohlednosti jako koeficient dohlednosti.</Czech>
@ -232,6 +232,9 @@
<Hungarian>Maximális</Hungarian>
<Russian>Очень высокая</Russian>
</Key>
<Key ID="STR_ACE_ViewDistance_object_fovBased">
<English>FoV Based</English>
</Key>
<Key ID="STR_ACE_ViewDistance_infotext">
<English>View Distance:</English>
<Polish>Zasięg widzenia:</Polish>