Laser code selection, hotkeys and locking. Turrets & designator, and gunner. Closes #751

This commit is contained in:
jaynus 2015-05-01 11:31:37 -07:00
parent 8d1ac26e24
commit dfbfb4ace2
11 changed files with 150 additions and 4 deletions

View File

@ -17,4 +17,29 @@ class CfgVehicles {
simulation = "LaserTarget"; simulation = "LaserTarget";
model = "\A3\Weapons_f\laserTgt.p3d"; model = "\A3\Weapons_f\laserTgt.p3d";
}; };
// Vehicle lockable configurations
class AllVehicles;
class Air: AllVehicles {
class Turrets;
};
class Helicopter: Air {
class Turrets {
class MainTurret;
};
};
class Helicopter_Base_F: Helicopter {};
class Heli_Attack_01_base_F: Helicopter_Base_F {};
class B_Heli_Attack_01_F: Heli_Attack_01_base_F {
class Turrets: Turrets {
class MainTurret: MainTurret {
GVAR(CanLockLaser) = 1; // Enable laser locking selection
};
};
};
}; };

View File

@ -1,5 +1,7 @@
#include "script_component.hpp" #include "script_component.hpp"
#include "initKeybinds.sqf"
["laser_laserOn", {_this call DFUNC(handleLaserOn)}] call EFUNC(common,addEventHandler); ["laser_laserOn", {_this call DFUNC(handleLaserOn)}] call EFUNC(common,addEventHandler);
["laser_laserOff", {_this call DFUNC(handleLaserOff)}] call EFUNC(common,addEventHandler); ["laser_laserOff", {_this call DFUNC(handleLaserOff)}] call EFUNC(common,addEventHandler);

View File

@ -24,6 +24,10 @@ PREP(laserTargetPFH);
GVAR(VanillaLasers) = []; GVAR(VanillaLasers) = [];
PREP(unitTurretCanLockLaser);
PREP(keyLaserCodeUp);
PREP(keyLaserCodeDown);
// Laser default variables // Laser default variables
ACE_DEFAULT_LASER_CODE = 1001; ACE_DEFAULT_LASER_CODE = 1001;
ACE_DEFAULT_LASER_WAVELENGTH = 1550; ACE_DEFAULT_LASER_WAVELENGTH = 1550;

View File

@ -0,0 +1,12 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
private["_oldLaserCode", "_laserCode"];
_oldLaserCode = ACE_player getVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE];
if(_oldLaserCode > ACE_DEFAULT_LASER_CODE) then {
_laserCode = _oldLaserCode - 1;
ACE_player setVariable [QGVAR(code), _laserCode, false];
};
if(_laserCode != _oldLaserCode) then {
[format ["%1: %2", localize "STR_ACE_laser_laserCode", _laserCode]] call EFUNC(common,displayTextStructured);
};

View File

@ -0,0 +1,10 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
private["_oldLaserCode", "_laserCode"];
_oldLaserCode = ACE_player getVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE];
_laserCode = _oldLaserCode + 1;
ACE_player setVariable [QGVAR(code), _laserCode, false];
if(_laserCode != _oldLaserCode) then {
[format ["%1: %2", localize "STR_ACE_laser_laserCode", _laserCode]] call EFUNC(common,displayTextStructured);
};

View File

@ -0,0 +1,21 @@
/*
* Author: jaynus
* Checks if the turret occupied by the given unit can lock a laser designator and select laser code.
*
* Argument:
* 0: Unit <OBJECT>
*
* Return value:
* Has designator? <BOOL>
*/
#include "script_component.hpp"
EXPLODE_1_PVT(_this,_unit);
// Get the player turret path
private ["_turret","_config","_turretConfig"];
_turret = [_unit] call EFUNC(common,getTurretIndex);
_config = configFile >> "CfgVehicles" >> typeOf vehicle _unit;
_turretConfig = [_config, _turret] call EFUNC(common,getTurretConfigPath);
getNumber (_turretConfig >> QGVAR(CanLockLaser)) > 0

View File

@ -0,0 +1,27 @@
["ACE3 Equipment", QGVAR(LaserCodeUp), localize "STR_ACE_laser_laserCodeUp",
{
if( EGVAR(laser_selfdesignate,active)
||
{ (currentWeapon ACE_player) == "Laserdesignator" && (call CBA_fnc_getFoV) select 1 > 5 } // If laserdesignator & FOV, we are in scope.
||
{ [ACE_player] call FUNC(unitTurretCanLockLaser) }
) then {
[] call FUNC(keyLaserCodeUp);
};
},
{false},
[16, [false, true, true]], false, 0] call CBA_fnc_addKeybind; // (ALT+CTRL+Q)
["ACE3 Equipment", QGVAR(LaserCodeDown), localize "STR_ACE_laser_laserCodeDown",
{
if( EGVAR(laser_selfdesignate,active)
||
{ (currentWeapon ACE_player) == "Laserdesignator" && (call CBA_fnc_getFoV) select 1 > 5 } // If laserdesignator & FOV, we are in scope.
||
{ [ACE_player] call FUNC(unitTurretCanLockLaser) }
) then {
[] call FUNC(keyLaserCodeDown);
};
},
{false},
[18, [true, true, true]], false, 0] call CBA_fnc_addKeybind; // (ALT+CTRL+E)

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="laser">
<Key ID="STR_ACE_laser_laserCode">
<English>Laser Code</English>
</Key>
<Key ID="STR_ACE_laser_laserCodeUp">
<English>Laser - Cycle Code Up</English>
</Key>
<Key ID="STR_ACE_laser_laserCodeDown">
<English>Laser - Cycle Code Down</English>
</Key>
</Package>
</Project>

