mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Casings - Add infantry bullet casings (#8857)
* 1st pass on casings * Readability tweaks * Pretty sure these are needed... * Jonpas never lies * Whitespace fix * Add brother Diwako and allow client override * Use index, avoid count * Both settings a client-side * Add Commy fixings * Proper case for diwako + config * Formatting and AGLtoASL * Perf warning * if not required * Axing parentheses * Remove pointless GVAR update in settings * Update addons/casings/functions/fnc_createCasing.sqf Removed unused param Co-authored-by: PabstMirror <pabstmirror@gmail.com> * Update addons/casings/functions/fnc_createCasing.sqf Co-authored-by: PabstMirror <pabstmirror@gmail.com> * Update addons/casings/functions/fnc_createCasing.sqf Co-authored-by: PabstMirror <pabstmirror@gmail.com> * Default to off due to performance concerns on low-end hardware * Add LIS check to avoid floating * Cleanup header * Further playtesting shows ROADWAY & FIRE have better results * Re-enable by default * Update addons/casings/functions/fnc_createCasing.sqf Co-authored-by: PabstMirror <pabstmirror@gmail.com> * Update addons/casings/functions/fnc_createCasing.sqf Co-authored-by: PabstMirror <pabstmirror@gmail.com> * Update addons/casings/functions/fnc_createCasing.sqf Co-authored-by: PabstMirror <pabstmirror@gmail.com> * Update addons/casings/functions/fnc_createCasing.sqf Co-authored-by: PabstMirror <pabstmirror@gmail.com> * offset setPosWorld with small z-bump Co-authored-by: PabstMirror <pabstmirror@gmail.com>
This commit is contained in:
parent
e994906169
commit
3ddec6cb15
1
addons/casings/$PBOPREFIX$
Normal file
1
addons/casings/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
z\ace\addons\casings
|
17
addons/casings/CfgEventHandlers.hpp
Normal file
17
addons/casings/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
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));
|
||||||
|
};
|
||||||
|
};
|
4
addons/casings/README.md
Normal file
4
addons/casings/README.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
ace_casings
|
||||||
|
===============
|
||||||
|
|
||||||
|
Create persistent empty casing when bullets are fired by infantry weapons.
|
1
addons/casings/XEH_PREP.hpp
Normal file
1
addons/casings/XEH_PREP.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
PREP(createCasing);
|
7
addons/casings/XEH_postInit.sqf
Normal file
7
addons/casings/XEH_postInit.sqf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface || !GVAR(enabled)) exitWith {};
|
||||||
|
|
||||||
|
GVAR(cachedCasings) = createHashMap;
|
||||||
|
GVAR(casings) = [];
|
||||||
|
["CAManBase", "FiredMan", {call FUNC(createCasing)}] call CBA_fnc_addClassEventHandler;
|
11
addons/casings/XEH_preInit.sqf
Normal file
11
addons/casings/XEH_preInit.sqf
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP_RECOMPILE_START;
|
||||||
|
#include "XEH_PREP.hpp"
|
||||||
|
PREP_RECOMPILE_END;
|
||||||
|
|
||||||
|
#include "initSettings.sqf"
|
||||||
|
|
||||||
|
ADDON = true;
|
3
addons/casings/XEH_preStart.sqf
Normal file
3
addons/casings/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#include "XEH_PREP.hpp"
|
17
addons/casings/config.cpp
Normal file
17
addons/casings/config.cpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
class CfgPatches {
|
||||||
|
class ADDON {
|
||||||
|
name = COMPONENT_NAME;
|
||||||
|
units[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
requiredVersion = REQUIRED_VERSION;
|
||||||
|
requiredAddons[] = {"ace_common"};
|
||||||
|
author = ECSTRING(common,ACETeam);
|
||||||
|
authors[] = {"esteldunedain","Cyruz","diwako"};
|
||||||
|
url = ECSTRING(main,URL);
|
||||||
|
VERSION_CONFIG;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "CfgEventHandlers.hpp"
|
68
addons/casings/functions/fnc_createCasing.sqf
Normal file
68
addons/casings/functions/fnc_createCasing.sqf
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: esteldunedain / Cyruz / diwako
|
||||||
|
* Produces a casing matching the fired weapons caliber on the ground around the unit
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: unit - Object the event handler is assigned to <OBJECT>
|
||||||
|
* 1: ammo - Ammo used <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [player, "", "","", "B_556x45_Ball"] call ace_casings_fnc_createCasing
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_unit", "", "", "", "_ammo"];
|
||||||
|
|
||||||
|
if (!isNull objectParent _unit) exitWith {};
|
||||||
|
|
||||||
|
private _modelPath = GVAR(cachedCasings) get _ammo;
|
||||||
|
|
||||||
|
if (isNil "_modelPath") then {
|
||||||
|
private _cartridge = getText (configFile >> "CfgAmmo" >> _ammo >> "cartridge");
|
||||||
|
//Default cartridge is a 5.56mm model
|
||||||
|
_modelPath = switch (_cartridge) do {
|
||||||
|
case "FxCartridge_9mm": { "A3\Weapons_f\ammo\cartridge_small.p3d" };
|
||||||
|
case "FxCartridge_65": { "A3\weapons_f\ammo\cartridge_65.p3d" };
|
||||||
|
case "FxCartridge_762": { "A3\weapons_f\ammo\cartridge_762.p3d" };
|
||||||
|
case "FxCartridge_127": { "A3\weapons_f\ammo\cartridge_127.p3d" };
|
||||||
|
case "FxCartridge_slug": { "A3\weapons_f\ammo\cartridge_slug.p3d" };
|
||||||
|
case "": { "" };
|
||||||
|
default { "A3\Weapons_f\ammo\cartridge.p3d" };
|
||||||
|
};
|
||||||
|
GVAR(cachedCasings) set [_ammo, _modelPath];
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_modelPath isEqualTo "") exitWith {};
|
||||||
|
|
||||||
|
private _unitPos = getposASL _unit;
|
||||||
|
// Distant shooters don't produce as many cases
|
||||||
|
if ((AGLToASL positionCameraToWorld [0,0,0]) vectorDistance _unitPos > 100 && {random 1 < 0.9}) exitWith {};
|
||||||
|
|
||||||
|
private _weapDir = _unit weaponDirection currentWeapon _unit;
|
||||||
|
private _ejectDir = _weapDir vectorCrossProduct [0, 0, 1];
|
||||||
|
private _pos = _unitPos
|
||||||
|
vectorAdd (_weapDir vectorMultiply (-0.5 + random 2))
|
||||||
|
vectorAdd (_ejectDir vectorMultiply (0.2 + random 2));
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
params ["_modelPath", "_pos"];
|
||||||
|
|
||||||
|
private _lisPos = (lineIntersectsSurfaces [_pos, _pos vectorAdd [0,0,-1e11], objNull, objNull, true, 1, "ROADWAY", "FIRE"]) #0;
|
||||||
|
private _casing = createSimpleObject [_modelPath, (_lisPos #0 vectorAdd [0,0,0.005]), true];
|
||||||
|
_casing setDir (random 360);
|
||||||
|
_casing setVectorUp _lisPos #1;
|
||||||
|
private _idx = GVAR(casings) pushBack _casing;
|
||||||
|
|
||||||
|
for "_" from 0 to (_idx - GVAR(maxCasings)) do {
|
||||||
|
deleteVehicle (GVAR(casings) deleteAt 0);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
[_modelPath,_pos],
|
||||||
|
0.4
|
||||||
|
] call CBA_fnc_waitAndExecute;
|
1
addons/casings/functions/script_component.hpp
Normal file
1
addons/casings/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "\z\ace\addons\casings\script_component.hpp"
|
17
addons/casings/initSettings.sqf
Normal file
17
addons/casings/initSettings.sqf
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[
|
||||||
|
QGVAR(enabled), "CHECKBOX",
|
||||||
|
[LSTRING(displayName), LSTRING(description)],
|
||||||
|
LSTRING(Settings_DisplayName),
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
{},
|
||||||
|
true
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
[
|
||||||
|
QGVAR(maxCasings), "SLIDER",
|
||||||
|
[LSTRING(maxCasings_displayName), LSTRING(maxCasings_description)],
|
||||||
|
LSTRING(Settings_DisplayName),
|
||||||
|
[100, 500, 250, -1],
|
||||||
|
false
|
||||||
|
] call CBA_fnc_addSetting;
|
17
addons/casings/script_component.hpp
Normal file
17
addons/casings/script_component.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#define COMPONENT casings
|
||||||
|
#define COMPONENT_BEAUTIFIED Casings
|
||||||
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
// #define DEBUG_MODE_FULL
|
||||||
|
// #define DISABLE_COMPILE_CACHE
|
||||||
|
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_CASINGS
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_SETTINGS_CASINGS
|
||||||
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_CASINGS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "\z\ace\addons\main\script_macros.hpp"
|
20
addons/casings/stringtable.xml
Normal file
20
addons/casings/stringtable.xml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project name="ACE">
|
||||||
|
<Package name="Casings">
|
||||||
|
<Key ID="STR_ACE_Casings_Settings_DisplayName">
|
||||||
|
<English>ACE Casings</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_displayName">
|
||||||
|
<English>Casings Enabled</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_description">
|
||||||
|
<English>Enable persistent casings (POTENTIAL performance impact on old/weak systems)</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_maxCasings_displayName">
|
||||||
|
<English>Maximum casings</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_maxCasings_description">
|
||||||
|
<English>Maximum amount of casings to display</English>
|
||||||
|
</Key>
|
||||||
|
</Package>
|
||||||
|
</Project>
|
Loading…
Reference in New Issue
Block a user