Skip to content

add FCS for all turrets #1634

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AGM_Core/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,7 @@ class CfgFunctions {
class getConfigCommander;
class getConfigGunner;
class getDoorTurrets;
class getGunner;
class getInPosition;
class getMarkerType;
class getNumberFromMissionSQM;
Expand Down
28 changes: 28 additions & 0 deletions AGM_Core/functions/fn_getGunner.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Author: commy2
*
* Get the gunner of a vehicle who uses the given weapon type. Requires every turret to have a different weapons.
*
* Argument:
* 0: The vehicle (Object)
* 1: weapon of the vehicle (String)
*
* Return value:
* The turret gunner with this weapon (Object)
*/

private ["_vehicle", "_weapon"];

_vehicle = _this select 0;
_weapon = _this select 1;

private ["_turrets", "_gunner"];
_turrets = [typeOf _vehicle] call AGM_Core_fnc_getTurrets;

_gunner = objNull;
{
if (_gunner in (_vehicle weaponsTurret _x)) exitWith {
_gunner = _vehicle turretUnit _x;
};
} forEach _turrets;
_gunner
66 changes: 35 additions & 31 deletions AGM_FireControlSystem/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,11 @@ class CfgVehicles {
};

class AllVehicles: All {
AGM_FCSEnabled = 0;
AGM_FCSMinDistance = 200;
AGM_FCSMaxDistance = 9990;
AGM_FCSDistanceInterval = 5;
class NewTurret {
AGM_FCSEnabled = 0;
AGM_FCSMinDistance = 200;
AGM_FCSMaxDistance = 9990;
AGM_FCSDistanceInterval = 5;
class Turrets;
};
class CargoTurret;
Expand All @@ -108,7 +108,6 @@ class CfgVehicles {
};

class Tank: LandVehicle {
AGM_FCSEnabled = 1; // all tracked vehicles get one by default
class AGM_SelfActions {
class AGM_ResetFCS {
displayName = "$STR_AGM_FireControlSystem_ResetFCS";
Expand All @@ -120,6 +119,7 @@ class CfgVehicles {
};
class Turrets {
class MainTurret: NewTurret {
AGM_FCSEnabled = 1; // all tracked vehicles get one by default
class Turrets {
class CommanderOptics;
};
Expand Down Expand Up @@ -197,19 +197,19 @@ class CfgVehicles {
};

class Heli_Attack_01_base_F: Helicopter_Base_F {
AGM_FCSEnabled = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {
AGM_FCSEnabled = 1;
discreteDistance[] = {};
discreteDistanceInitIndex = 0;
};
};
};

class Heli_Attack_02_base_F: Helicopter_Base_F {
AGM_FCSEnabled = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {
AGM_FCSEnabled = 1;
discreteDistance[] = {};
discreteDistanceInitIndex = 0;
};
Expand Down Expand Up @@ -263,6 +263,7 @@ class CfgVehicles {
class Tank_F: Tank {
class Turrets {
class MainTurret: NewTurret {
AGM_FCSEnabled = 1; // all tracked vehicles get one by default
class Turrets {
class CommanderOptics;//: CommanderOptics {};
};
Expand Down Expand Up @@ -301,15 +302,16 @@ class CfgVehicles {
};

class B_APC_Tracked_01_rcws_F: B_APC_Tracked_01_base_F {
AGM_FCSEnabled = 0;
/*class Turrets: Turrets {
class MainTurret: MainTurret {};
class Turrets: Turrets {
class MainTurret: MainTurret {
AGM_FCSEnabled = 0;
};
class CommanderOptics: CommanderOptics {};
};*/
};
};

class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F {
AGM_FCSEnabled = 0;
//AGM_FCSEnabled = 0; @todo
};

class B_APC_Tracked_01_AA_F: B_APC_Tracked_01_base_F {
Expand Down Expand Up @@ -395,23 +397,23 @@ class CfgVehicles {
class B_MBT_01_cannon_F: B_MBT_01_base_F {};

class MBT_01_arty_base_F: MBT_01_base_F {
AGM_FCSEnabled = 0;
/*class Turrets: Turrets {
class Turrets: Turrets {
class MainTurret: MainTurret {
class Turrets: Turrets {
AGM_FCSEnabled = 0;
/*class Turrets: Turrets {
class CommanderOptics: CommanderOptics {};
};
};*/
};
};*/
};
};

class MBT_01_mlrs_base_F: MBT_01_base_F {
AGM_FCSEnabled = 0;
/*class Turrets: Turrets {
class Turrets: Turrets {
class MainTurret: MainTurret {
class Turrets;
AGM_FCSEnabled = 0;
//class Turrets;
};
};*/
};
};

class MBT_02_base_F: Tank_F {
Expand All @@ -427,14 +429,14 @@ class CfgVehicles {
};

class MBT_02_arty_base_F: MBT_02_base_F {
AGM_FCSEnabled = 0;
/*class Turrets: Turrets {
class Turrets: Turrets {
class MainTurret: MainTurret {
class Turrets: Turrets {
AGM_FCSEnabled = 0;
/*class Turrets: Turrets {
class CommanderOptics: CommanderOptics {};
};
};*/
};
};*/
};
};

class Ship_F: Ship {};
Expand Down Expand Up @@ -714,9 +716,9 @@ class CfgVehicles {
class B_APC_Wheeled_01_base_F: APC_Wheeled_01_base_F {};

class B_APC_Wheeled_01_cannon_F: B_APC_Wheeled_01_base_F {
AGM_FCSEnabled = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {
AGM_FCSEnabled = 1;
discreteDistance[] = {};
discreteDistanceInitIndex = 0;
};
Expand All @@ -738,17 +740,19 @@ class CfgVehicles {
class MainTurret: MainTurret {
discreteDistance[] = {};
discreteDistanceInitIndex = 0;
/*class Turrets: Turrets {
class CommanderOptics: CommanderOptics {};
};*/
class Turrets: Turrets {
class CommanderOptics: CommanderOptics {
AGM_FCSEnabled = 1;
};
};
};
};
};

class APC_Wheeled_03_base_F: Wheeled_APC_F {
AGM_FCSEnabled = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {
AGM_FCSEnabled = 1;
discreteDistance[] = {};
discreteDistanceInitIndex = 0;
/*class Turrets: Turrets {
Expand Down
8 changes: 7 additions & 1 deletion AGM_FireControlSystem/functions/fn_canUseFCS.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,10 @@
* Boolean (Bool)
*/

_player == gunner _vehicle && {getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "AGM_FCSEnabled") == 1}
_player in _vehicle && {
private "_turret";
_turret = [_player] call AGM_Core_fnc_getTurretIndex;
_turret = [configFile >> "CfgVehicles" >> typeOf _vehicle, _turret] call AGM_Core_fnc_getTurretConfigPath;

getNumber (_turret >> "AGM_FCSEnabled") == 1
}
7 changes: 5 additions & 2 deletions AGM_FireControlSystem/functions/fn_firedEH.sqf
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Author: KoffeinFlummi
* Author: KoffeinFlummi, edited by commy2
*
* Adjusts the direction of a shell.
*
Expand All @@ -21,7 +21,10 @@ _round = _this select 6;
_FCSMagazines = _unit getVariable "AGM_FCSMagazines";
_FCSElevation = _unit getVariable "AGM_FCSElevation";

if (AGM_player != gunner _unit) exitWith {};
private "_gunner";
_gunner = [_unit, _weaponType] call AGM_Core_fnc_getGunner; systemChat str (AGM_player != _gunner);

if (AGM_player != _gunner) exitWith {};
if !(_magazineType in _FCSMagazines) exitWith {};

// GET ELEVATION OFFSET OF CURRENT MAGAZINE
Expand Down
16 changes: 14 additions & 2 deletions AGM_FireControlSystem/functions/fn_vehicleInit.sqf
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Author: KoffeinFlummi
* Author: KoffeinFlummi, edited by commy2
*
* Checks if a vehicle is equipped with an FCS and if so, adds the fired event handler
*
Expand All @@ -12,7 +12,19 @@

private ["_gunBeg", "_gunnerView", "_gunBegPos", "_gunnerViewPos", "_viewDiff"];

if (getNumber (configFile >> "CfgVehicles" >> (typeOf (_this select 0)) >> "AGM_FCSEnabled") == 1) then {
// iterate through all turrets and check if they have any compatible with FCS
private "_turrets";
_turrets = [typeOf (_this select 0)] call AGM_Core_fnc_getTurrets;

_hasTurretWithFCSEnabled = false;
{
private "_turret";
_turret = [configFile >> "CfgVehicles" >> typeOf (_this select 0), _x] call AGM_Core_fnc_getTurretConfigPath;

if (getNumber (_turret >> "AGM_FCSEnabled") == 1) exitWith {_hasTurretWithFCSEnabled = true};
} forEach _turrets;

if (_hasTurretWithFCSEnabled) then {
(_this select 0) addEventHandler ["Fired", {_this call AGM_FCS_fnc_firedEH}];

(_this select 0) setVariable ["AGM_FCSDistance", 0, true];
Expand Down