mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge pull request #2133 from jonpas/dynamicViewDistance
Mk 1 eyeballs Integration
This commit is contained in:
commit
c132ef86cf
@ -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
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
};
|
@ -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;
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
};
|
||||
};
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
|
53
addons/viewdistance/functions/fnc_setFovBasedOvdPFH.sqf
Normal file
53
addons/viewdistance/functions/fnc_setFovBasedOvdPFH.sqf
Normal 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);
|
@ -1 +1 @@
|
||||
#include "\z\ace\addons\viewdistance\script_component.hpp"
|
||||
#include "\z\ace\addons\viewdistance\script_component.hpp"
|
||||
|
@ -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"
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user