Skip to content
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

Missile Guidance - Add Copperhead M712 #8210

Draft
wants to merge 37 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
e9b4618
Pike prototype
PabstMirror Sep 21, 2016
e27881c
Merge branch 'master' into pike
PabstMirror Oct 28, 2017
f5994e4
Merge branch 'master' into pike
PabstMirror Dec 13, 2018
8243d2d
Magwells
PabstMirror Dec 13, 2018
f11ed76
move include
PabstMirror Dec 13, 2018
507b0bc
Update fnc_handleFired.sqf
PabstMirror Dec 13, 2018
f9f490d
Update configs
PabstMirror Dec 13, 2018
65b34e9
Merge branch 'master' into pike
PabstMirror Dec 9, 2020
452a041
initial clgp
PabstMirror Mar 3, 2021
bf1c092
Merge branch 'master' into pike
PabstMirror Oct 13, 2023
9d18dc6
redo using ammo events
PabstMirror Oct 15, 2023
04cbc02
bom
PabstMirror Oct 15, 2023
538c8c3
Merge branch 'master' into pike
PabstMirror Oct 23, 2023
1c4397d
Remove RVMAT for ammo model
PabstMirror Oct 23, 2023
e8ce14f
spelling of word
PabstMirror Oct 24, 2023
b0f0321
Apply suggestions from code review
PabstMirror Oct 24, 2023
478b11c
Merge branch 'master' into copperhead
PabstMirror Oct 26, 2023
a4fbbff
update clgp
PabstMirror Oct 26, 2023
6480203
reduce change to mg
PabstMirror Oct 26, 2023
986d4f3
More rework
PabstMirror Oct 26, 2023
865dc3d
more cleanup
PabstMirror Oct 27, 2023
590932b
Fly straight when no target data
PabstMirror Oct 28, 2023
6e6c6b7
use artillery drag
PabstMirror Oct 29, 2023
e42713d
Merge branch 'master' into copperhead
PabstMirror Nov 5, 2023
22a3efd
Merge branch 'master' into copperhead
PabstMirror Nov 6, 2023
4e72f9e
Update default laser code
PabstMirror Nov 6, 2023
bd6e7e3
Merge branch 'master' into copperhead
PabstMirror Apr 1, 2024
270979b
Merge branch 'pike' into copperhead
PabstMirror Apr 1, 2024
5a624b8
Merge pike
PabstMirror Apr 1, 2024
1717385
Update CfgAmmo.hpp
PabstMirror Apr 1, 2024
8d5f368
Merge branch 'master' into copperhead
PabstMirror Apr 12, 2024
3c983b6
Add framework doc
PabstMirror Apr 14, 2024
b40f5e1
Merge branch 'master' into copperhead
PabstMirror May 2, 2024
3f512d9
Merge branch 'master' into copperhead
PabstMirror May 24, 2024
e142d38
Disable alt flightmode for now
PabstMirror May 24, 2024
9084383
Merge branch 'master' into copperhead
PabstMirror Sep 28, 2024
c353100
Update for mg changes
PabstMirror Sep 28, 2024
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 addons/clgp/$PBOPREFIX$
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
z\ace\addons\clgp
6 changes: 6 additions & 0 deletions addons/clgp/ACE_GuidanceConfig.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class EGVAR(missileguidance,AttackProfiles) {
class copperhead {
onFired = QFUNC(copperhead_onfired);
functionName = QFUNC(copperhead_attackprofile);
};
};
104 changes: 104 additions & 0 deletions addons/clgp/CfgAmmo.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
class CfgAmmo {

class SubmunitionBase;
class ace_155mm_m712_launch: SubmunitionBase {
model = "\A3\weapons_f\ammo\shell";
hit = 160; // low for testing
indirectHit = 50;
indirectHitRange = 8;

GVAR(deployCondition) = QFUNC(copperhead_deployCondition);
submunitionAmmo = "ace_155mm_m712_guidance";
submunitionCount = 1;
submunitionConeAngle = 0;
triggerDistance = 0;
muzzleEffect = "";
airFriction = 0;

EGVAR(frag,skip) = 1; // don't frag because this is a scripted ammo
class Eventhandlers {
fired = QUOTE(call FUNC(submunition_ammoFired));
};
class CamShakeFire {
power = 3.00922;
duration = 1.8;
frequency = 20;
distance = 72.4431;
};
class CamShakePlayerFire {
power = 0.01;
duration = 0.1;
frequency = 20;
distance = 1;
};
};

class ammo_Bomb_LaserGuidedBase;
class ace_155mm_m712_guidance: ammo_Bomb_LaserGuidedBase {
model = "\A3\Weapons_F_EPC\Ammo\Bomb_04_fly_F.p3d";
hit = 160;
indirectHit = 50;
indirectHitRange = 8;

maneuvrability = 12;
airFriction = 0.04; // note: works differently from shell (v^3...)
sideAirFriction = 0.225;

artilleryLock = 0; // would keep shell pointed towards velocity, but disables manuverability and airfric

initTime = 0;
thrustTime = 0;
thrust = 0; // free fall

flightProfiles[] = { "Direct" };
class Direct {};
class Components {};

manualControl = 1;
maxControlRange = 100000;
missileManualControlCone = 360;
missileLockCone = 360;
missileKeepLockedCone = 360;
missileLockMaxDistance = 100000;
missileLockMinDistance = 0;

autoSeekTarget = 0;
weaponLockSystem = 0;
irLock = 0;
laserLock = 0;
airLock = 0;

timeToLive = 200;

class ace_missileguidance {
enabled = 2;

useVanillaDeflection = 1; // use missileTarget for deflection
minDeflection = 0.01; // Minium flap deflection for guidance
maxDeflection = 0.01; // Maximum flap deflection for guidance

canVanillaLock = 0;

// Guidance type for munitions
defaultSeekerType = "SALH";
seekerTypes[] = { "SALH" };

defaultSeekerLockMode = "LOAL";
seekerLockModes[] = { "LOAL" };

seekerAngle = 70; // Angle in front of the missile which can be searched
seekerAccuracy = 1; // seeker accuracy multiplier

seekerMinRange = 0;
seekerMaxRange = 3000; // Range from the missile which the seeker can visually search

seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos]

// Attack profile type selection
defaultAttackProfile = "copperhead";
attackProfiles[] = {"copperhead"};
useModeForAttackProfile = 0;
};
};

};
15 changes: 15 additions & 0 deletions addons/clgp/CfgEventhandlers.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_postInit));
};
};
11 changes: 11 additions & 0 deletions addons/clgp/CfgMagazines.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class CfgMagazines {
class 32Rnd_155mm_Mo_shells;
class ace_1rnd_155mm_m712: 32Rnd_155mm_Mo_shells {
author = ECSTRING(common,ACETeam);
displayNameMFDFormat = "M712";
displayNameShort = "M712";
displayName = "Copperhead";
ammo = "ace_155mm_m712_launch";
count = 1;
};
};
8 changes: 8 additions & 0 deletions addons/clgp/CfgWeapons.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class CfgWeapons {
class CannonCore;
class mortar_155mm_AMOS: CannonCore {
reloadTime = 1;
magazineReloadTime = 1;
magazines[] += {"ace_1rnd_155mm_m712"};
};
};
92 changes: 92 additions & 0 deletions addons/clgp/GUI.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
class RscObject;
class RscButton;

