mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Overhauled the scope adjustment module:
*Added configs for the new marksmen scopes *Introduced minor and major steps *Introcuded a new increment config (ACE_ScopeAdjust_Increment) *Changed the default zero range to 100m *Added a zero reference setting *Added an interaction menu entry to update the zero reference setting
This commit is contained in:
19
addons/scopes/CfgVehicles.hpp
Normal file
19
addons/scopes/CfgVehicles.hpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
class CfgVehicles {
|
||||||
|
class Man;
|
||||||
|
class CAManBase: Man {
|
||||||
|
class ACE_SelfActions {
|
||||||
|
class ACE_Equipment {
|
||||||
|
class GVAR(adjustZero) {
|
||||||
|
// Updates the zero reference
|
||||||
|
displayName = "$STR_ACE_Scopes_AdjustZero";
|
||||||
|
condition = QUOTE([ACE_player] call FUNC(canAdjustZero));
|
||||||
|
statement = QUOTE([ACE_player] call FUNC(adjustZero));
|
||||||
|
showDisabled = 0;
|
||||||
|
priority = 0.2;
|
||||||
|
//icon = QUOTE(PATHTOF(UI\...)); // TODO
|
||||||
|
exceptions[] = {"notOnMap", "isNotInside"};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -1,14 +1,15 @@
|
|||||||
class CfgWeapons {
|
class CfgWeapons {
|
||||||
class ItemCore;
|
class ItemCore;
|
||||||
class InventoryOpticsItem_Base_F;
|
class InventoryOpticsItem_Base_F;
|
||||||
|
|
||||||
class optic_LRPS : ItemCore {
|
class optic_LRPS : ItemCore {
|
||||||
ACE_ScopeAdjust_Horizontal[] = { -50, 50 };
|
ACE_ScopeAdjust_Vertical[] = { -4, 30 };
|
||||||
ACE_ScopeAdjust_Vertical[] = { -70, 70 };
|
ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
|
||||||
|
ACE_ScopeAdjust_Increment = 0.1;
|
||||||
class ItemInfo : InventoryOpticsItem_Base_F {
|
class ItemInfo : InventoryOpticsItem_Base_F {
|
||||||
class OpticsModes {
|
class OpticsModes {
|
||||||
class Snip {
|
class Snip {
|
||||||
discreteDistance[] = { 1 };
|
discreteDistance[] = { 100 };
|
||||||
discreteDistanceInitIndex = 0;
|
discreteDistanceInitIndex = 0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -16,12 +17,13 @@ class CfgWeapons {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class optic_SOS : ItemCore {
|
class optic_SOS : ItemCore {
|
||||||
ACE_ScopeAdjust_Horizontal[] = { -50, 50 };
|
ACE_ScopeAdjust_Vertical[] = { -4, 30 };
|
||||||
ACE_ScopeAdjust_Vertical[] = { -60, 60 };
|
ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
|
||||||
|
ACE_ScopeAdjust_Increment = 0.1;
|
||||||
class ItemInfo : InventoryOpticsItem_Base_F {
|
class ItemInfo : InventoryOpticsItem_Base_F {
|
||||||
class OpticsModes {
|
class OpticsModes {
|
||||||
class Snip {
|
class Snip {
|
||||||
discreteDistance[] = { 1 };
|
discreteDistance[] = { 100 };
|
||||||
discreteDistanceInitIndex = 0;
|
discreteDistanceInitIndex = 0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -29,12 +31,41 @@ class CfgWeapons {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class optic_DMS : ItemCore {
|
class optic_DMS : ItemCore {
|
||||||
ACE_ScopeAdjust_Horizontal[] = { -40, 40 };
|
ACE_ScopeAdjust_Vertical[] = { -4, 20 };
|
||||||
ACE_ScopeAdjust_Vertical[] = { -40, 40 };
|
ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
|
||||||
|
ACE_ScopeAdjust_Increment = 0.1;
|
||||||
class ItemInfo : InventoryOpticsItem_Base_F {
|
class ItemInfo : InventoryOpticsItem_Base_F {
|
||||||
class OpticsModes {
|
class OpticsModes {
|
||||||
class Snip {
|
class Snip {
|
||||||
discreteDistance[] = { 1 };
|
discreteDistance[] = { 100 };
|
||||||
|
discreteDistanceInitIndex = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class optic_AMS_base : ItemCore {
|
||||||
|
ACE_ScopeAdjust_Vertical[] = { -4, 30 };
|
||||||
|
ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
|
||||||
|
ACE_ScopeAdjust_Increment = 0.1;
|
||||||
|
class ItemInfo : InventoryOpticsItem_Base_F {
|
||||||
|
class OpticsModes {
|
||||||
|
class AMS {
|
||||||
|
discreteDistance[] = { 100 };
|
||||||
|
discreteDistanceInitIndex = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class optic_KHS_base : ItemCore {
|
||||||
|
ACE_ScopeAdjust_Vertical[] = { -4, 30 };
|
||||||
|
ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
|
||||||
|
ACE_ScopeAdjust_Increment = 0.1;
|
||||||
|
class ItemInfo : InventoryOpticsItem_Base_F {
|
||||||
|
class OpticsModes {
|
||||||
|
class KHS {
|
||||||
|
discreteDistance[] = { 100 };
|
||||||
discreteDistanceInitIndex = 0;
|
discreteDistanceInitIndex = 0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Author: KoffeinFlummi and esteldunedain
|
* Author: KoffeinFlummi, esteldunedain, Ruthberg
|
||||||
*
|
*
|
||||||
* Watches for scope changes.
|
* Watches for scope changes.
|
||||||
* Defines key bindings
|
* Defines key bindings
|
||||||
@ -39,10 +39,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, 0, 0.1] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, 0, 0.1] call FUNC(adjustScope);
|
[ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
@ -54,10 +53,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, 0, -0.1] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, 0, -0.1] call FUNC(adjustScope);
|
[ACE_player, ELEVATION_DOWN, MINOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
@ -69,10 +67,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, -0.1, 0] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, -0.1, 0] call FUNC(adjustScope);
|
[ACE_player, WINDAGE_LEFT, MINOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
@ -84,10 +81,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, 0.1, 0] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, 0.1, 0] call FUNC(adjustScope);
|
[ACE_player, WINDAGE_RIGHT, MINOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
@ -99,10 +95,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, 0, 1.0] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, 0, 1.0] call FUNC(adjustScope);
|
[ACE_player, ELEVATION_UP, MAJOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
@ -114,10 +109,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, 0, -1.0] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, 0, -1.0] call FUNC(adjustScope);
|
[ACE_player, ELEVATION_DOWN, MAJOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
@ -129,10 +123,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, -1.0, 0] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, -1.0, 0] call FUNC(adjustScope);
|
[ACE_player, WINDAGE_LEFT, MAJOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
@ -144,10 +137,9 @@ if !(hasInterface) exitWith {};
|
|||||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
[ACE_player] call FUNC(inventoryCheck);
|
[ACE_player] call FUNC(inventoryCheck);
|
||||||
if !([ACE_player, 1.0, 0] call FUNC(canAdjustScope)) exitWith {false};
|
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[ACE_player, 1.0, 0] call FUNC(adjustScope);
|
[ACE_player, WINDAGE_RIGHT, MAJOR_INCREMENT] call FUNC(adjustScope);
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
{false},
|
{false},
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
ADDON = false;
|
ADDON = false;
|
||||||
|
|
||||||
PREP(adjustScope);
|
PREP(adjustScope);
|
||||||
PREP(canAdjustScope);
|
PREP(adjustZero);
|
||||||
|
PREP(applyScopeAdjustment);
|
||||||
|
PREP(canAdjustZero);
|
||||||
PREP(firedEH);
|
PREP(firedEH);
|
||||||
PREP(getOptics);
|
PREP(getOptics);
|
||||||
PREP(inventoryCheck);
|
PREP(inventoryCheck);
|
||||||
|
@ -16,6 +16,8 @@ class CfgPatches {
|
|||||||
|
|
||||||
#include "CfgSounds.hpp"
|
#include "CfgSounds.hpp"
|
||||||
|
|
||||||
|
#include "CfgVehicles.hpp"
|
||||||
|
|
||||||
#include "CfgWeapons.hpp"
|
#include "CfgWeapons.hpp"
|
||||||
|
|
||||||
#include "RscTitles.hpp"
|
#include "RscTitles.hpp"
|
||||||
|
@ -1,56 +1,71 @@
|
|||||||
/*
|
/*
|
||||||
* Author: KoffeinFlummi
|
* Author: KoffeinFlummi, Ruthberg
|
||||||
* Changes the adjustment for the current scope
|
* Changes the adjustment for the current scope
|
||||||
*
|
*
|
||||||
* Argument:
|
* Argument:
|
||||||
* 0: Unit <OBJECT>
|
* 0: Unit <OBJECT>
|
||||||
* 1: Horizontal adjustment <NUMBER>
|
* 1: Turret and Direction <NUMBER>
|
||||||
* 2: Vertical adjustment <NUMBER>
|
* 2: Major Step <BOOL>
|
||||||
*
|
*
|
||||||
* Return value:
|
* Return value:
|
||||||
* True <BOOL>
|
* Did we adjust anything? <BOOL>
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_unit", "_weapons", "_zeroing", "_pitchbankyaw", "_pitch", "_bank", "_yaw", "_hint"];
|
if !(vehicle _unit == _unit) exitWith {false};
|
||||||
|
|
||||||
_unit = _this select 0;
|
private ["_unit", "_turretAndDirection", "_majorStep", "_weaponIndex", "_zeroing", "_optic", "_increment", "_maxVertical", "_maxHorizontal", "_elevation", "_windage", "_zero"];
|
||||||
|
|
||||||
|
EXPLODE_3_PVT(_this,_unit,_turretAndDirection,_majorStep);
|
||||||
|
|
||||||
_weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex);
|
_weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex);
|
||||||
|
if (_weaponIndex < 0) exitWith {false};
|
||||||
|
|
||||||
_adjustment = _unit getVariable QGVAR(Adjustment);
|
_adjustment = _unit getVariable QGVAR(Adjustment);
|
||||||
if (isNil "_adjustment") then {
|
if (isNil "_adjustment") then {
|
||||||
_adjustment = [[0,0], [0,0], [0,0]];
|
_adjustment = [[0,0,0], [0,0,0], [0,0,0]]; // [Windage, Elevation, Zero]
|
||||||
_unit setVariable [QGVAR(Adjustment), _adjustment];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_zeroing = _adjustment select _weaponIndex;
|
if (isNil QGVAR(Optics)) then {
|
||||||
_zeroing set [0, (round (((_zeroing select 0) + (_this select 1)) * 10)) / 10];
|
GVAR(Optics) = ["", "", ""];
|
||||||
_zeroing set [1, (round (((_zeroing select 1) + (_this select 2)) * 10)) / 10];
|
|
||||||
|
|
||||||
// Change the adjustment array
|
|
||||||
_adjustment set [_weaponIndex, _zeroing];
|
|
||||||
[_unit, QGVAR(Adjustment), _adjustment, 0.5] call EFUNC(common,setVariablePublic);
|
|
||||||
|
|
||||||
playSound (["ACE_Scopes_Click_1", "ACE_Scopes_Click_2", "ACE_Scopes_Click_3"] select floor random 3);
|
|
||||||
|
|
||||||
// slightly rotate the player if looking through optic
|
|
||||||
if (cameraView == "GUNNER") then {
|
|
||||||
|
|
||||||
_pitchbankyaw = [_unit] call EFUNC(common,getPitchBankYaw);
|
|
||||||
// these are not exact mil-to-degree conversions, but instead chosen
|
|
||||||
// to minimize the effect of rounding errors
|
|
||||||
_pitch = (_pitchbankyaw select 0) + ((_this select 2) * -0.04);
|
|
||||||
_bank = _pitchbankyaw select 1;
|
|
||||||
_yaw = (_pitchbankyaw select 2) + ((_this select 1) * -0.04);
|
|
||||||
[_unit, _pitch, _bank, _yaw] call EFUNC(common,setPitchBankYaw)
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
[] call FUNC(showZeroing);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
true
|
_optic = GVAR(Optics) select _weaponIndex;
|
||||||
|
_increment = getNumber (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Increment");
|
||||||
|
_maxVertical = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Vertical");
|
||||||
|
_maxHorizontal = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Horizontal");
|
||||||
|
|
||||||
|
if ((count _maxHorizontal < 2) or (count _maxVertical < 2)) exitWith {false};
|
||||||
|
|
||||||
|
_zeroing = _adjustment select _weaponIndex;
|
||||||
|
_elevation = _zeroing select 0;
|
||||||
|
_windage = _zeroing select 1;
|
||||||
|
_zero = _zeroing select 2;
|
||||||
|
|
||||||
|
switch (_turretAndDirection) do
|
||||||
|
{
|
||||||
|
case ELEVATION_UP: { _elevation = _elevation + _increment };
|
||||||
|
case ELEVATION_DOWN: { _elevation = _elevation - _increment };
|
||||||
|
case WINDAGE_LEFT: { _windage = _windage - _increment };
|
||||||
|
case WINDAGE_RIGHT: { _windage = _windage + _increment };
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_majorStep) then {
|
||||||
|
switch (_turretAndDirection) do
|
||||||
|
{
|
||||||
|
case ELEVATION_UP: { _elevation = ceil(_elevation) };
|
||||||
|
case ELEVATION_DOWN: { _elevation = floor(_elevation) };
|
||||||
|
case WINDAGE_LEFT: { _windage = floor(_windage) };
|
||||||
|
case WINDAGE_RIGHT: { _windage = ceil(_windage) };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_elevation = round(_elevation * 10) / 10;
|
||||||
|
_windage = round(_windage * 10) / 10;
|
||||||
|
|
||||||
|
if (_elevation < _maxVertical select 0 or _elevation > _maxVertical select 1) exitWith {false};
|
||||||
|
if (_windage < _maxHorizontal select 0 or _windage > _maxHorizontal select 1) exitWith {false};
|
||||||
|
|
||||||
|
[_unit, _elevation, _windage, _zero] call FUNC(applyScopeAdjustment);
|
||||||
|
39
addons/scopes/functions/fnc_adjustZero.sqf
Normal file
39
addons/scopes/functions/fnc_adjustZero.sqf
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Author: KoffeinFlummi, Ruthberg
|
||||||
|
* Updates the zero reference for the current scope
|
||||||
|
*
|
||||||
|
* Argument:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return value:
|
||||||
|
* true <BOOL>
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if !(vehicle _unit == _unit) exitWith {false};
|
||||||
|
|
||||||
|
private ["_unit", "_adjustment", "_zeroing", "_elevation", "_windage", "_zero"];
|
||||||
|
_unit = _this select 0;
|
||||||
|
|
||||||
|
_weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex);
|
||||||
|
if (_weaponIndex < 0) exitWith {false};
|
||||||
|
|
||||||
|
_adjustment = _unit getVariable QGVAR(Adjustment);
|
||||||
|
if (isNil "_adjustment") then {
|
||||||
|
// [Windage, Elevation, Zero]
|
||||||
|
_adjustment = [[0,0,0], [0,0,0], [0,0,0]];
|
||||||
|
};
|
||||||
|
|
||||||
|
_zeroing = _adjustment select _weaponIndex;
|
||||||
|
_elevation = _zeroing select 0;
|
||||||
|
_windage = _zeroing select 1;
|
||||||
|
_zero = _zeroing select 2;
|
||||||
|
|
||||||
|
_zero = round((_zero + _elevation) * 10) / 10;
|
||||||
|
_elevation = 0;
|
||||||
|
|
||||||
|
[_unit, _elevation, _windage, _zero] call FUNC(applyScopeAdjustment);
|
||||||
|
|
||||||
|
true
|
51
addons/scopes/functions/fnc_applyScopeAdjustment.sqf
Normal file
51
addons/scopes/functions/fnc_applyScopeAdjustment.sqf
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Author: KoffeinFlummi, Ruthberg
|
||||||
|
* Applies the adjustment for the current scope
|
||||||
|
*
|
||||||
|
* Argument:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
* 1: Absolute elevation <NUMBER>
|
||||||
|
* 2: Absolute windage <NUMBER>
|
||||||
|
* 3: Absolute zero reference <NUMBER>
|
||||||
|
*
|
||||||
|
* Return value:
|
||||||
|
* True <BOOL>
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_unit", "_elevation", "_windage", "_zero", "_adjustmentDifference", "_pitchbankyaw", "_pitch", "_bank", "_yaw"];
|
||||||
|
|
||||||
|
EXPLODE_4_PVT(_this,_unit,_elevation,_windage,_zero);
|
||||||
|
|
||||||
|
_weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex);
|
||||||
|
|
||||||
|
_adjustment = _unit getVariable QGVAR(Adjustment);
|
||||||
|
if (isNil "_adjustment") then {
|
||||||
|
// [Windage, Elevation, Zero]
|
||||||
|
_adjustment = [[0,0,0], [0,0,0], [0,0,0]];
|
||||||
|
_unit setVariable [QGVAR(Adjustment), _adjustment];
|
||||||
|
};
|
||||||
|
|
||||||
|
_adjustmentDifference = (_adjustment select _weaponIndex) vectorDiff [_elevation, _windage, _zero];
|
||||||
|
|
||||||
|
_adjustment set [_weaponIndex, [_elevation, _windage, _zero]];
|
||||||
|
[_unit, QGVAR(Adjustment), _adjustment, 0.5] call EFUNC(common,setVariablePublic);
|
||||||
|
|
||||||
|
playSound (["ACE_Scopes_Click_1", "ACE_Scopes_Click_2", "ACE_Scopes_Click_3"] select floor random 3);
|
||||||
|
|
||||||
|
// slightly rotate the player if looking through optic
|
||||||
|
if (cameraView == "GUNNER") then {
|
||||||
|
// Convert adjustmentDifference from mils to degrees
|
||||||
|
_adjustmentDifference = [_adjustmentDifference, {_this * 0.05625}] call EFUNC(common,map);
|
||||||
|
_pitchbankyaw = [_unit] call EFUNC(common,getPitchBankYaw);
|
||||||
|
_pitch = (_pitchbankyaw select 0) + (_adjustmentDifference select 0);
|
||||||
|
_bank = (_pitchbankyaw select 1);
|
||||||
|
_yaw = (_pitchbankyaw select 2) + (_adjustmentDifference select 1);
|
||||||
|
[_unit, _pitch, _bank, _yaw] call EFUNC(common,setPitchBankYaw);
|
||||||
|
} else {
|
||||||
|
[] call FUNC(showZeroing);
|
||||||
|
};
|
||||||
|
|
||||||
|
true
|
@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* Author: KoffeinFlummi
|
|
||||||
* Checks if a player can adjust his optic in the given way.
|
|
||||||
*
|
|
||||||
* Argument:
|
|
||||||
* 0: Unit <OBJECT>
|
|
||||||
* 1: Horizontal adjustment <NUMBER>
|
|
||||||
* 2: Vertical adjustment <NUMBER>
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* Can adjustment be done? <BOOL>
|
|
||||||
*
|
|
||||||
* Public: No
|
|
||||||
*/
|
|
||||||
#include "script_component.hpp"
|
|
||||||
|
|
||||||
private ["_unit", "_weaponIndex", "_zeroing", "_optic", "_maxHorizontal", "_maxVertical"];
|
|
||||||
|
|
||||||
_unit = _this select 0;
|
|
||||||
|
|
||||||
_weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex);
|
|
||||||
if (_weaponIndex < 0) exitWith {false};
|
|
||||||
|
|
||||||
_adjustment = _unit getVariable QGVAR(Adjustment);
|
|
||||||
if (isNil "_adjustment") then {
|
|
||||||
_adjustment = [[0,0], [0,0], [0,0]];
|
|
||||||
};
|
|
||||||
|
|
||||||
if (isNil QGVAR(Optics)) then {
|
|
||||||
GVAR(Optics) = ["", "", ""];
|
|
||||||
};
|
|
||||||
|
|
||||||
_zeroing = _adjustment select _weaponIndex;
|
|
||||||
_zeroX = (_zeroing select 0) + (_this select 1);
|
|
||||||
_zeroY = (_zeroing select 1) + (_this select 2);
|
|
||||||
|
|
||||||
_optic = GVAR(Optics) select _weaponIndex;
|
|
||||||
_maxHorizontal = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Horizontal");
|
|
||||||
_maxVertical = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Vertical");
|
|
||||||
if ((count _maxHorizontal < 2) or (count _maxVertical < 2)) exitWith {false};
|
|
||||||
if ((_maxHorizontal isEqualTo [0,0]) or (_maxVertical isEqualTo [0,0])) exitWith {false};
|
|
||||||
|
|
||||||
if (_zeroX < _maxHorizontal select 0 or _zeroX > _maxHorizontal select 1) exitWith {false};
|
|
||||||
if (_zeroY < _maxVertical select 0 or _zeroY > _maxVertical select 1) exitWith {false};
|
|
||||||
|
|
||||||
vehicle _unit == _unit
|
|
33
addons/scopes/functions/fnc_canAdjustZero.sqf
Normal file
33
addons/scopes/functions/fnc_canAdjustZero.sqf
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Author: KoffeinFlummi, Ruthberg
|
||||||
|
* Changes the adjustment for the current scope
|
||||||
|
*
|
||||||
|
* Argument:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return value:
|
||||||
|
* Can we update the zero reference? <BOOL>
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (cameraView == "GUNNER") exitWith {false};
|
||||||
|
if !(vehicle _unit == _unit) exitWith {false};
|
||||||
|
|
||||||
|
private ["_unit", "_adjustment", "_elevation"];
|
||||||
|
_unit = _this select 0;
|
||||||
|
|
||||||
|
_weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex);
|
||||||
|
if (_weaponIndex < 0) exitWith {false};
|
||||||
|
|
||||||
|
_adjustment = _unit getVariable QGVAR(Adjustment);
|
||||||
|
if (isNil "_adjustment") then {
|
||||||
|
// [Windage, Elevation, Zero]
|
||||||
|
_adjustment = [[0,0,0], [0,0,0], [0,0,0]];
|
||||||
|
};
|
||||||
|
|
||||||
|
_elevation = (_adjustment select _weaponIndex) select 0;
|
||||||
|
|
||||||
|
// You can only adjust your zero reference, if your relative elevation setting is not 0
|
||||||
|
_elevation != 0
|
@ -39,4 +39,4 @@ _zeroing = _adjustment select _weaponIndex;
|
|||||||
// Convert zeroing from mils to degrees
|
// Convert zeroing from mils to degrees
|
||||||
_zeroing = [_zeroing, {_this * 0.05625}] call EFUNC(common,map);
|
_zeroing = [_zeroing, {_this * 0.05625}] call EFUNC(common,map);
|
||||||
|
|
||||||
[_projectile, _zeroing select 0, _zeroing select 1, 0] call EFUNC(common,changeProjectileDirection);
|
[_projectile, (_zeroing select 1), (_zeroing select 0) + (_zeroing select 2), 0] call EFUNC(common,changeProjectileDirection);
|
||||||
|
@ -18,7 +18,8 @@ private ["_newOptics", "_adjustment"];
|
|||||||
|
|
||||||
_adjustment = ACE_player getVariable QGVAR(Adjustment);
|
_adjustment = ACE_player getVariable QGVAR(Adjustment);
|
||||||
if (isNil "_adjustment") then {
|
if (isNil "_adjustment") then {
|
||||||
_adjustment = [[0,0], [0,0], [0,0]];
|
// [Windage, Elevation, Zero]
|
||||||
|
_adjustment = [[0,0,0], [0,0,0], [0,0,0]];
|
||||||
ACE_player setVariable [QGVAR(Adjustment), _adjustment];
|
ACE_player setVariable [QGVAR(Adjustment), _adjustment];
|
||||||
[ACE_player, QGVAR(Adjustment), _adjustment, 0.5] call EFUNC(common,setVariablePublic);
|
[ACE_player, QGVAR(Adjustment), _adjustment, 0.5] call EFUNC(common,setVariablePublic);
|
||||||
};
|
};
|
||||||
@ -31,8 +32,8 @@ _newOptics = [_player] call FUNC(getOptics);
|
|||||||
{
|
{
|
||||||
if (_newOptics select _forEachIndex != _x) then {
|
if (_newOptics select _forEachIndex != _x) then {
|
||||||
// The optic for this weapon changed, set adjustment to zero
|
// The optic for this weapon changed, set adjustment to zero
|
||||||
if !((_adjustment select _foreachindex) isEqualTo [0,0]) then {
|
if !((_adjustment select _foreachindex) isEqualTo [0,0,0]) then {
|
||||||
_adjustment set [_forEachIndex, [0,0]];
|
_adjustment set [_forEachIndex, [0,0,0]];
|
||||||
[ACE_player, QGVAR(Adjustment), _adjustment, 0.5] call EFUNC(common,setVariablePublic);
|
[ACE_player, QGVAR(Adjustment), _adjustment, 0.5] call EFUNC(common,setVariablePublic);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -21,7 +21,8 @@ if (_weaponIndex < 0) exitWith {};
|
|||||||
|
|
||||||
_adjustment = ACE_player getVariable QGVAR(Adjustment);
|
_adjustment = ACE_player getVariable QGVAR(Adjustment);
|
||||||
if (isNil "_adjustment") then {
|
if (isNil "_adjustment") then {
|
||||||
_adjustment = [[0,0], [0,0], [0,0]];
|
// [Windage, Elevation, Zero]
|
||||||
|
_adjustment = [[0,0,0], [0,0,0], [0,0,0]];
|
||||||
};
|
};
|
||||||
|
|
||||||
// Display the adjustment knobs
|
// Display the adjustment knobs
|
||||||
@ -36,8 +37,8 @@ if (isNull _display) exitWith {};
|
|||||||
_zeroing = _adjustment select _weaponIndex;
|
_zeroing = _adjustment select _weaponIndex;
|
||||||
_vertical = _display displayCtrl 12;
|
_vertical = _display displayCtrl 12;
|
||||||
_horizontal = _display displayCtrl 13;
|
_horizontal = _display displayCtrl 13;
|
||||||
_vertical ctrlSetText (str (_zeroing select 1));
|
_vertical ctrlSetText (str (_zeroing select 0));
|
||||||
_horizontal ctrlSetText (str (_zeroing select 0));
|
_horizontal ctrlSetText (str (_zeroing select 1));
|
||||||
|
|
||||||
// Set the time when to hide the knobs
|
// Set the time when to hide the knobs
|
||||||
GVAR(timeToHide) = diag_tickTime + 3.0;
|
GVAR(timeToHide) = diag_tickTime + 3.0;
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
#define COMPONENT scopes
|
#define COMPONENT scopes
|
||||||
#include "\z\ace\addons\main\script_mod.hpp"
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
#define ELEVATION_UP 0
|
||||||
|
#define ELEVATION_DOWN 1
|
||||||
|
#define WINDAGE_LEFT 2
|
||||||
|
#define WINDAGE_RIGHT 3
|
||||||
|
|
||||||
|
#define MINOR_INCREMENT false
|
||||||
|
#define MAJOR_INCREMENT true
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED_SCOPES
|
#ifdef DEBUG_ENABLED_SCOPES
|
||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#endif
|
#endif
|
||||||
|
@ -26,5 +26,8 @@
|
|||||||
<Key ID="STR_ACE_Scopes_AdjustLeftMajor">
|
<Key ID="STR_ACE_Scopes_AdjustLeftMajor">
|
||||||
<English>Major adjustment left</English>
|
<English>Major adjustment left</English>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Scopes_AdjustZero">
|
||||||
|
<English>Set zero adjustment</English>
|
||||||
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
Reference in New Issue
Block a user