* feat: IW3 dump xanim to cod4 mod tools compatible binary
* chore: add XAnimPartType enum to game headers
* chore: use XAnimPartType in XAnimDumperIW3
* chore: extract xanim filename into XAnimCommon
* chore: prefer emplace_back over push_back
* chore: small code style improvements
* chore: use proper unsigned types for XAnimParts structs
* chore: use better understandable calculations for bitfields
* chore: use game names for parts
* chore: rename method to WriteNoteTracks
* chore: adds comments and improve clearity of what the game does
* chore: extract stream writing methods into StreamUtils
* chore: use vec3 for XAnimPartTransFrames mins and size
* chore: properly differ between XQuat and XQuat2 structs
* chore: use constants for xanim flags
* chore: use optional for delta track quats and trans
* chore: split delta track writing methods into quat and trans
* chore: add assertion for bDelta
* chore: simplify quat frame encoding indexing
* chore: simplify float to int bit casting
* chore: do not throw exception on failing to reconstruct bone tracks
* feat: add xanim loader for iw3
* fix: make sure to sort quats and trans like the game
* chore: prevent empty dumped files on bad xanim data
* chore: ensure no exception on zero frames in xanim notifies
* test: add system test for iw3 xanims
---------
Co-authored-by: Jan Laupetin <jan@laupetin.net>
* Copied template from font.
* Create PhysPreset writer from Font dumper template.
* Completely refactor to match previous implementation.
* Remove files from previous implementation.
* Fix PhysPresetFields.
* Add missing fields and correct order.
* Add static infinity check as builtin does not work.
* Wasn't clang formatted.
* Remove unused 'perSurfaceSndAlias' field.
* Removed unsupported vals (tracer & vehicle) and un-needed vals (material).
* Make order match struct and mark 'tempDefaultToCylinder' as QBOOLEAN.
* Make order match struct and clamp vals for 'mass' and 'tempDefaultToCylinder'.
* Remove un-needed includes and add limits for float max.
* Remove clamping of mass.
* Use float max to determine if friction is infinite.
* Clang format.
* chore: formatting
* chore: do not use classes for obj constants
---------
Co-authored-by: njohnson <gitea.nicholasjohnson.info>
Co-authored-by: Jan Laupetin <jan@laupetin.net>