class GVAR(copperhead_dialButton): RscButton {
style = 2;
x = 0;
y = 0;
w = 99;
h = 99;
soundEnter[] = {"", 0.2, 1};
soundPush[] = {"", 0.2, 1};
soundClick[] = {"", 0.2, 1};
soundEscape[] = {"", 0.2, 1};
color[] = {0,0,0,0};
colorBackground[] = {0,0,1,0};
// colorBackground[] = {0,0,1,0.1};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {0,0,0,0};
colorFocused[] = {0,0,0,0};
text = "";
};

class GVAR(copperhead_dialog) {
idd = -1;
enableSimulation = 1;
onLoad = QUOTE(with uiNamespace do {GVAR(copperhead_dialog) = _this select 0});
duration = 1e99;
class ControlsBackground {};
class Controls {};
class Objects {
class TheThing: RscObject {
type = 82;
idc = 100;
model = QPATHTOF(data\ace_copperhead_interactive.p3d);
direction[] = {0,0,1};
up[] = {0,1,0};
position[] = {0,-0.338,0.5};
positionBack[] = {0,-0.338,0.5};
enableZoom = 0;
zoomDuration = 1;
scale = 1;
inBack = 0;
class Areas {
class Dial1 {
selection = "dial1";
class Controls {
class ButtonDial1: GVAR(copperhead_dialButton) {
idc = 111;
tooltip = "Flight Profile";
};
};
};
class Dial2 {
selection = "dial2";
class Controls {
class ButtonDial2: GVAR(copperhead_dialButton) {
idc = 112;
tooltip = "Guidance Delay";
};
};
};
class Dial3 {
selection = "dial3";
class Controls {
class ButtonDial3: GVAR(copperhead_dialButton) {
idc = 113;
tooltip = "Laser Code";
};
};
};
class Dial4 {
selection = "dial4";
class Controls {
class ButtonDial4: GVAR(copperhead_dialButton) {
idc = 114;
tooltip = "Laser Code";
};
};
};
class Dial5 {
selection = "dial5";
class Controls {
class ButtonDial5: GVAR(copperhead_dialButton) {
idc = 115;
tooltip = "Laser Code";
};
};
};
};
};
};
};
4 changes: 4 additions & 0 deletions addons/clgp/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ace_clgp
===================

