Skip to content

Commit

Permalink
Frag - Add public blacklist interface (#10163)
Browse files Browse the repository at this point in the history
* Capitalized config entries

* fixed example syntax

* fixed call syntax

* alphabetized PREP instead of categorizing it

* Really obvious isNull instead of isEqualTo

Co-authored-by: johnb432 <[email protected]>

* Fixed array of double spaced format errors

* renamed files to fit proper format

* fixed more spacing issues

* formatting

* Fixed debug mode init, a few things pointed out by johnb432 that I was dumb not to do

* formatting

* Updated type checks in line with recommendation from johnb432

* fixed comment to properly state variable purpose

* Comments fixed

* slight performance increase using forEach loops

Co-authored-by: johnb432 <[email protected]>

* Small optimization to optimize config lookup

quick testing shows a whole 600ns increase in

Co-authored-by: johnb432 <[email protected]>

* avoid mismatch sides when debugging frags with unconcious or captive shooters

Co-authored-by: johnb432 <[email protected]>

* removed return of sphere object, not required or useful.

* fixed a loop that got caught in the merge crossfire

* Optimized approach to classifying blacklist type

Co-authored-by: johnb432 <[email protected]>

* Implemented changes discussed here #9728 (comment)

* Config lookup optimization mentioned by johnb432 here: #9728 (comment)

* white space/formatting changes

* removed old parameter changed in f28d5d2

* compacted text a bit

* formatting whitespace

* Grammatical erros

* Changes as discussed here #9728 (comment)

* Few quick optimizations of == to isEqualTo

* Debug updated to be easier to control

* Changed how spall hold off is calculated to avoid repeated unneeded computations

* clarified a hold off variable

* Better approach to ACE_FRAG_RM_EH macro

* Git rid of superfulous stringtable entries

Co-authored-by: johnb432 <[email protected]>

* unneeded parens

Co-authored-by: johnb432 <[email protected]>

* Clarified arguments

Co-authored-by: johnb432 <[email protected]>

* getposATL to getPosATL

Co-authored-by: johnb432 <[email protected]>

* Update addons/frag/functions/fnc_dev_addRound.sqf

Co-authored-by: johnb432 <[email protected]>

* Function header changes

Co-authored-by: johnb432 <[email protected]>

* another great isNotEqualTo opportunity

Co-authored-by: johnb432 <[email protected]>

* formatting changes

Co-authored-by: johnb432 <[email protected]>

* unneeded parens

Co-authored-by: johnb432 <[email protected]>

* Declared _ammoInfo twice

* optimized around checking if systems are active and moved debug arguments to an ifdef

* Removed white space from removing an if statement in a previous commit

* Removed superfulous parenthese

Co-authored-by: johnb432 <[email protected]>

* clarified function description and removed unneeded comments

* Moved "isServer" check to initRound function

* #9728 (comment)

* changed params statement, function header, and propigated doFrag argument changes

* capitization from cfg to Cfg in config lookups

* changed default arguments, check isKindOf to "CAManBase"

* Updated function headers

* white space and define placement changes

* removed 2 argument option and removed some defaults

* removed spurious commas

* removed unused debug GVAR

* Switched debug clear traces from addAction to ACE self interact

* variable names weren't verbose enough

* Mactched format #9728 (comment)

* Updated debug settings

* Shot parent possible fix #1

* Removed extra text from CfgAmmoFragParameters

* Makes sure spall power square root is positive and also we don't produce fragments when for some reason the round accelerates.

* white space for clarity

Co-authored-by: johnb432 <[email protected]>

* Optimize dev_hitbox deleting

Co-authored-by: johnb432 <[email protected]>

* saving people from their own bad testing setup

* Since the functions always exist, I guess these variables should too

* Fixe bad search function

* optimization, see #9728 (comment)

* changed SPG-9 Fragments

* removed unneeded toLower

* Changed case output to match config

* Increased relative chance to hit torso/pelvis when fragemnt should hit.

* Removed double space

* updated some round types

* Added commented 2.18 commands and updated script component

* added print incomplete only option to fnc_debugAmmo

* removed all spaces from macros

* removd unneeded define

* a Brett (HEMTT) suggested change I miss

* Apply suggestions from code review

Small formatting changes and small errors

Co-authored-by: johnb432 <[email protected]>

* Removed doublespace

Co-authored-by: johnb432 <[email protected]>

* Update addons/frag/functions/fnc_dev_addRound.sqf

If the round isn't in the hashmap anymore, we have to stop the PFH.
Brought code up to same standard as used in FUNC(dev_trackObj). - johnb432

Co-authored-by: johnb432 <[email protected]>

* Update addons/frag/functions/fnc_dev_drawTrace.sqf

Co-authored-by: johnb432 <[email protected]>

* variable name changes

* magic number clean up and white space

* white space, function headers and variable names

* small Should spall optimization

Co-authored-by: johnb432 <[email protected]>

* Removed blacklist functions and settings

* reformatted function headers, removed value type checking, and changed lazy eval.

* fixed missing underscore in change from review

* function header, lazy eval,  and params list simplifications

* function header and variable name readability

* changed defaults to make them more clear they're just a default value

* Updated wiki to be clearer in a few areas, and add some other information I've found working on this

* added MP debug compatability

* Possible shouldFrag legibility improvement

* added changes to stringtable

* Grammar sweep on the wiki, and added some clarifications to config values

* optimized dev_trackHitbox and made variables more explicit

* Cleaned up documentation and documentation

* reorganized postInit CBA_settingInitialized EH

* missing underscore in fnc_dev_trackObj

Co-authored-by: johnb432 <[email protected]>

* stopped adding unneeded extra points

Co-authored-by: johnb432 <[email protected]>

* cleaned un-updated stringtable entries

* reworked some function headers and deleted whitespace in doFragTargeted

* Removed outdated code

* Formatting and header fixes

* Ignore curators and spectators

* Made clear traces global again, added interaction condition

* Change stringtable entries

* Removed unused stringtable entries & fixed hitbox description

* Small coding standard changes (missing semicolons on  non-return values, extra parenthesis)

* Changed sphere size and added return based on usage in dev_trackHitBox

* removed "_lo" random fragment entries as they are unused

* doFragRandom was always being called and spawning at least 5 fragments even when the fragment budget of 50 was reached. Fixed variable name (AGL instead of ATL).

* removed unnceassary "disableCollisionWith"

* Clarified trace statements and corrected format and spelling

* Do spall exits for time 90% of the time (round hits multiple walls) and should exit on "hitting ground since no spalling is generated

* Fixed ordering in which frag hold off variables are set to not skip when unneeded

* initRound ordering and fixed define names

* Fixed function header

* reformatted comments and some v2.18 remakrs comments

* Removed unneeded ground offset

* Expanded TRACE

* Fix typo

* Moved event to preInit

* Updated default fallback frag distance to be less extreme and changed fixed a magic number

* Randomized random frag directions

* removed some magic numbers, and cached numbers from shouldSpall

* removed magic numbers and cached values preemptively (normally spallInfoCache is called later, but we pull the right config parameters so we might as well store them)

* Unify example formatting

Co-authored-by: Grim <[email protected]>

* cleaned up function examples

* removed excess square brackets

* Final function example reformat

* Update addons/frag/script_component.hpp

* Corrected docs

* Use `getOrDefaultCall`

* Removed unused classes, redefined using macros to minimize error and make review easier

* updated debugging output and fixed velocity error

* Reformatted for legibility and debug output

* caught calc error while answer johnb's question

* Almost finished with compats and I had some changes to align vanilla as well

* Missed variable when updating

* Added unneeded class details to make PBOproject happy

* Forgot to update doFragRandom docs with previous changes

* and the debug context

* Readd blacklist

* Fixed an issue with fragments being created above water for explosions below the surface

* Exposed projectile event handlers for both blacklist use and other shenanigans.

* Revert "Exposed projectile event handlers for both blacklist use and other shenanigans."

This reverts commit eaff498.

* added debug information and folded if statements

* fixed error (if statement with no argument)

* Only send blacklist updates to the server

* Added default fragCount fallback value based on current ACE frag range calculation

* Converted all positions for doFrag to AGL since we're converting to that now

* removed feet hitpoints & tightened multishot submunitions.
Feet hitpoitns aren't used since calculation for trajectory doesn't account for drag, fragments aimed at feet won't hit

* Merge branch 'acemod:master' into master

* Revert to 60a0dae, merge conflict wasn't resolved properly

* Removed event handlers

* Changed blacklist to acting on local projectiles to match initial performance

* added fired EH and moved projectile tracking to be local to projectile

* updated initialization and should frag to check for submunitions since we no longer rely on init EH

* Fixed calls for shouldFrag and got rid of old initRound.sfq (maybe back after 2.18)

* fixed small mistakes in names and function calls

* fixed frame offset to avoid hitting dead targets

* Fixed config path in shouldFrag

* Didn't know that PBO project needed trailing {} on class inheritance structures

* fixed more useless trailing {}

* Initial rollback to old frag simulation and spalling simulation. Updated spall to function and helpter functions as well

* missed comma

* remove fragCount from config

* made addBlackList remove projectile EHs

* updated config path to be relevant to post-EH version

* All spalling in current version is local

* updated search pattern to one discussed in PR #9728

* updated defines to match implementation

* removed commented out debug information from nouber

* removed magic numbers and code with no effect

* removed more magic numbers

* unfucked a comma

* fixed debug def names

* updated documentation

* changed debug colors

* mass must be in grams in this version I guess

* fixed errors in frag with downgrade

* fixed timing and other spall issues

* updated some defne names and usages

* increased code legiblity and optimized some randomizations

* clarified parts of the spall event chain

* Optimized loop to find spall position using larger steps and fewer operations per loop

* fixed small errors

* removed unused variables & EHs and set defaults in the case debug mode draw isn't used

* removed "class eventhandler" references

* removed _fragCount reference in newly backported debug functions

* fragmenting projectile velocity isn't used anywhere

* removed unused variables, implemented fixes from full rewrite PR, and fixed math errors

* added debug draw mode to DEBUG_ENABLED_FRAG define check

* fix documentation to make units clear on metal and filler quanities

* command capitalization

* added target point debug spheres

* fixed target sphere visability

* Jank fix so that the unit firing can get hit with it's own fragments

* accidentally committed script_component.hpp w/ debug enabled

* Alternative way to address shot parent self-harm issue

* missed comma, going to bed, sorry

* add newline and fix blacklist

* legability formatting

* removed extra newlines and double spaces

* Updated function documentation

* Removed unused stringtable items

* Debug sphere conditional was missing in frago

* Added class blacklisting functionality

* Converted addBlacklist function to be public

* fixed glaring error

* Reformatted to be more concise and added argument defaults.

* Deleted  one sentence too many

* Fixed info macro usage

* Forgot to consider someone might have explosion reflections on but not fragmentation

* Fix some post merge errors

* missed a few more merge errors

* renamed classBlacklist function

---------

Co-authored-by: johnb432 <[email protected]>
Co-authored-by: Grim <[email protected]>
  • Loading branch information
3 people authored Sep 18, 2024
1 parent 255417a commit 7cfdaa7
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 8 deletions.
1 change: 1 addition & 0 deletions addons/frag/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ PREP(fired);
PREP(frago);
PREP(getFragInfo);
PREP(getSpallInfo);
PREP(setClassBlacklisted);
PREP(shouldFrag);
PREP(shouldSpall);
24 changes: 16 additions & 8 deletions addons/frag/functions/fnc_addBlacklist.sqf
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
#include "..\script_component.hpp"
/*
* Author: Jaynus, NouberNou
* Author: Jaynus, NouberNou, Lambda.Tiger
* Adds a round to the blacklist (will be ignored) and removes any ace_frag event handlers added to it.
* Once blacklisted a projectile can not be "unblacklisted."
*
* Arguments:
* 0: Projectile <OBJECT>
* 0: Projectile to be blacklisted <OBJECT>
*
* Return Value:
* None
* Was the projectile blacklisted <BOOL>
*
* Example:
* [_projectile] call ace_frag_fnc_addBlackList
*
* Public: No
* Public: Yes
*/

params ["_projectile"];
params [["_projectile", objNull, [objNull]]];
TRACE_2("addBlackList",_projectile,typeOf projectile);

_projectile setVariable [QGVAR(blacklisted), true];
_projectile removeEventHandler ["HitPart", _projectile getVariable [QGVAR(hitPartEventHandler), -1]];
if (isNull _projectile || {!isClass (configFile >> "CfgAmmo" >> (typeOf _projectile))}) exitWith {
TRACE_1("Invalid projectile",_this);
false;
};

nil // return
_projectile setVariable [QGVAR(blacklisted), true];
_projectile removeEventHandler [
"HitPart",
_projectile getVariable [QGVAR(hitPartEventHandler), -1]
];
true;
49 changes: 49 additions & 0 deletions addons/frag/functions/fnc_setClassBlacklisted.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#include "..\script_component.hpp"
/*
* Author: Lambda.Tiger
* Blacklist an ammo class preventing it from producing fragments and/or spall.
* This function will not allow you to force a projectile to produce fragments or spall.
* Once an ammo class has been blacklisted, it can be removed from the blacklist using this function without restarting the mission.
*
* Arguments:
* 0: Class name of the ammo to be blacklisted <STRING>
* 1: Should a projectile be blacklisted from producing fragments <BOOL> (default: true)
* 2: Should a projectile be blacklisted from producing spall <BOOL> (default: true)
*
* Return Value:
* Were the changes properly applied <BOOL>
*
* Example:
* // Stop "ACE_20mm_HE" from producing spall
* ["ACE_20mm_HE", false, true] call ace_frag_fnc_setClassBlacklisted;
*
* Public: Yes
*/
params [
["_ammo", "", [""]],
["_blacklistFrag", true, [true]],
["_blacklistSpall", true, [true]]
];
TRACE_3("addBlackListClass",_ammo,_blacklistFrag,_blacklistSpall);

if (_ammo isEqualTo "" || {!isClass (configFile >> "CfgAmmo" >> _ammo)}) exitWith {
INFO_1("Invalid ammo class [%1]",_ammo);
false
};

if (_blacklistFrag) then {
GVAR(shouldFragCache) set [_ammo, false];
} else {
GVAR(shouldFragCache) deleteAt _ammo;
_ammo call FUNC(shouldFrag);
};


if (_blacklistSpall) then {
GVAR(shouldSpallCache) set [_ammo, false];
} else {
GVAR(shouldSpallCache) deleteAt _ammo;
_ammo call FUNC(shouldSpall);
};

true

0 comments on commit 7cfdaa7

Please sign in to comment.