View File

@ -21,4 +21,29 @@ class CfgVehicles {
}; };
}; };
}; };
class Plane: Air {};
class Plane_Base_F: Plane {
class Turrets {
class CopilotTurret;
};
};
/* @TODO: LGB GBU
class Plane_CAS_01_base_F: Plane_Base_F {
class Turrets: Turrets {
class MainTurret: MainTurret {
GVAR(Enabled) = 1; // Enable laser self-designation
};
};
};
class Plane_CAS_02_base_F: Plane_Base_F {
class Turrets: Turrets {
class MainTurret: MainTurret {
GVAR(Enabled) = 1; // Enable laser self-designation
};
};
};
*/
}; };

View File

@ -7,7 +7,7 @@ if(GVAR(enabled) < 1 || {!local _projectile} ) exitWith { false };
if( !isPlayer _shooter && { GVAR(enabled) < 2 } ) exitWith { false }; if( !isPlayer _shooter && { GVAR(enabled) < 2 } ) exitWith { false };
private["_config", "_enabled", "_target", "_seekerType", "_attackProfile"]; private["_config", "_enabled", "_target", "_seekerType", "_attackProfile", "_laserCode", "_laserInfo"];
private["_args", "_canUseLock", "_guidingUnit", "_launchPos", "_lockMode", "_targetPos", "_vanillaTarget"]; private["_args", "_canUseLock", "_guidingUnit", "_launchPos", "_lockMode", "_targetPos", "_vanillaTarget"];
PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
@ -27,6 +27,9 @@ _seekerType = (vehicle _shooter) getVariable [QGVAR(seekerType), nil];
_attackProfile = (vehicle _shooter) getVariable [QGVAR(attackProfile), nil]; _attackProfile = (vehicle _shooter) getVariable [QGVAR(attackProfile), nil];
_lockMode = (vehicle _shooter) getVariable [QGVAR(lockMode), nil]; _lockMode = (vehicle _shooter) getVariable [QGVAR(lockMode), nil];
_laserCode = (vehicle _shooter) getVariable [EGVAR(laser,code), ACE_DEFAULT_LASER_CODE];
_laserInfo = [_laserCode, ACE_DEFAULT_LASER_WAVELENGTH, ACE_DEFAULT_LASER_WAVELENGTH];
_launchPos = getPosASL (vehicle _shooter); _launchPos = getPosASL (vehicle _shooter);
TRACE_3("Begin guidance", _target, _seekerType, _attackProfile); TRACE_3("Begin guidance", _target, _seekerType, _attackProfile);
@ -67,7 +70,8 @@ _args = [_this,
[_target, _targetPos, _launchPos], [_target, _targetPos, _launchPos],
_seekerType, _seekerType,
_attackProfile, _attackProfile,
_lockMode _lockMode,
_laserInfo
], ],
[ [
getNumber ( _config >> "minDeflection" ), getNumber ( _config >> "minDeflection" ),

View File

@ -2,17 +2,19 @@
#include "script_component.hpp" #include "script_component.hpp"
EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
private["_angleFov", "_canSeeTarget", "_foundTargetPos", "_laserResult", "_launchParams", "_seekerParams", "_seekerTargetPos", "_sensorPos", "_target"]; private["_angleFov", "_canSeeTarget", "_foundTargetPos", "_laserResult", "_launchParams", "_seekerParams", "_laserCode", "_laserParams", "_seekerTargetPos", "_sensorPos", "_target"];
_seekerTargetPos = _this select 0; _seekerTargetPos = _this select 0;
_launchParams = _this select 1; _launchParams = _this select 1;
_seekerParams = _launchParams select 3; _seekerParams = _launchParams select 3;
_angleFov = _seekerParams select 0; _angleFov = _seekerParams select 0;
_laserParams = _launchParams select 5;
if(!isNil "_target") then { if(!isNil "_target") then {
// Handle AI or moving vanilla lasers // Handle AI or moving vanilla lasers
_foundTargetPos = getPosASL _target; _foundTargetPos = getPosASL _target;
} else { } else {
_laserResult = [(getPosASL _projectile), (velocity _projectile), _angleFov, [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot); _laserResult = [(getPosASL _projectile), (velocity _projectile), _angleFov, [(_laserParams select 1),(_laserParams select 2)], (_laserParams select 0)] call EFUNC(laser,seekerFindLaserSpot);
_foundTargetPos = _laserResult select 0; _foundTargetPos = _laserResult select 0;
TRACE_1("Search", _laserResult); TRACE_1("Search", _laserResult);
}; };