Cannon Launched Guided Projectiles
9 changes: 9 additions & 0 deletions addons/clgp/XEH_PREP.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
LOG("prep");

PREP(copperhead_attackprofile);
PREP(copperhead_deployCondition);
PREP(copperhead_onfired);
PREP(copperhead_uiCanOpen);
PREP(copperhead_uiCreate);

PREP(submunition_ammoFired);
58 changes: 58 additions & 0 deletions addons/clgp/XEH_postInit.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include "script_component.hpp"

// Add shell config action to vehicles that can fire it
if (hasInterface) then {
["turret", {
params ["_player", "_turret"];
TRACE_3("turret",_player,_turret,typeOf vehicle _player);
if (_turret isNotEqualTo [0]) exitWith {};
private _vehicle = vehicle _player;
if ((!alive _player) || {!alive _vehicle} || {_vehicle getVariable [QGVAR(copperhead_actionHandled), false]}) exitWith { TRACE_1("exit",_vehicle); };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surely the lazy eval doesn't save anything with such a cheap check ?

Suggested change
if ((!alive _player) || {!alive _vehicle} || {_vehicle getVariable [QGVAR(copperhead_actionHandled), false]}) exitWith { TRACE_1("exit",_vehicle); };
if ((!alive _player) || !alive _vehicle || {_vehicle getVariable [QGVAR(copperhead_actionHandled), false]}) exitWith { TRACE_1("exit",_vehicle); };


private _canFireCopperhead = false;
{
if ("ace_1rnd_155mm_m712" in ([_x] call CBA_fnc_compatibleMagazines)) exitWith { _canFireCopperhead = true; };
} forEach (_vehicle weaponsTurret [0]);

if (_canFireCopperhead) then {
TRACE_2("adding action to object",_vehicle,typeOf _vehicle);
private _action = [QGVAR(copperhead), LLSTRING(copperhead_action), "",
LINKFUNC(copperhead_uiCreate), LINKFUNC(copperhead_uiCanOpen)] call EFUNC(interact_menu,createAction);
[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
};
_vehicle setVariable [QGVAR(copperhead_actionHandled), true];
}, true] call CBA_fnc_addPlayerEventHandler
};


#ifdef ENABLE_QUICK_TESTING
["recompile", "recompile", "recompile", {
private _start = diag_tickTime;
[] call ACE_PREP_RECOMPILE;
[] call ace_common_fnc_dumpPerformanceCounters;
private _end = diag_tickTime;
systemChat format ["recompile took [%1 ms]", (1000 * (_end - _start)) toFixed 1];

if (productVersion #4 == "Diag") then {
call compile "diag_mergeConfigFile ['P:\z\ace\addons\clgp\config.cpp']";
};
false
}, {false}, [33, [false, false, false]], false] call CBA_fnc_addKeybind; // F Key

["turret", {
params ["_player", "_turret"];
private _veh = vehicle _player;
if (currentWeapon _veh == "mortar_155mm_AMOS") then {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (currentWeapon _veh == "mortar_155mm_AMOS") then {
if (currentWeapon _veh isEqualTo "mortar_155mm_AMOS") then {

If currentWeapon always returns the correct casing.

systemChat "loading";
_veh addMagazineTurret ["ace_1rnd_155mm_m712", [0], 1];
_veh addMagazineTurret ["ace_1rnd_155mm_m712", [0], 1];
_veh addMagazineTurret ["ace_1rnd_155mm_m712", [0], 1];
_veh addMagazineTurret ["ace_1rnd_155mm_m712", [0], 1];
_veh addMagazineTurret ["ace_1rnd_155mm_m712", [0], 1];
_veh addMagazineTurret ["ace_1rnd_155mm_m712", [0], 1];
_veh loadMagazine [[0], "mortar_155mm_AMOS", "ace_1rnd_155mm_m712"];
};
}, true] call CBA_fnc_addPlayerEventHandler


#endif
9 changes: 9 additions & 0 deletions addons/clgp/XEH_preInit.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include "script_component.hpp"

ADDON = false;

PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;

ADDON = true;
3 changes: 3 additions & 0 deletions addons/clgp/XEH_preStart.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "script_component.hpp"

#include "XEH_PREP.hpp"
22 changes: 22 additions & 0 deletions addons/clgp/config.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "script_component.hpp"

class CfgPatches {
class ADDON {
name = COMPONENT_NAME;
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_missileguidance"};
author = ECSTRING(common,ACETeam);
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};

#include "ACE_GuidanceConfig.hpp"

#include "CfgEventhandlers.hpp"
#include "CfgAmmo.hpp"
#include "CfgMagazines.hpp"
#include "CfgWeapons.hpp"
#include "GUI.hpp"
Binary file added addons/clgp/data/ace_copperhead_interactive.p3d
Binary file not shown.
Binary file added addons/clgp/data/copperhead_dial_co.paa
Binary file not shown.
Loading