Compare commits

...

18 Commits
0.11 ... main

Author SHA1 Message Date
Jeff 559217d991 meta: Add vs2022 files to .gitignore
Babe, new visual studio garbage file just dropped!
2024-02-03 23:30:48 +00:00
RaphaelIT7 c63e5211b3 Made JoltPhysicsObject::GetName() functional 2023-10-02 13:02:52 -07:00
Joshua Ashton 50cef39716 vpc: Fix SSE4.2/AVX2 leaking into other builds
Closes: #138
Closes: #182
2023-08-01 02:59:22 -07:00
Raphael 8ebdc6b77f
ci: Setup permissions for executing 2023-07-31 18:50:44 -07:00
Joshua Ashton 17b5e73799 environment, spring: Use StiffnessAndDamping for springs
Should improve springs significantly.
2023-08-01 02:27:27 -07:00
Joshua Ashton 2242614d4a vehicle: Use StiffnessAndDamping for spring
Removes my todo here, and improves vehicles a lot.
2023-08-01 02:27:21 -07:00
Joshua Ashton 457a95fca5 Rebase against latest JoltPhysics w/ CCD fix
Closes: #1
Closes: #28
Closes: #86
2023-08-01 02:27:16 -07:00
Josh Dowell 562458200c If we fail to create a convex hull from the supplied points, substitute it for a small sphere.
I found exactly one model in a single map for gmod that causes this to happen, a better solution would be to re-calculate a valid hull from the supplied points, but this'll do since it's such a rare case.
2023-04-11 07:15:10 +01:00
Joshua Ashton d407472830 Support for GMod branch on Linux 2023-04-10 02:13:30 +01:00
Joshua Ashton ae995e24bf compat: Support for GMod mini-source-sdk 2023-04-10 01:24:51 +01:00
Joshua Ashton a7fece4d4e player: Only push objects if the normal < -0.7 (grounded)
Improves: #3

Closes: #118
2023-03-29 19:04:23 +01:00
Joshua Ashton be6b64b31e all: Rebase against latest VPhysics Jolt
Bump submodule to 172a99c718bded5faa169ac440517286684fa2f0 and fixup our code to support the latest version.

Additionally, some water changes/fixes.
2023-03-29 18:31:20 +01:00
Jeremy Lorelli 6c3e224561 object: Convert sphere radius to Source units 2022-12-31 07:18:35 +00:00
Joshua Ashton 067cc7eb4e
README: Add reference to Jolt Physics repo in the readme. 2022-10-25 01:11:24 +01:00
JJL772 860c66d09a environment: Fix GetBroadPhaseLayerName BroadPhaseLayers -> string mapping 2022-09-28 17:28:12 +01:00
Bagel™ 49abdbbef7 meta: Add build.md 2022-09-21 18:30:01 +00:00
Margen67 0b937b95ce artifacts.yml: Improvements
Set fail-fast to false (stopping jobs if one fails isn't always desirable)
Remove unused ids; These are only used for outputs, and outputs aren't used anywhere.
Remove unneeded shell; pwsh and bash are already the default shell of Windows and Linux.
Upgrade upload-artifact to v3.
2022-09-21 19:26:50 +01:00
Magnus Larsen 0c55d0082d collide: Deconstruct CPhysCollide properly
It is necessary to dispatch the correct JPH::Shape dtor, even though
it's stored as a a CPhysCollide*.

This should fix #58
2022-09-21 19:26:07 +01:00
26 changed files with 804 additions and 518 deletions

View File

@ -5,28 +5,25 @@ on: [push, pull_request, workflow_dispatch]
jobs:
windows:
strategy:
fail-fast: false
matrix:
source_branch: [sdk2013-sp, sdk2013-mp, asw]
source_branch: [sdk2013-sp, sdk2013-mp, asw, gmod]
runs-on: windows-2022
steps:
- name: Checkout Mini Source SDK
id: checkout-minisdk
uses: actions/checkout@v3
with:
repository: 'Joshua-Ashton/mini-source-sdk'
repository: Joshua-Ashton/mini-source-sdk
- name: Checkout VPhysics Jolt
id: checkout-code
uses: actions/checkout@v3
with:
path: '${{ matrix.source_branch }}/src/vphysics_jolt'
path: ${{ matrix.source_branch }}/src/vphysics_jolt
submodules: recursive
- name: Find Visual Studio
id: find-vs
shell: pwsh
run: |
$installationPath = Get-VSSetupInstance `
| Select-VSSetupInstance -Require Microsoft.VisualStudio.Workload.NativeDesktop -Latest `
@ -35,9 +32,7 @@ jobs:
| Out-File -FilePath "${Env:GITHUB_ENV}" -Append
- name: Build MSVC x86
id: build
shell: pwsh
working-directory: '${{ matrix.source_branch }}/src'
working-directory: ${{ matrix.source_branch }}/src
run: |
& "${Env:COMSPEC}" /s /c "`"${Env:VSDEVCMD}`" -arch=x86 -host_arch=x64 -no_logo && set" `
| % { , ($_ -Split '=', 2) } `
@ -48,8 +43,7 @@ jobs:
msbuild jolt.sln /nodeReuse:false /t:Rebuild /p:Configuration=Release /p:Platform=x86 /m /v:minimal
- name: Upload artifacts
id: upload-artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: vphysics_jolt_${{ matrix.source_branch }}_win32
path: ${{ matrix.source_branch }}/game
@ -57,46 +51,44 @@ jobs:
linux:
strategy:
fail-fast: false
matrix:
source_branch: [sdk2013-sp, sdk2013-mp]
source_branch: [sdk2013-sp, sdk2013-mp, gmod]
runs-on: ubuntu-latest
container: debian:bullseye
steps:
- name: Install Dependencies
id: install-deps
shell: bash
run: |
dpkg --add-architecture i386
apt update
apt install -y build-essential git libstdc++6:i386 gcc-multilib g++-multilib
- name: Checkout Mini Source SDK
id: checkout-minisdk
uses: actions/checkout@v3
with:
repository: 'Joshua-Ashton/mini-source-sdk'
repository: Joshua-Ashton/mini-source-sdk
- name: Checkout VPhysics Jolt
id: checkout-code
uses: actions/checkout@v3
with:
path: '${{ matrix.source_branch }}/src/vphysics_jolt'
path: ${{ matrix.source_branch }}/src/vphysics_jolt
submodules: recursive
- name: Build GCC x86
id: build
shell: bash
working-directory: '${{ matrix.source_branch }}/src'
working-directory: ${{ matrix.source_branch }}/src
run: |
./createjoltprojects.sh
chmod +x createjoltprojects.sh
chmod +x devtools/bin/vpc_linux
chmod +x devtools/bin/vpc
chmod +x devtools/gendbg.sh
./createjoltprojects.sh
make -f jolt.mak -j $(nproc)
- name: Upload artifacts
id: upload-artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: vphysics_jolt_${{ matrix.source_branch }}_linux32
path: ${{ matrix.source_branch }}/game
if-no-files-found: error
if-no-files-found: error

4
.gitignore vendored
View File

@ -39,6 +39,10 @@ generated_code_*
*.dll
*.exe
*.lib
*.ixx.ifc.dt.module.json.command
*.ixx.ifc.dt.module.json
*.ixx.ifc.dt.d.json
# Linux Stuff
*.mak

View File

@ -2,7 +2,7 @@
## What is Volt? ⚡
Volt (VPhysics Jolt) is a replacement for Source's VPhysics which uses IVP/Havok<br>
Volt (VPhysics Jolt) is a replacement for Source's VPhysics which uses IVP/Havok using [Jolt Physics](https://github.com/jrouwe/JoltPhysics/)<br>
Created by [Joshua Ashton (🐸✨)](https://github.com/Joshua-Ashton) [@phys_ballsocket](https://twitter.com/phys_ballsocket) and [Josh Dowell (Slartibarty)](https://github.com/Slartibarty) [@Slartbarty](https://twitter.com/Slartbarty).
Volt is designed to be incredibly high performance, supporting thousands of objects at once without bringing tick/framerate down to a crawl.
@ -59,6 +59,8 @@ Volt should build fine against Source SDK 2013 and Alien Swarm SDK on a MSVC or
Unfortunately we cannot redistribute the additional code/headers needed to build Volt for games such as Garry's Mod which uses a different VPhysics interface (CS:GO's) to what is found in the Valve-provided public SDKs.
For full build instructions pertaining to SDK 2013, refernce [build.md](/build.md).
## Download
Development builds for each commit for SDK2013 SP/MP + ASW are available as artifacts on each commit on GitHub through GitHub Actions.</br>
@ -77,7 +79,7 @@ For each release, binary builds are provided for Garry's Mod and Source SDK 2013
### Lots of Balls Test
[![Lots of Balls Test](https://img.youtube.com/vi/tYfiTyRtmz8/0.jpg)](https://www.youtube.com/watch?v=tYfiTyRtmz8 "Lots of Balls Test")
### Wheels + Weld Car Dupe Test
### Wheels + Weld Car Dupe Test
[![Weld Car Dupe Test](https://img.youtube.com/vi/5_QbbXbIrg8/0.jpg)](https://www.youtube.com/watch?v=5_QbbXbIrg8 "Weld Car Dupe Test")
### Door + NPC (Physics Shadowed Objects) Test

108
build.md Normal file
View File

@ -0,0 +1,108 @@
# Building Volt
###### Note: This repository can be built with the default SDK but will not be outlined in this guide.
###### Note: x64 platform builds will also not be outlined in this guide.
All build instructions start the same. Clone a local copy of [mini-source-sdk](https://github.com/Joshua-Ashton/mini-source-sdk). (A minified version of [Source SDK](https://github.com/ValveSoftware/source-sdk-2013) with support for Linux and added support for [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) and the [Windows 11 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/))
```bash
git clone https://github.com/Joshua-Ashton/mini-source-sdk.git
```
Following your clone of the mini-source-sdk, navigate to the "version" you would like to build (`sdk2013-mp`, `sdk2013-sp`, `asw`). As an example, the multiplayer version will be used from now on.
```bash
cd mini-source-sdk/sdk2013-mp/src/
```
At this time you should now recursively git clone the VPhysics-Jolt repository into your "src" directory.
```bash
git clone --recursive https://github.com/Joshua-Ashton/VPhysics-Jolt.git vphysics_jolt
```
<strong>From this point onward, please follow the rest of the guide specific to your chosen build platform. The current working directory is also assumed to be `mini-source-sdk/sdk2013-mp/src/` and should be adjusted to suit your own build if need be.</strong>
## Windows
Continuing on Windows, be sure you have both [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) and the [Windows 11 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/) installed on your system. (even if you run Windows 10 the SDK still applies)
### CLI
The next step is to run the fix registry script (as administrator). You can just Right-Click -> 'Run As Administrator' the `fix_registry.bat` file located in `mini-source-sdk/sdk2013-mp/src/`. If your command prompt or powershell instance are already running under administrator you can run the script from there:
```bash
.\fix_registry.bat
```
This is the final command to run before the CLI portion of this guide ends. It will generate your [Visual Studio](https://visualstudio.microsoft.com/vs/) project/solution file(s). (You may also just Double-Click the file `createjoltprojects.bat`)
```bash
.\createjoltprojects.bat
```
### Visual Studio
After running `createjoltprojects.bat` you should now have a file named `jolt.sln`. Open it. After opening, building should be simple. Press the shortcut `Ctrl+Shift+B` *OR* find the `Solution 'jolt'` bar in the Solution explorer window and Right-Click -> `Build Solution`.
Congratulations!
The built `vphysics_jolt.dll` file should now be located in `mini-source-sdk/sdk2013-mp/game/bin/`.
### Build errors
Common build errors you may run into building on Windows and their solutions.
> #### memoverride.cpp
If there is an error involving a symbol named ` size_t _msize` or `size_t __cdecl _msize_base`, it is most likely because you haven't updated your Windows SDK to the [Windows 11 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/). Please do so. If you still get this error make sure that your Visual Studio projects also default to the latest installed version if they don't already.
## Linux
Continuing on Linux, there are a few prerequisites to building regardless of distribution.
- gcc 10+
- g++ 10+
- gcc-multilib
- g++-multilib
- make
### Debian/Ubuntu
###### Note: Certain versions may also require version explicit packages (gcc/g++ 10 may not be the default installed version).
Before we continue building project files, lets get our dependencies out of the way.
Install the `build-essential` group to get common developer packages such as gcc, g++, and make, which are included.
```bash
sudo apt install build-essential
```
After installing the build-essential group packages, we now need to install the x86 dependencies.
```bash
sudo apt install gcc-multilib g++-multilib
```
The next step is to build our makefiles by running the premade script `createjoltprojects.sh`
```bash
./createjoltprojects.sh
```
Once the script has finished running you should now have a file name `jolt.mak` in the current directory. Verify you do and now run it with the command below. This command automatically will (and is recommended to) use all available CPU threads. If you want to specify it yourself, replace `$(nproc)` with a number less than or equal to your max number of threads. To be clear, this only affects compile speed.
```bash
make -j $(nproc) -f jolt.mak
```
Alternative example...
```bash
make -j 8 -f jolt.mak
```
Congratulations!
If the console outputs `LINKING` *and* `COPYING TO` messages, that means your build was successful and you may retrieve your `vphysics_jolt.so` and `vphysics_jolt_srv.so` files which will be located in `mini-source-sdk/sdk2013-mp/game/bin/`.
### Build errors (distribution independent)
Common build errors you may run into building on Linux and their solutions.
> #### error: unrecognized command line option -std=gnu++20; did you mean -std=gnu++2a? (make: *** [jolt.mak:28: all] Error 2)
This error is caused because the compile was not started with gcc/g++ v10 or higher. Please update.
## OSX
Unsupported.
¯\\\_(ツ)\_/¯

View File

@ -38,6 +38,8 @@ $Configuration "Release"
}
}
$Macro JOLT_PHYSICS_ROOT "src/Jolt"
$Project "$PROJNAME"
{
$Folder "Precompiled Header"
@ -56,379 +58,414 @@ $Project "$PROJNAME"
$Folder "Source Files"
{
$File "src\Jolt\AABBTree\AABBTreeBuilder.cpp"
$File "src\Jolt\AABBTree\AABBTreeBuilder.h"
$File "src\Jolt\AABBTree\AABBTreeToBuffer.h"
$File "src\Jolt\AABBTree\NodeCodec\NodeCodecQuadTreeHalfFloat.h"
$File "src\Jolt\AABBTree\TriangleCodec\TriangleCodecIndexed8BitPackSOA4Flags.h"
$File "src\Jolt\Core\Atomics.h"
$File "src\Jolt\Core\ByteBuffer.h"
$File "src\Jolt\Core\Color.cpp"
$File "src\Jolt\Core\Color.h"
$File "src\Jolt\Core\Core.h"
$File "src\Jolt\Core\Factory.cpp"
$File "src\Jolt\Core\Factory.h"
$File "src\Jolt\Core\FixedSizeFreeList.h"
$File "src\Jolt\Core\FixedSizeFreeList.inl"
$File "src\Jolt\Core\FPControlWord.h"
$File "src\Jolt\Core\FPException.h"
$File "src\Jolt\Core\FPFlushDenormals.h"
$File "src\Jolt\Core\HashCombine.h"
$File "src\Jolt\Core\IssueReporting.cpp"
$File "src\Jolt\Core\IssueReporting.h"
$File "src\Jolt\Core\JobSystem.h"
$File "src\Jolt\Core\JobSystem.inl"
$File "src\Jolt\Core\JobSystemThreadPool.cpp"
$File "src\Jolt\Core\JobSystemThreadPool.h"
$File "src\Jolt\Core\LinearCurve.cpp"
$File "src\Jolt\Core\LinearCurve.h"
$File "src\Jolt\Core\LockFreeHashMap.h"
$File "src\Jolt\Core\LockFreeHashMap.inl"
$File "src\Jolt\Core\Memory.cpp"
$File "src\Jolt\Core\Memory.h"
$File "src\Jolt\Core\Mutex.h"
$File "src\Jolt\Core\MutexArray.h"
$File "src\Jolt\Core\NonCopyable.h"
$File "src\Jolt\Core\Profiler.cpp"
$File "src\Jolt\Core\Profiler.h"
$File "src\Jolt\Core\Profiler.inl"
$File "src\Jolt\Core\Reference.h"
$File "src\Jolt\Core\Result.h"
$File "src\Jolt\Core\RTTI.cpp"
$File "src\Jolt\Core\RTTI.h"
$File "src\Jolt\Core\StaticArray.h"
$File "src\Jolt\Core\StreamIn.h"
$File "src\Jolt\Core\StreamOut.h"
$File "src\Jolt\Core\StreamWrapper.h"
$File "src\Jolt\Core\StringTools.cpp"
$File "src\Jolt\Core\StringTools.h"
$File "src\Jolt\Core\TempAllocator.h"
$File "src\Jolt\Core\TickCounter.cpp"
$File "src\Jolt\Core\TickCounter.h"
$File "src\Jolt\Geometry\AABox.h"
$File "src\Jolt\Geometry\AABox4.h"
$File "src\Jolt\Geometry\ClipPoly.h"
$File "src\Jolt\Geometry\ClosestPoint.h"
$File "src\Jolt\Geometry\ConvexHullBuilder.cpp"
$File "src\Jolt\Geometry\ConvexHullBuilder.h"
$File "src\Jolt\Geometry\ConvexHullBuilder2D.cpp"
$File "src\Jolt\Geometry\ConvexHullBuilder2D.h"
$File "src\Jolt\Geometry\ConvexSupport.h"
$File "src\Jolt\Geometry\Ellipse.h"
$File "src\Jolt\Geometry\EPAConvexHullBuilder.h"
$File "src\Jolt\Geometry\EPAPenetrationDepth.h"
$File "src\Jolt\Geometry\GJKClosestPoint.h"
$File "src\Jolt\Geometry\IndexedTriangle.h"
$File "src\Jolt\Geometry\Indexify.cpp"
$File "src\Jolt\Geometry\Indexify.h"
$File "src\Jolt\Geometry\MortonCode.h"
$File "src\Jolt\Geometry\OrientedBox.cpp"
$File "src\Jolt\Geometry\OrientedBox.h"
$File "src\Jolt\Geometry\Plane.h"
$File "src\Jolt\Geometry\RayAABox.h"
$File "src\Jolt\Geometry\RayAABox8.h"
$File "src\Jolt\Geometry\RayCapsule.h"
$File "src\Jolt\Geometry\RayCylinder.h"
$File "src\Jolt\Geometry\RaySphere.h"
$File "src\Jolt\Geometry\RayTriangle.h"
$File "src\Jolt\Geometry\RayTriangle8.h"
$File "src\Jolt\Geometry\Sphere.h"
$File "src\Jolt\Geometry\Triangle.h"
$File "src\Jolt\Jolt.h"
$File "src\Jolt\Math\DVec3.h"
$File "src\Jolt\Math\DVec3.inl"
$File "src\Jolt\Math\EigenValueSymmetric.h"
$File "src\Jolt\Math\FindRoot.h"
$File "src\Jolt\Math\Float2.h"
$File "src\Jolt\Math\Float3.h"
$File "src\Jolt\Math\Float4.h"
$File "src\Jolt\Math\GaussianElimination.h"
$File "src\Jolt\Math\HalfFloat.h"
$File "src\Jolt\Math\Mat44.h"
$File "src\Jolt\Math\Mat44.inl"
$File "src\Jolt\Math\Math.h"
$File "src\Jolt\Math\MathTypes.h"
$File "src\Jolt\Math\Matrix.h"
$File "src\Jolt\Math\Quat.h"
$File "src\Jolt\Math\Quat.inl"
$File "src\Jolt\Math\Swizzle.h"
$File "src\Jolt\Math\UVec4.cpp"
$File "src\Jolt\Math\UVec4.h"
$File "src\Jolt\Math\UVec4.inl"
$File "src\Jolt\Math\UVec8.h"
$File "src\Jolt\Math\UVec8.inl"
$File "src\Jolt\Math\Vec3.cpp"
$File "src\Jolt\Math\Vec3.h"
$File "src\Jolt\Math\Vec3.inl"
$File "src\Jolt\Math\Vec4.h"
$File "src\Jolt\Math\Vec4.inl"
$File "src\Jolt\Math\Vec8.h"
$File "src\Jolt\Math\Vec8.inl"
$File "src\Jolt\Math\Vector.h"
$File "src\Jolt\ObjectStream\GetPrimitiveTypeOfType.h"
$File "src\Jolt\ObjectStream\ObjectStream.cpp"
$File "src\Jolt\ObjectStream\ObjectStream.h"
$File "src\Jolt\ObjectStream\ObjectStreamBinaryIn.cpp"
$File "src\Jolt\ObjectStream\ObjectStreamBinaryIn.h"
$File "src\Jolt\ObjectStream\ObjectStreamBinaryOut.cpp"
$File "src\Jolt\ObjectStream\ObjectStreamBinaryOut.h"
$File "src\Jolt\ObjectStream\ObjectStreamIn.cpp"
$File "src\Jolt\ObjectStream\ObjectStreamIn.h"
$File "src\Jolt\ObjectStream\ObjectStreamOut.cpp"
$File "src\Jolt\ObjectStream\ObjectStreamOut.h"
$File "src\Jolt\ObjectStream\ObjectStreamTextIn.cpp"
$File "src\Jolt\ObjectStream\ObjectStreamTextIn.h"
$File "src\Jolt\ObjectStream\ObjectStreamTextOut.cpp"
$File "src\Jolt\ObjectStream\ObjectStreamTextOut.h"
$File "src\Jolt\ObjectStream\ObjectStreamTypes.h"
$File "src\Jolt\ObjectStream\SerializableAttribute.h"
$File "src\Jolt\ObjectStream\SerializableAttributeEnum.h"
$File "src\Jolt\ObjectStream\SerializableAttributeTyped.h"
$File "src\Jolt\ObjectStream\SerializableObject.cpp"
$File "src\Jolt\ObjectStream\SerializableObject.h"
$File "src\Jolt\ObjectStream\TypeDeclarations.cpp"
$File "src\Jolt\ObjectStream\TypeDeclarations.h"
$File "src\Jolt\Physics\Body\Body.cpp"
$File "src\Jolt\Physics\Body\Body.h"
$File "src\Jolt\Physics\Body\Body.inl"
$File "src\Jolt\Physics\Body\BodyAccess.cpp"
$File "src\Jolt\Physics\Body\BodyAccess.h"
$File "src\Jolt\Physics\Body\BodyActivationListener.h"
$File "src\Jolt\Physics\Body\BodyCreationSettings.cpp"
$File "src\Jolt\Physics\Body\BodyCreationSettings.h"
$File "src\Jolt\Physics\Body\BodyFilter.h"
$File "src\Jolt\Physics\Body\BodyID.h"
$File "src\Jolt\Physics\Body\BodyInterface.cpp"
$File "src\Jolt\Physics\Body\BodyInterface.h"
$File "src\Jolt\Physics\Body\BodyLock.h"
$File "src\Jolt\Physics\Body\BodyLockInterface.h"
$File "src\Jolt\Physics\Body\BodyLockMulti.h"
$File "src\Jolt\Physics\Body\BodyManager.cpp"
$File "src\Jolt\Physics\Body\BodyManager.h"
$File "src\Jolt\Physics\Body\BodyPair.h"
$File "src\Jolt\Physics\Body\MassProperties.cpp"
$File "src\Jolt\Physics\Body\MassProperties.h"
$File "src\Jolt\Physics\Body\MotionProperties.cpp"
$File "src\Jolt\Physics\Body\MotionProperties.h"
$File "src\Jolt\Physics\Body\MotionProperties.inl"
$File "src\Jolt\Physics\Body\MotionQuality.h"
$File "src\Jolt\Physics\Body\MotionType.h"
$File "src\Jolt\Physics\Character\Character.cpp"
$File "src\Jolt\Physics\Character\Character.h"
$File "src\Jolt\Physics\Collision\AABoxCast.h"
$File "src\Jolt\Physics\Collision\ActiveEdgeMode.h"
$File "src\Jolt\Physics\Collision\ActiveEdges.h"
$File "src\Jolt\Physics\Collision\BackFaceMode.h"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhase.cpp"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhase.h"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhaseBruteForce.cpp"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhaseBruteForce.h"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhaseLayer.h"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhaseQuadTree.cpp"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhaseQuadTree.h"
$File "src\Jolt\Physics\Collision\BroadPhase\BroadPhaseQuery.h"
$File "src\Jolt\Physics\Collision\BroadPhase\QuadTree.cpp"
$File "src\Jolt\Physics\Collision\BroadPhase\QuadTree.h"
$File "src\Jolt\Physics\Collision\CastConvexVsTriangles.cpp"
$File "src\Jolt\Physics\Collision\CastConvexVsTriangles.h"
$File "src\Jolt\Physics\Collision\CastSphereVsTriangles.cpp"
$File "src\Jolt\Physics\Collision\CastSphereVsTriangles.h"
$File "src\Jolt\Physics\Collision\CastResult.h"
$File "src\Jolt\Physics\Collision\CollectFacesMode.h"
$File "src\Jolt\Physics\Collision\CollideConvexVsTriangles.cpp"
$File "src\Jolt\Physics\Collision\CollideConvexVsTriangles.h"
$File "src\Jolt\Physics\Collision\CollidePointResult.h"
$File "src\Jolt\Physics\Collision\CollideShape.h"
$File "src\Jolt\Physics\Collision\CollideSphereVsTriangles.cpp"
$File "src\Jolt\Physics\Collision\CollideSphereVsTriangles.h"
$File "src\Jolt\Physics\Collision\CollisionCollector.h"
$File "src\Jolt\Physics\Collision\CollisionCollectorImpl.h"
$File "src\Jolt\Physics\Collision\CollisionDispatch.cpp"
$File "src\Jolt\Physics\Collision\CollisionDispatch.h"
$File "src\Jolt\Physics\Collision\CollisionGroup.cpp"
$File "src\Jolt\Physics\Collision\CollisionGroup.h"
$File "src\Jolt\Physics\Collision\ContactListener.h"
$File "src\Jolt\Physics\Collision\GroupFilter.cpp"
$File "src\Jolt\Physics\Collision\GroupFilter.h"
$File "src\Jolt\Physics\Collision\GroupFilterTable.cpp"
$File "src\Jolt\Physics\Collision\GroupFilterTable.h"
$File "src\Jolt\Physics\Collision\ManifoldBetweenTwoFaces.cpp"
$File "src\Jolt\Physics\Collision\ManifoldBetweenTwoFaces.h"
$File "src\Jolt\Physics\Collision\NarrowPhaseQuery.cpp"
$File "src\Jolt\Physics\Collision\NarrowPhaseQuery.h"
$File "src\Jolt\Physics\Collision\NarrowPhaseStats.cpp"
$File "src\Jolt\Physics\Collision\NarrowPhaseStats.h"
$File "src\Jolt\Physics\Collision\ObjectLayer.h"
$File "src\Jolt\Physics\Collision\PhysicsMaterial.cpp"
$File "src\Jolt\Physics\Collision\PhysicsMaterial.h"
$File "src\Jolt\Physics\Collision\PhysicsMaterialSimple.cpp"
$File "src\Jolt\Physics\Collision\PhysicsMaterialSimple.h"
$File "src\Jolt\Physics\Collision\RayCast.h"
$File "src\Jolt\Physics\Collision\Shape\BoxShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\BoxShape.h"
$File "src\Jolt\Physics\Collision\Shape\CapsuleShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\CapsuleShape.h"
$File "src\Jolt\Physics\Collision\Shape\CompoundShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\CompoundShape.h"
$File "src\Jolt\Physics\Collision\Shape\CompoundShapeVisitors.h"
$File "src\Jolt\Physics\Collision\Shape\ConvexHullShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\ConvexHullShape.h"
$File "src\Jolt\Physics\Collision\Shape\ConvexShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\ConvexShape.h"
$File "src\Jolt\Physics\Collision\Shape\CylinderShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\CylinderShape.h"
$File "src\Jolt\Physics\Collision\Shape\DecoratedShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\DecoratedShape.h"
$File "src\Jolt\Physics\Collision\Shape\GetTrianglesContext.h"
$File "src\Jolt\Physics\Collision\Shape\HeightFieldShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\HeightFieldShape.h"
$File "src\Jolt\Physics\Collision\Shape\MeshShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\MeshShape.h"
$File "src\Jolt\Physics\Collision\Shape\MutableCompoundShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\MutableCompoundShape.h"
$File "src\Jolt\Physics\Collision\Shape\OffsetCenterOfMassShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\OffsetCenterOfMassShape.h"
$File "src\Jolt\Physics\Collision\Shape\PolyhedronSubmergedVolumeCalculator.h"
$File "src\Jolt\Physics\Collision\Shape\RotatedTranslatedShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\RotatedTranslatedShape.h"
$File "src\Jolt\Physics\Collision\Shape\ScaledShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\ScaledShape.h"
$File "src\Jolt\Physics\Collision\Shape\ScaleHelpers.h"
$File "src\Jolt\Physics\Collision\Shape\Shape.cpp"
$File "src\Jolt\Physics\Collision\Shape\Shape.h"
$File "src\Jolt\Physics\Collision\Shape\SphereShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\SphereShape.h"
$File "src\Jolt\Physics\Collision\Shape\StaticCompoundShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\StaticCompoundShape.h"
$File "src\Jolt\Physics\Collision\Shape\SubShapeID.h"
$File "src\Jolt\Physics\Collision\Shape\SubShapeIDPair.h"
$File "src\Jolt\Physics\Collision\Shape\TaperedCapsuleShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\TaperedCapsuleShape.gliffy"
$File "src\Jolt\Physics\Collision\Shape\TaperedCapsuleShape.h"
$File "src\Jolt\Physics\Collision\Shape\TriangleShape.cpp"
$File "src\Jolt\Physics\Collision\Shape\TriangleShape.h"
$File "src\Jolt\Physics\Collision\ShapeCast.h"
$File "src\Jolt\Physics\Collision\ShapeFilter.h"
$File "src\Jolt\Physics\Collision\SortReverseAndStore.h"
$File "src\Jolt\Physics\Collision\TransformedShape.cpp"
$File "src\Jolt\Physics\Collision\TransformedShape.h"
$File "src\Jolt\Physics\Constraints\ConeConstraint.cpp"
$File "src\Jolt\Physics\Constraints\ConeConstraint.h"
$File "src\Jolt\Physics\Constraints\Constraint.cpp"
$File "src\Jolt\Physics\Constraints\Constraint.h"
$File "src\Jolt\Physics\Constraints\ConstraintManager.cpp"
$File "src\Jolt\Physics\Constraints\ConstraintManager.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\AngleConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\AxisConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\DualAxisConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\GearConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\HingeRotationConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\PointConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\RackAndPinionConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\RotationEulerConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\RotationQuatConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\SpringPart.h"
$File "src\Jolt\Physics\Constraints\ConstraintPart\SwingTwistConstraintPart.h"
$File "src\Jolt\Physics\Constraints\ContactConstraintManager.cpp"
$File "src\Jolt\Physics\Constraints\ContactConstraintManager.h"
$File "src\Jolt\Physics\Constraints\DistanceConstraint.cpp"
$File "src\Jolt\Physics\Constraints\DistanceConstraint.h"
$File "src\Jolt\Physics\Constraints\FixedConstraint.cpp"
$File "src\Jolt\Physics\Constraints\FixedConstraint.h"
$File "src\Jolt\Physics\Constraints\GearConstraint.cpp"
$File "src\Jolt\Physics\Constraints\GearConstraint.h"
$File "src\Jolt\Physics\Constraints\HingeConstraint.cpp"
$File "src\Jolt\Physics\Constraints\HingeConstraint.h"
$File "src\Jolt\Physics\Constraints\MotorSettings.cpp"
$File "src\Jolt\Physics\Constraints\MotorSettings.h"
$File "src\Jolt\Physics\Constraints\PathConstraint.cpp"
$File "src\Jolt\Physics\Constraints\PathConstraint.h"
$File "src\Jolt\Physics\Constraints\PathConstraintPath.cpp"
$File "src\Jolt\Physics\Constraints\PathConstraintPath.h"
$File "src\Jolt\Physics\Constraints\PathConstraintPathHermite.cpp"
$File "src\Jolt\Physics\Constraints\PathConstraintPathHermite.h"
$File "src\Jolt\Physics\Constraints\PointConstraint.cpp"
$File "src\Jolt\Physics\Constraints\PointConstraint.h"
$File "src\Jolt\Physics\Constraints\RackAndPinionConstraint.cpp"
$File "src\Jolt\Physics\Constraints\RackAndPinionConstraint.h"
$File "src\Jolt\Physics\Constraints\SixDOFConstraint.cpp"
$File "src\Jolt\Physics\Constraints\SixDOFConstraint.h"
$File "src\Jolt\Physics\Constraints\SliderConstraint.cpp"
$File "src\Jolt\Physics\Constraints\SliderConstraint.h"
$File "src\Jolt\Physics\Constraints\SwingTwistConstraint.cpp"
$File "src\Jolt\Physics\Constraints\SwingTwistConstraint.h"
$File "src\Jolt\Physics\Constraints\TwoBodyConstraint.cpp"
$File "src\Jolt\Physics\Constraints\TwoBodyConstraint.h"
$File "src\Jolt\Physics\EActivation.h"
$File "src\Jolt\Physics\IslandBuilder.cpp"
$File "src\Jolt\Physics\IslandBuilder.h"
$File "src\Jolt\Physics\PhysicsLock.cpp"
$File "src\Jolt\Physics\PhysicsLock.h"
$File "src\Jolt\Physics\PhysicsScene.cpp"
$File "src\Jolt\Physics\PhysicsScene.h"
$File "src\Jolt\Physics\PhysicsSettings.h"
$File "src\Jolt\Physics\PhysicsStepListener.h"
$File "src\Jolt\Physics\PhysicsSystem.cpp"
$File "src\Jolt\Physics\PhysicsSystem.h"
$File "src\Jolt\Physics\PhysicsUpdateContext.cpp"
$File "src\Jolt\Physics\PhysicsUpdateContext.h"
$File "src\Jolt\Physics\Ragdoll\Ragdoll.cpp"
$File "src\Jolt\Physics\Ragdoll\Ragdoll.h"
$File "src\Jolt\Physics\StateRecorder.h"
$File "src\Jolt\Physics\StateRecorderImpl.cpp"
$File "src\Jolt\Physics\StateRecorderImpl.h"
$File "src\Jolt\Physics\Vehicle\TrackedVehicleController.cpp"
$File "src\Jolt\Physics\Vehicle\TrackedVehicleController.h"
$File "src\Jolt\Physics\Vehicle\VehicleAntiRollBar.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleAntiRollBar.h"
$File "src\Jolt\Physics\Vehicle\VehicleCollisionTester.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleCollisionTester.h"
$File "src\Jolt\Physics\Vehicle\VehicleConstraint.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleConstraint.h"
$File "src\Jolt\Physics\Vehicle\VehicleController.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleController.h"
$File "src\Jolt\Physics\Vehicle\VehicleDifferential.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleDifferential.h"
$File "src\Jolt\Physics\Vehicle\VehicleEngine.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleEngine.h"
$File "src\Jolt\Physics\Vehicle\VehicleTrack.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleTrack.h"
$File "src\Jolt\Physics\Vehicle\VehicleTransmission.cpp"
$File "src\Jolt\Physics\Vehicle\VehicleTransmission.h"
$File "src\Jolt\Physics\Vehicle\Wheel.cpp"
$File "src\Jolt\Physics\Vehicle\Wheel.h"
$File "src\Jolt\Physics\Vehicle\WheeledVehicleController.cpp"
$File "src\Jolt\Physics\Vehicle\WheeledVehicleController.h"
$File "src\Jolt\RegisterTypes.cpp"
$File "src\Jolt\RegisterTypes.h"
$File "src\Jolt\Renderer\DebugRenderer.cpp"
$File "src\Jolt\Renderer\DebugRenderer.h"
$File "src\Jolt\Renderer\DebugRendererPlayback.cpp"
$File "src\Jolt\Renderer\DebugRendererPlayback.h"
$File "src\Jolt\Renderer\DebugRendererRecorder.cpp"
$File "src\Jolt\Renderer\DebugRendererRecorder.h"
$File "src\Jolt\Skeleton\SkeletalAnimation.cpp"
$File "src\Jolt\Skeleton\SkeletalAnimation.h"
$File "src\Jolt\Skeleton\Skeleton.cpp"
$File "src\Jolt\Skeleton\Skeleton.h"
$File "src\Jolt\Skeleton\SkeletonPose.cpp"
$File "src\Jolt\Skeleton\SkeletonPose.h"
$File "src\Jolt\TriangleGrouper\TriangleGrouper.h"
$File "src\Jolt\TriangleGrouper\TriangleGrouperClosestCentroid.cpp"
$File "src\Jolt\TriangleGrouper\TriangleGrouperClosestCentroid.h"
$File "src\Jolt\TriangleGrouper\TriangleGrouperMorton.cpp"
$File "src\Jolt\TriangleGrouper\TriangleGrouperMorton.h"
$File "src\Jolt\TriangleSplitter\TriangleSplitter.cpp"
$File "src\Jolt\TriangleSplitter\TriangleSplitter.h"
$File "src\Jolt\TriangleSplitter\TriangleSplitterBinning.cpp"
$File "src\Jolt\TriangleSplitter\TriangleSplitterBinning.h"
$File "src\Jolt\TriangleSplitter\TriangleSplitterFixedLeafSize.cpp"
$File "src\Jolt\TriangleSplitter\TriangleSplitterFixedLeafSize.h"
$File "src\Jolt\TriangleSplitter\TriangleSplitterLongestAxis.cpp"
$File "src\Jolt\TriangleSplitter\TriangleSplitterLongestAxis.h"
$File "src\Jolt\TriangleSplitter\TriangleSplitterMean.cpp"
$File "src\Jolt\TriangleSplitter\TriangleSplitterMean.h"
$File "src\Jolt\TriangleSplitter\TriangleSplitterMorton.cpp"
$File "src\Jolt\TriangleSplitter\TriangleSplitterMorton.h"
$File "$JOLT_PHYSICS_ROOT/AABBTree/AABBTreeBuilder.cpp"
$File "$JOLT_PHYSICS_ROOT/AABBTree/AABBTreeBuilder.h"
$File "$JOLT_PHYSICS_ROOT/AABBTree/AABBTreeToBuffer.h"
$File "$JOLT_PHYSICS_ROOT/AABBTree/NodeCodec/NodeCodecQuadTreeHalfFloat.h"
$File "$JOLT_PHYSICS_ROOT/AABBTree/TriangleCodec/TriangleCodecIndexed8BitPackSOA4Flags.h"
$File "$JOLT_PHYSICS_ROOT/Core/ARMNeon.h"
$File "$JOLT_PHYSICS_ROOT/Core/Atomics.h"
$File "$JOLT_PHYSICS_ROOT/Core/ByteBuffer.h"
$File "$JOLT_PHYSICS_ROOT/Core/Color.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/Color.h"
$File "$JOLT_PHYSICS_ROOT/Core/Core.h"
$File "$JOLT_PHYSICS_ROOT/Core/Factory.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/Factory.h"
$File "$JOLT_PHYSICS_ROOT/Core/FixedSizeFreeList.h"
$File "$JOLT_PHYSICS_ROOT/Core/FixedSizeFreeList.inl"
$File "$JOLT_PHYSICS_ROOT/Core/FPControlWord.h"
$File "$JOLT_PHYSICS_ROOT/Core/FPException.h"
$File "$JOLT_PHYSICS_ROOT/Core/FPFlushDenormals.h"
$File "$JOLT_PHYSICS_ROOT/Core/HashCombine.h"
$File "$JOLT_PHYSICS_ROOT/Core/InsertionSort.h"
$File "$JOLT_PHYSICS_ROOT/Core/IssueReporting.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/IssueReporting.h"
$File "$JOLT_PHYSICS_ROOT/Core/JobSystem.h"
$File "$JOLT_PHYSICS_ROOT/Core/JobSystem.inl"
$File "$JOLT_PHYSICS_ROOT/Core/JobSystemThreadPool.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/JobSystemThreadPool.h"
$File "$JOLT_PHYSICS_ROOT/Core/JobSystemWithBarrier.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/JobSystemWithBarrier.h"
$File "$JOLT_PHYSICS_ROOT/Core/LinearCurve.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/LinearCurve.h"
$File "$JOLT_PHYSICS_ROOT/Core/LockFreeHashMap.h"
$File "$JOLT_PHYSICS_ROOT/Core/LockFreeHashMap.inl"
$File "$JOLT_PHYSICS_ROOT/Core/Memory.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/Memory.h"
$File "$JOLT_PHYSICS_ROOT/Core/Mutex.h"
$File "$JOLT_PHYSICS_ROOT/Core/MutexArray.h"
$File "$JOLT_PHYSICS_ROOT/Core/NonCopyable.h"
$File "$JOLT_PHYSICS_ROOT/Core/Profiler.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/Profiler.h"
$File "$JOLT_PHYSICS_ROOT/Core/Profiler.inl"
$File "$JOLT_PHYSICS_ROOT/Core/QuickSort.h"
$File "$JOLT_PHYSICS_ROOT/Core/Reference.h"
$File "$JOLT_PHYSICS_ROOT/Core/Result.h"
$File "$JOLT_PHYSICS_ROOT/Core/RTTI.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/RTTI.h"
$File "$JOLT_PHYSICS_ROOT/Core/Semaphore.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/Semaphore.h"
$File "$JOLT_PHYSICS_ROOT/Core/StaticArray.h"
$File "$JOLT_PHYSICS_ROOT/Core/StreamIn.h"
$File "$JOLT_PHYSICS_ROOT/Core/StreamOut.h"
$File "$JOLT_PHYSICS_ROOT/Core/StreamWrapper.h"
$File "$JOLT_PHYSICS_ROOT/Core/StringTools.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/StringTools.h"
$File "$JOLT_PHYSICS_ROOT/Core/STLAlignedAllocator.h"
$File "$JOLT_PHYSICS_ROOT/Core/STLAllocator.h"
$File "$JOLT_PHYSICS_ROOT/Core/STLTempAllocator.h"
$File "$JOLT_PHYSICS_ROOT/Core/TempAllocator.h"
$File "$JOLT_PHYSICS_ROOT/Core/TickCounter.cpp"
$File "$JOLT_PHYSICS_ROOT/Core/TickCounter.h"
$File "$JOLT_PHYSICS_ROOT/Core/UnorderedMap.h"
$File "$JOLT_PHYSICS_ROOT/Core/UnorderedSet.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/AABox.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/AABox4.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/ClipPoly.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/ClosestPoint.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/ConvexHullBuilder.cpp"
$File "$JOLT_PHYSICS_ROOT/Geometry/ConvexHullBuilder.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/ConvexHullBuilder2D.cpp"
$File "$JOLT_PHYSICS_ROOT/Geometry/ConvexHullBuilder2D.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/ConvexSupport.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/Ellipse.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/EPAConvexHullBuilder.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/EPAPenetrationDepth.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/GJKClosestPoint.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/IndexedTriangle.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/Indexify.cpp"
$File "$JOLT_PHYSICS_ROOT/Geometry/Indexify.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/MortonCode.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/OrientedBox.cpp"
$File "$JOLT_PHYSICS_ROOT/Geometry/OrientedBox.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/Plane.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/RayAABox.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/RayAABox8.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/RayCapsule.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/RayCylinder.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/RaySphere.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/RayTriangle.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/RayTriangle8.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/Sphere.h"
$File "$JOLT_PHYSICS_ROOT/Geometry/Triangle.h"
$File "$JOLT_PHYSICS_ROOT/Jolt.cmake"
$File "$JOLT_PHYSICS_ROOT/Jolt.h"
$File "$JOLT_PHYSICS_ROOT/Math/DMat44.h"
$File "$JOLT_PHYSICS_ROOT/Math/DMat44.inl"
$File "$JOLT_PHYSICS_ROOT/Math/Double3.h"
$File "$JOLT_PHYSICS_ROOT/Math/DVec3.h"
$File "$JOLT_PHYSICS_ROOT/Math/DVec3.inl"
$File "$JOLT_PHYSICS_ROOT/Math/DynMatrix.h"
$File "$JOLT_PHYSICS_ROOT/Math/EigenValueSymmetric.h"
$File "$JOLT_PHYSICS_ROOT/Math/FindRoot.h"
$File "$JOLT_PHYSICS_ROOT/Math/Float2.h"
$File "$JOLT_PHYSICS_ROOT/Math/Float3.h"
$File "$JOLT_PHYSICS_ROOT/Math/Float4.h"
$File "$JOLT_PHYSICS_ROOT/Math/GaussianElimination.h"
$File "$JOLT_PHYSICS_ROOT/Math/HalfFloat.h"
$File "$JOLT_PHYSICS_ROOT/Math/Mat44.h"
$File "$JOLT_PHYSICS_ROOT/Math/Mat44.inl"
$File "$JOLT_PHYSICS_ROOT/Math/Math.h"
$File "$JOLT_PHYSICS_ROOT/Math/MathTypes.h"
$File "$JOLT_PHYSICS_ROOT/Math/Matrix.h"
$File "$JOLT_PHYSICS_ROOT/Math/Quat.h"
$File "$JOLT_PHYSICS_ROOT/Math/Quat.inl"
$File "$JOLT_PHYSICS_ROOT/Math/Real.h"
$File "$JOLT_PHYSICS_ROOT/Math/Swizzle.h"
$File "$JOLT_PHYSICS_ROOT/Math/Trigonometry.h"
$File "$JOLT_PHYSICS_ROOT/Math/UVec4.h"
$File "$JOLT_PHYSICS_ROOT/Math/UVec4.inl"
$File "$JOLT_PHYSICS_ROOT/Math/UVec8.h"
$File "$JOLT_PHYSICS_ROOT/Math/UVec8.inl"
$File "$JOLT_PHYSICS_ROOT/Math/Vec3.cpp"
$File "$JOLT_PHYSICS_ROOT/Math/Vec3.h"
$File "$JOLT_PHYSICS_ROOT/Math/Vec3.inl"
$File "$JOLT_PHYSICS_ROOT/Math/Vec4.h"
$File "$JOLT_PHYSICS_ROOT/Math/Vec4.inl"
$File "$JOLT_PHYSICS_ROOT/Math/Vec8.h"
$File "$JOLT_PHYSICS_ROOT/Math/Vec8.inl"
$File "$JOLT_PHYSICS_ROOT/Math/Vector.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/GetPrimitiveTypeOfType.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStream.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStream.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamBinaryIn.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamBinaryIn.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamBinaryOut.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamBinaryOut.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamIn.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamIn.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamOut.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamOut.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamTextIn.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamTextIn.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamTextOut.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamTextOut.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/ObjectStreamTypes.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/SerializableAttribute.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/SerializableAttributeEnum.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/SerializableAttributeTyped.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/SerializableObject.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/SerializableObject.h"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/TypeDeclarations.cpp"
$File "$JOLT_PHYSICS_ROOT/ObjectStream/TypeDeclarations.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/Body.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/Body.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/Body.inl"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyAccess.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyAccess.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyActivationListener.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyCreationSettings.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyCreationSettings.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyFilter.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyID.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyInterface.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyInterface.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyLock.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyLockInterface.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyLockMulti.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyManager.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyManager.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/BodyPair.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/MassProperties.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/MassProperties.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/MotionProperties.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/MotionProperties.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/MotionProperties.inl"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/MotionQuality.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Body/MotionType.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Character/Character.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Character/Character.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Character/CharacterBase.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Character/CharacterBase.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Character/CharacterVirtual.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Character/CharacterVirtual.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/AABoxCast.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ActiveEdgeMode.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ActiveEdges.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BackFaceMode.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhase.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhase.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhaseBruteForce.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhaseLayer.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhaseQuadTree.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/BroadPhaseQuery.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/QuadTree.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/BroadPhase/QuadTree.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CastConvexVsTriangles.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CastConvexVsTriangles.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CastSphereVsTriangles.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CastSphereVsTriangles.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CastResult.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollectFacesMode.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollideConvexVsTriangles.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollideConvexVsTriangles.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollidePointResult.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollideShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollideSphereVsTriangles.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollideSphereVsTriangles.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollisionCollector.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollisionCollectorImpl.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollisionDispatch.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollisionDispatch.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollisionGroup.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/CollisionGroup.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ContactListener.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/EstimateCollisionResponse.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/EstimateCollisionResponse.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/GroupFilter.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/GroupFilter.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/GroupFilterTable.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/GroupFilterTable.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ManifoldBetweenTwoFaces.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ManifoldBetweenTwoFaces.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/NarrowPhaseQuery.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/NarrowPhaseQuery.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/NarrowPhaseStats.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/NarrowPhaseStats.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ObjectLayer.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/PhysicsMaterial.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/PhysicsMaterial.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/PhysicsMaterialSimple.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/PhysicsMaterialSimple.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/RayCast.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/BoxShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/BoxShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/CapsuleShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/CapsuleShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/CompoundShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/CompoundShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/CompoundShapeVisitors.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/ConvexHullShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/ConvexHullShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/ConvexShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/ConvexShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/CylinderShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/CylinderShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/DecoratedShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/DecoratedShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/GetTrianglesContext.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/HeightFieldShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/HeightFieldShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/MeshShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/MeshShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/MutableCompoundShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/MutableCompoundShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/OffsetCenterOfMassShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/PolyhedronSubmergedVolumeCalculator.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/RotatedTranslatedShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/RotatedTranslatedShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/ScaledShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/ScaledShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/ScaleHelpers.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/Shape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/Shape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/SphereShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/SphereShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/StaticCompoundShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/StaticCompoundShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/SubShapeID.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/SubShapeIDPair.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/TaperedCapsuleShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/TaperedCapsuleShape.gliffy"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/TaperedCapsuleShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/TriangleShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/Shape/TriangleShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ShapeCast.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/ShapeFilter.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/SortReverseAndStore.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/TransformedShape.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Collision/TransformedShape.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConeConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConeConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/Constraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/Constraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintManager.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintManager.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/AngleConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/AxisConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/DualAxisConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/GearConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/HingeRotationConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/IndependentAxisConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/PointConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/RackAndPinionConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/RotationEulerConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/RotationQuatConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/SpringPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ContactConstraintManager.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/ContactConstraintManager.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/DistanceConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/DistanceConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/FixedConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/FixedConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/GearConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/GearConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/HingeConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/HingeConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/MotorSettings.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/MotorSettings.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PathConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PathConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PathConstraintPath.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PathConstraintPath.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PathConstraintPathHermite.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PathConstraintPathHermite.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PointConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PointConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PulleyConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/PulleyConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/RackAndPinionConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/RackAndPinionConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SixDOFConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SixDOFConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SliderConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SliderConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SpringSettings.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SpringSettings.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SwingTwistConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/SwingTwistConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/TwoBodyConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Constraints/TwoBodyConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/DeterminismLog.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/DeterminismLog.h"
$File "$JOLT_PHYSICS_ROOT/Physics/EActivation.h"
$File "$JOLT_PHYSICS_ROOT/Physics/IslandBuilder.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/IslandBuilder.h"
$File "$JOLT_PHYSICS_ROOT/Physics/LargeIslandSplitter.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/LargeIslandSplitter.h"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsLock.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsLock.h"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsScene.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsScene.h"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsSettings.h"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsStepListener.h"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsSystem.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsSystem.h"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsUpdateContext.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/PhysicsUpdateContext.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Ragdoll/Ragdoll.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Ragdoll/Ragdoll.h"
$File "$JOLT_PHYSICS_ROOT/Physics/StateRecorder.h"
$File "$JOLT_PHYSICS_ROOT/Physics/StateRecorderImpl.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/StateRecorderImpl.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/TrackedVehicleController.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/TrackedVehicleController.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleAntiRollBar.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleAntiRollBar.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleCollisionTester.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleCollisionTester.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleConstraint.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleConstraint.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleController.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleController.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleDifferential.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleDifferential.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleEngine.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleEngine.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleTrack.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleTrack.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleTransmission.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/VehicleTransmission.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/Wheel.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/Wheel.h"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/WheeledVehicleController.cpp"
$File "$JOLT_PHYSICS_ROOT/Physics/Vehicle/WheeledVehicleController.h"
$File "$JOLT_PHYSICS_ROOT/RegisterTypes.cpp"
$File "$JOLT_PHYSICS_ROOT/RegisterTypes.h"
$File "$JOLT_PHYSICS_ROOT/Renderer/DebugRenderer.cpp"
$File "$JOLT_PHYSICS_ROOT/Renderer/DebugRenderer.h"
$File "$JOLT_PHYSICS_ROOT/Renderer/DebugRendererPlayback.cpp"
$File "$JOLT_PHYSICS_ROOT/Renderer/DebugRendererPlayback.h"
$File "$JOLT_PHYSICS_ROOT/Renderer/DebugRendererRecorder.cpp"
$File "$JOLT_PHYSICS_ROOT/Renderer/DebugRendererRecorder.h"
$File "$JOLT_PHYSICS_ROOT/Skeleton/SkeletalAnimation.cpp"
$File "$JOLT_PHYSICS_ROOT/Skeleton/SkeletalAnimation.h"
$File "$JOLT_PHYSICS_ROOT/Skeleton/Skeleton.cpp"
$File "$JOLT_PHYSICS_ROOT/Skeleton/Skeleton.h"
$File "$JOLT_PHYSICS_ROOT/Skeleton/SkeletonMapper.cpp"
$File "$JOLT_PHYSICS_ROOT/Skeleton/SkeletonMapper.h"
$File "$JOLT_PHYSICS_ROOT/Skeleton/SkeletonPose.cpp"
$File "$JOLT_PHYSICS_ROOT/Skeleton/SkeletonPose.h"
$File "$JOLT_PHYSICS_ROOT/TriangleGrouper/TriangleGrouper.h"
$File "$JOLT_PHYSICS_ROOT/TriangleGrouper/TriangleGrouperClosestCentroid.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleGrouper/TriangleGrouperClosestCentroid.h"
$File "$JOLT_PHYSICS_ROOT/TriangleGrouper/TriangleGrouperMorton.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleGrouper/TriangleGrouperMorton.h"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitter.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitter.h"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterBinning.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterBinning.h"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterFixedLeafSize.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterFixedLeafSize.h"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterLongestAxis.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterLongestAxis.h"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterMean.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterMean.h"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterMorton.cpp"
$File "$JOLT_PHYSICS_ROOT/TriangleSplitter/TriangleSplitterMorton.h"
}
}

@ -1 +1 @@
Subproject commit 22d675437edc441329ed244f632807a8789fa5a6
Subproject commit 9ece1b49279210061bf7097c3bebb9fac23d93de

View File

@ -10,6 +10,15 @@
#define override_not_csgo override
#endif
// GMod SDK2013 x86 branch
#if defined( GAME_GMOD )
#define override_gmod override
#define override_not_gmod
#else
#define override_gmod
#define override_not_gmod override
#endif
#if defined( GAME_CSGO ) || defined( GAME_DESOLATION ) || defined( GAME_PORTAL2 )
#define GAME_PORTAL2_OR_NEWER
#define override_portal2 override

View File

@ -252,17 +252,16 @@ Vector JoltPhysicsCollision::CollideGetExtent( const CPhysCollide *pCollide, con
JPH::Vec3 vecMaxExtent = JPH::Vec3::sZero();
ActOnSubShapes< JPH::ConvexShape >( pShape, [&]( const JPH::ConvexShape* pConvexShape, JPH::Mat44Arg matSubShapeTransform )
{
JPH::Mat44 matTransform = matCollideTransform * matSubShapeTransform;
JPH::ConvexShape::SupportingFace supportingFace;
pConvexShape->GetSupportingFace( vecDirection, JPH::Vec3::sReplicate( 1.0f ), supportingFace );
pConvexShape->GetSupportingFace( JPH::SubShapeID(), vecDirection, JPH::Vec3::sReplicate( 1.0f ), matTransform, supportingFace );
for ( const JPH::Vec3 &vecVertex : supportingFace )
{
JPH::Vec3 vecTransformedVertex = matCollideTransform * matSubShapeTransform * vecVertex;
const float flDot = vecTransformedVertex.Dot( vecDirection );
const float flDot = vecVertex.Dot( vecDirection );
if ( flDot > flMaxDot )
{
vecMaxExtent = vecTransformedVertex;
vecMaxExtent = vecVertex;
flMaxDot = flDot;
}
}
@ -536,7 +535,20 @@ namespace ivp_compat
settings.mHullTolerance = 0.0f;
JPH::ConvexShape *pConvexShape = ShapeSettingsToShape< JPH::ConvexShape >( settings );
if ( !pConvexShape )
return nullptr;
{
// Wow that sucks, just mock up a small sphere to subsitute.
// This can happen for models with extremely broken collision hulls.
// If we don't do this, we'll crash later on because older versions of Source are missing
// an important nullptr check.
// A better solution would be to generate a valid convex hull from the points provided.
JPH::SphereShapeSettings sphereSettings( 1.0f );
pConvexShape = ShapeSettingsToShape< JPH::ConvexShape >( sphereSettings );
if ( !pConvexShape )
{
// This should never fail, but catching anyway
return nullptr;
}
}
pConvexShape->SetUserData( pLedge->client_data );
return pConvexShape;
@ -700,7 +712,7 @@ void JoltPhysicsCollision::VCollideUnload( vcollide_t *pVCollide )
{
VCollideFreeUserData( pVCollide );
for ( int i = 0; i < pVCollide->solidCount; i++ )
delete pVCollide->solids[ i ];
delete pVCollide->solids[ i ]->ToShape();
delete[] pVCollide->solids;
delete[] pVCollide->pKeyValues;
@ -747,7 +759,7 @@ int JoltPhysicsCollision::CreateDebugMesh( CPhysCollide const *pCollisionModel,
for ( auto &shape : collector.mHits )
{
JPH::Shape::GetTrianglesContext ctx;
shape.GetTrianglesStart( ctx, JPH::AABox::sBiggest() );
shape.GetTrianglesStart( ctx, JPH::AABox::sBiggest(), JPH::Vec3::sZero() );
for ( ;; )
{
int nSubShapeTriCount = shape.GetTrianglesNext( ctx, nRequestCount, reinterpret_cast<JPH::Float3*>( &pVerts[ nAccumTris * 3 ] ), nullptr /* materials */);

View File

@ -12,6 +12,8 @@
// Does not and will not contain *any* data.
class CPhysCollide
{
~CPhysCollide() = delete;
public:
JPH::Shape* ToShape()
{
@ -42,6 +44,8 @@ public:
// Does not and will not contain *any* data.
class CPhysConvex
{
~CPhysConvex() = delete;
public:
JPH::ConvexShape* ToConvexShape()
{

View File

@ -176,17 +176,17 @@ public:
ContentsFilter_Shape( const JPH::Shape *pShape, uint32 contentsMask, IConvexInfo *pConvexInfo )
: m_pShape( pShape ), m_ContentsMask( contentsMask ), m_pConvexInfo( pConvexInfo ) {}
bool ShouldCollide( const JPH::SubShapeID& inSubShapeID2 ) const override
bool ShouldCollide( const JPH::Shape *inShape2, const JPH::SubShapeID& inSubShapeID2 ) const override
{
const uint32 gameData = static_cast<uint32>( m_pShape->GetSubShapeUserData( inSubShapeID2 ) );
const uint32 gameData = static_cast<uint32>( inShape2->GetSubShapeUserData( inSubShapeID2 ) );
const uint32 contents = m_pConvexInfo ? m_pConvexInfo->GetContents( gameData ) : CONTENTS_SOLID;
return !!( contents & m_ContentsMask );
}
bool ShouldCollide( const JPH::SubShapeID &inSubShapeID1, const JPH::SubShapeID &inSubShapeID2 ) const override
bool ShouldCollide( const JPH::Shape *inShape1, const JPH::SubShapeID &inSubShapeIDOfShape1, const JPH::Shape *inShape2, const JPH::SubShapeID &inSubShapeIDOfShape2 ) const override
{
return ShouldCollide( inSubShapeID2 );
return ShouldCollide( inShape2, inSubShapeIDOfShape2 );
}
public:

View File

@ -478,7 +478,7 @@ void JoltPhysicsConstraint::InitialiseSliding( IPhysicsConstraintGroup *pGroup,
JPH::Body *attBody = m_pObjAttached->GetBody();
JPH::SliderConstraintSettings settings;
settings.SetPoint( *refBody, *attBody );
settings.mAutoDetectPoint = true;
settings.SetSliderAxis( JPH::Vec3( sliding.slideAxisRef.x, sliding.slideAxisRef.y, sliding.slideAxisRef.z ) );
if ( sliding.limitMin != sliding.limitMax )
@ -540,7 +540,7 @@ void JoltPhysicsConstraint::InitialiseFixed( IPhysicsConstraintGroup *pGroup, co
JPH::Body *attBody = m_pObjAttached->GetBody();
JPH::FixedConstraintSettings settings;
settings.SetPoint( *refBody, *attBody );
settings.mAutoDetectPoint = true;
m_pConstraint = settings.Create( *refBody, *attBody );

View File

@ -108,6 +108,11 @@ void JoltPhysicsFluidController::OnJoltPhysicsObjectDestroyed( JoltPhysicsObject
//-------------------------------------------------------------------------------------------------
static JPH::Vec3 ProjectPoint( const JPH::Plane &plane, JPH::Vec3Arg point )
{
return point - plane.SignedDistance(point) * plane.GetNormal();
}
// Applies buoyancy to any body that intersects with the water shape
class SourceFluidCollector : public JPH::CollideShapeCollector
{
@ -134,10 +139,6 @@ public:
m_ObjectsInShape.push_back( pObject );
// The original VPhysics ignores m_Params.torqueFactor and always has 0.01.
// But I think 0.05 looks better.
static constexpr float flTorqueFactor = 0.05f;
// Josh:
// The buoyancy ratio in Source works like this:
// fluid_density = m_flDensity * pObject->GetBuoyancyRatio()
@ -148,7 +149,12 @@ public:
const float flFluidDensity = m_flDensity * pObject->GetBuoyancyRatio();
float inBuoyancy = flFluidDensity * pObject->GetBody()->GetShape()->GetVolume() * pObject->GetInvMass();
if ( body.IsActive() )
body.ApplyBuoyancyImpulse( m_Surface, inBuoyancy, 0.3f /* m_Params.damping */, flTorqueFactor, SourceToJolt::Distance( m_Params.currentVelocity ), m_pPhysicsSystem->GetGravity(), m_DeltaTime);
{
// Project (0, 0, 0) onto plane to get a point on it.
JPH::Vec3 point = ProjectPoint( m_Surface, JPH::Vec3::sZero() );
JPH::Vec3 normal = m_Surface.GetNormal();
body.ApplyBuoyancyImpulse( point, normal, inBuoyancy, m_Params.damping, 0.1f, SourceToJolt::Distance( m_Params.currentVelocity ), m_pPhysicsSystem->GetGravity(), m_DeltaTime );
}
}
private:
@ -193,7 +199,7 @@ void JoltPhysicsFluidController::OnPreSimulate( float deltaTime )
const JPH::Shape *pShape = m_pFluidObject->GetCollide()->ToShape();
m_pPhysicsSystem->GetNarrowPhaseQueryNoLock().CollideShape(
pShape, JPH::Vec3::sReplicate( 1.0f ), queryTransform, collideSettings, collector,
pShape, JPH::Vec3::sReplicate( 1.0f ), queryTransform, collideSettings, JPH::Vec3::sZero(), collector,
JPH::SpecifiedBroadPhaseLayerFilter( BroadPhaseLayers::MOVING ), JPH::SpecifiedObjectLayerFilter( Layers::MOVING ), body_filter );
for ( JoltPhysicsObject *pObject : m_ObjectsInShape )

View File

@ -182,7 +182,7 @@ static void CheckCollision( JoltPhysicsObject *pObject, JPH::CollideShapeCollect
settings.mBackFaceMode = JPH::EBackFaceMode::IgnoreBackFaces;
settings.mMaxSeparationDistance = vjolt_player_collision_tolerance.GetFloat();
pSystem->GetNarrowPhaseQueryNoLock().CollideShape( pObject->GetBody()->GetShape(), JPH::Vec3::sReplicate( 1.0f ), query_transform, settings, ioCollector, broadphase_layer_filter, object_layer_filter, ioFilter );
pSystem->GetNarrowPhaseQueryNoLock().CollideShape( pObject->GetBody()->GetShape(), JPH::Vec3::sReplicate( 1.0f ), query_transform, settings, JPH::Vec3::sZero(), ioCollector, broadphase_layer_filter, object_layer_filter, ioFilter );
}
// Slart: This is a version of CheckCollision that projects the player by their velocity, to attempt to push objects that we'll walk into soon
@ -257,6 +257,48 @@ private:
JoltPhysicsObject *m_pSelfObject;
};
class NormalWeightedCollector : public JPH::CollideShapeCollector
{
public:
NormalWeightedCollector( JPH::PhysicsSystem *pPhysicsSystem )
: m_pPhysicsSystem( pPhysicsSystem )
{
}
void Reset() override
{
JPH::CollideShapeCollector::Reset();
m_bHadHit = false;
m_flLowestNormalZ = 1.0f;
}
void AddHit( const JPH::CollideShapeResult &inResult ) override
{
JPH::BodyLockRead lock( m_pPhysicsSystem->GetBodyLockInterfaceNoLock(), inResult.mBodyID2 );
const JPH::Body &body = lock.GetBody();
JPH::Vec3 normal = body.GetWorldSpaceSurfaceNormal( inResult.mSubShapeID2, inResult.mContactPointOn2 );
m_flLowestNormalZ = Min( m_flLowestNormalZ, -normal.GetZ() );
m_Hit = inResult;
m_bHadHit = true;
}
inline bool HadHit() const
{
return m_bHadHit;
}
float m_flLowestNormalZ = 1.0f;
JPH::CollideShapeCollector::ResultType m_Hit;
private:
JPH::PhysicsSystem *m_pPhysicsSystem;
bool m_bHadHit = false;
};
uint32 JoltPhysicsPlayerController::GetContactState( uint16 nGameFlags )
{
// This does not seem to affect much, we should aspire to have our physics be as 1:1 to brush collisions as possible anyway
@ -275,6 +317,13 @@ uint32 JoltPhysicsPlayerController::GetContactState( uint16 nGameFlags )
{
}
void Reset() override
{
JPH::CollideShapeCollector::Reset();
m_nFlagsOut = 0;
}
void AddHit( const JPH::CollideShapeResult &inResult ) override
{
JPH::BodyLockRead lock( m_pPhysicsSystem->GetBodyLockInterfaceNoLock(), inResult.mBodyID2 );
@ -351,13 +400,14 @@ void JoltPhysicsPlayerController::OnPreSimulate( float flDeltaTime )
JPH::BodyInterface &bodyInterface = pPhysicsSystem->GetBodyInterfaceNoLock();
// Project ourselves towards our velocity
JPH::AnyHitCollisionCollector<JPH::CollideShapeCollector> collector;
NormalWeightedCollector collector( pPhysicsSystem );
SourceHitFilter<true> filter( pPhysicsSystem, m_pObject );
CheckCollision( m_pObject, collector, filter );
if ( collector.HadHit() )
// Source typically uses -0.7 for ground.
if ( collector.HadHit() && collector.m_flLowestNormalZ < -0.7f )
{
JPH::BodyID otherID = collector.mHit.mBodyID2;
JPH::BodyID otherID = collector.m_Hit.mBodyID2;
//bodyInterface.AddImpulse( otherID, m_pObject->GetMass() * m_targetVelocity * flDeltaTime, m_pObject->GetBody()->GetPosition() );
bodyInterface.AddImpulse( otherID, m_pObject->GetMass() * pPhysicsSystem->GetGravity() * flDeltaTime, m_pObject->GetBody()->GetPosition());

View File

@ -408,7 +408,10 @@ void JoltPhysicsVehicleController::CreateWheel( JPH::VehicleConstraintSettings &
JPH::WheelSettingsWV *wheelSettings = new JPH::WheelSettingsWV;
wheelSettings->mPosition = SourceToJolt::Distance( wheelPositionLocal );
wheelSettings->mDirection = JPH::Vec3( 0, 0, -1 );
wheelSettings->mSuspensionDirection = JPH::Vec3( 0, 0, -1 );
wheelSettings->mSteeringAxis = JPH::Vec3( 0, 0, 1 );
wheelSettings->mWheelUp = JPH::Vec3( 0, 0, 1 );
wheelSettings->mWheelForward = JPH::Vec3( 0, 1, 0 );
wheelSettings->mAngularDamping = axle.wheels.rotdamping;
// TODO(Josh): What about more than 4 wheels?
wheelSettings->mMaxSteerAngle = axleIdx == 0 ? steeringAngle : 0.0f;
@ -417,17 +420,11 @@ void JoltPhysicsVehicleController::CreateWheel( JPH::VehicleConstraintSettings &
wheelSettings->mInertia = 0.5f * axle.wheels.mass * ( wheelSettings->mRadius * wheelSettings->mRadius );
wheelSettings->mSuspensionMinLength = 0;
wheelSettings->mSuspensionMaxLength = additionalLength;
wheelSettings->mSuspensionDamping = axle.suspension.springDamping;
// Josh:
// so to go from K (Spring Constant) -> freq we do
// sqrtf( K / Mass ) / ( 2.0f * PI )
// but it seems like it already has mass divided in Source so...
// sqrtf( K ) / ( 2.0f * PI )
wheelSettings->mSuspensionFrequency = sqrtf( axle.suspension.springConstant ) / ( 2.0f * M_PI_F );
// Josh: I don't know why but it looks and feels really wrong without this:
// TODO(Josh): Investigate more later, doesn't make much sense.
// May be related to mass of wheel or something.
wheelSettings->mSuspensionFrequency *= M_PI_F;
wheelSettings->mSuspensionSpring.mMode = JPH::ESpringMode::StiffnessAndDamping;
// Source has these divided by the mass of the vehicle for some reason.
// Convert these to a stiffness of k, in N/m...
wheelSettings->mSuspensionSpring.mStiffness = axle.suspension.springConstant * m_pCarBodyObject->GetMass();
wheelSettings->mSuspensionSpring.mDamping = axle.suspension.springDamping * m_pCarBodyObject->GetMass();
if ( axle.wheels.frictionScale )
{
wheelSettings->mLateralFriction.AddPoint( 1.0f, axle.wheels.frictionScale );

View File

@ -45,7 +45,7 @@ JoltPhysicsDebugRenderer::~JoltPhysicsDebugRenderer()
{
}
void JoltPhysicsDebugRenderer::DrawLine( const JPH::Float3& inFrom, const JPH::Float3& inTo, JPH::ColorArg inColor )
void JoltPhysicsDebugRenderer::DrawLine( JPH::Vec3Arg inFrom, JPH::Vec3Arg inTo, JPH::ColorArg inColor )
{
Vector v1 = JoltToSource::Distance( inFrom );
Vector v2 = JoltToSource::Distance( inTo );

View File

@ -15,7 +15,7 @@ public:
// JPH::DebugRenderer + Draw Implementation
///////////////////////////////////////////
void DrawLine( const JPH::Float3 &inFrom, const JPH::Float3 &inTo, JPH::ColorArg inColor ) override;
void DrawLine( JPH::Vec3Arg inFrom, JPH::Vec3Arg inTo, JPH::ColorArg inColor ) override;
void DrawTriangle( JPH::Vec3Arg inV1, JPH::Vec3Arg inV2, JPH::Vec3Arg inV3, JPH::ColorArg inColor ) override;

View File

@ -53,46 +53,51 @@ static ConVar vjolt_linearcast( "vjolt_linearcast", "1", FCVAR_NONE, "Whether bo
static ConVar vjolt_initial_simulation( "vjolt_initial_simulation", "0", FCVAR_NONE, "Whether to pre-settle physics objects on map load." );
static ConVar vjolt_substeps_collision( "vjolt_substeps_collision", "1", FCVAR_NONE, "Number of collision steps to perform.", true, 0.0f, true, 4.0f );
static ConVar vjolt_substeps_integration( "vjolt_substeps_integration", "1", FCVAR_NONE, "Number of integration substeps to perform.", true, 0.0f, true, 4.0f );
static ConVar vjolt_baumgarte_factor( "vjolt_baumgarte_factor", "0.2", FCVAR_NONE, "Baumgarte stabilization factor (how much of the position error to 'fix' in 1 update). Changing this may help with constraint stability. Requires a map restart to change.", true, 0.0f, true, 1.0f );
//-------------------------------------------------------------------------------------------------
// Function that determines if two object layers can collide
static bool JoltObjectCanCollide( JPH::ObjectLayer inObject1, JPH::ObjectLayer inObject2 )
class JoltObjectLayerPairFilter final : public JPH::ObjectLayerPairFilter
{
switch ( inObject1 )
public:
// Function that determines if two object layers can collide
bool ShouldCollide( JPH::ObjectLayer inObject1, JPH::ObjectLayer inObject2 ) const override
{
// NO_COLLIDE collides with nothing.
case Layers::NO_COLLIDE:
return false;
// NON_MOVING collides with moving objects and debris.
case Layers::NON_MOVING_WORLD:
case Layers::NON_MOVING_OBJECT:
return inObject2 == Layers::MOVING ||
inObject2 == Layers::DEBRIS;
// MOVING collides with moving and non-moving objects.
case Layers::MOVING:
return inObject2 == Layers::MOVING ||
inObject2 == Layers::NON_MOVING_WORLD ||
inObject2 == Layers::NON_MOVING_OBJECT;
switch ( inObject1 )
{
// NO_COLLIDE collides with nothing.
case Layers::NO_COLLIDE:
return false;
// NON_MOVING collides with moving objects and debris.
case Layers::NON_MOVING_WORLD:
case Layers::NON_MOVING_OBJECT:
return inObject2 == Layers::MOVING ||
inObject2 == Layers::DEBRIS;
// MOVING collides with moving and non-moving objects.
case Layers::MOVING:
return inObject2 == Layers::MOVING ||
inObject2 == Layers::NON_MOVING_WORLD ||
inObject2 == Layers::NON_MOVING_OBJECT;
// DEBRIS only collides with non-moving objects.
case Layers::DEBRIS:
return inObject2 == Layers::NON_MOVING_WORLD || inObject2 == Layers::NON_MOVING_OBJECT;
default:
VJoltAssert( false );
return false;
// DEBRIS only collides with non-moving objects.
case Layers::DEBRIS:
return inObject2 == Layers::NON_MOVING_WORLD || inObject2 == Layers::NON_MOVING_OBJECT;
default:
VJoltAssert( false );
return false;
}
};
private:
};
// BroadPhaseLayerInterface implementation
// This defines a mapping between object and broadphase layers.
class JoltBPLayerInterfaceImpl final : public JPH::BroadPhaseLayerInterface
class JoltBroadPhaseLayerInterface final : public JPH::BroadPhaseLayerInterface
{
public:
JoltBPLayerInterfaceImpl()
JoltBroadPhaseLayerInterface()
{
// Create a mapping table from object to broad phase layer
mObjectToBroadPhase[Layers::NON_MOVING_WORLD] = BroadPhaseLayers::NON_MOVING_WORLD;
@ -118,9 +123,12 @@ public:
{
switch ( (JPH::BroadPhaseLayer::Type)inLayer )
{
case (JPH::BroadPhaseLayer::Type)BroadPhaseLayers::NON_MOVING: return "NON_MOVING";
case (JPH::BroadPhaseLayer::Type)BroadPhaseLayers::MOVING: return "MOVING";
default: VJoltAssert( false ); return "INVALID";
case (JPH::BroadPhaseLayer::Type)BroadPhaseLayers::NON_MOVING_WORLD: return "NON_MOVING_WORLD";
case (JPH::BroadPhaseLayer::Type)BroadPhaseLayers::NON_MOVING_OBJECT: return "NON_MOVING_OBJECT";
case (JPH::BroadPhaseLayer::Type)BroadPhaseLayers::NO_COLLIDE: return "NO_COLLIDE";
case (JPH::BroadPhaseLayer::Type)BroadPhaseLayers::DEBRIS: return "DEBRIS";
case (JPH::BroadPhaseLayer::Type)BroadPhaseLayers::MOVING: return "MOVING";
default: VJoltAssert( false ); return "INVALID";
}
}
#endif
@ -129,33 +137,41 @@ private:
JPH::BroadPhaseLayer mObjectToBroadPhase[Layers::NUM_LAYERS];
};
// Function that determines if two broadphase layers can collide
static bool JoltBroadPhaseCanCollide( JPH::ObjectLayer inLayer1, JPH::BroadPhaseLayer inLayer2 )
class JoltObjectVsBroadPhaseLayerFilter final : public JPH::ObjectVsBroadPhaseLayerFilter
{
switch (inLayer1)
public:
// Function that determines if two broadphase layers can collide
bool ShouldCollide( JPH::ObjectLayer inLayer1, JPH::BroadPhaseLayer inLayer2 ) const override
{
// NO_COLLIDE collides with nothing.
case Layers::NO_COLLIDE:
return false;
// NON_MOVING collides with moving objects and debris.
case Layers::NON_MOVING_WORLD:
case Layers::NON_MOVING_OBJECT:
return inLayer2 == BroadPhaseLayers::MOVING ||
inLayer2 == BroadPhaseLayers::DEBRIS;
// MOVING collides with moving and non-moving objects.
case Layers::MOVING:
return inLayer2 == BroadPhaseLayers::MOVING ||
inLayer2 == BroadPhaseLayers::NON_MOVING_WORLD ||
inLayer2 == BroadPhaseLayers::NON_MOVING_OBJECT;
switch (inLayer1)
{
// NO_COLLIDE collides with nothing.
case Layers::NO_COLLIDE:
return false;
// NON_MOVING collides with moving objects and debris.
case Layers::NON_MOVING_WORLD:
case Layers::NON_MOVING_OBJECT:
return inLayer2 == BroadPhaseLayers::MOVING ||
inLayer2 == BroadPhaseLayers::DEBRIS;
// MOVING collides with moving and non-moving objects.
case Layers::MOVING:
return inLayer2 == BroadPhaseLayers::MOVING ||
inLayer2 == BroadPhaseLayers::NON_MOVING_WORLD ||
inLayer2 == BroadPhaseLayers::NON_MOVING_OBJECT;
// DEBRIS only collides with non-moving objects.
case Layers::DEBRIS:
return inLayer2 == BroadPhaseLayers::NON_MOVING_WORLD || inLayer2 == BroadPhaseLayers::NON_MOVING_OBJECT;
default:
VJoltAssert( false );
return false;
// DEBRIS only collides with non-moving objects.
case Layers::DEBRIS:
return inLayer2 == BroadPhaseLayers::NON_MOVING_WORLD || inLayer2 == BroadPhaseLayers::NON_MOVING_OBJECT;
default:
VJoltAssert( false );
return false;
}
}
}
private:
};
//-------------------------------------------------------------------------------------------------
@ -177,7 +193,9 @@ CON_COMMAND( vjolt_environment_dump_server, "Dumps the next simulated environmen
//-------------------------------------------------------------------------------------------------
JoltBPLayerInterfaceImpl JoltPhysicsEnvironment::s_BPLayerInterface;
JoltBroadPhaseLayerInterface JoltPhysicsEnvironment::s_BroadPhaseLayerInterface;
JoltObjectVsBroadPhaseLayerFilter JoltPhysicsEnvironment::s_BroadPhaseFilter;
JoltObjectLayerPairFilter JoltPhysicsEnvironment::s_LayerPairFilter;
JoltPhysicsEnvironment::JoltPhysicsEnvironment()
: m_ContactListener( m_PhysicsSystem )
@ -186,7 +204,7 @@ JoltPhysicsEnvironment::JoltPhysicsEnvironment()
m_PhysicsSystem.Init(
kMaxBodies, kNumBodyMutexes, kMaxBodyPairs, kMaxContactConstraints,
s_BPLayerInterface, JoltBroadPhaseCanCollide, JoltObjectCanCollide );
s_BroadPhaseLayerInterface, s_BroadPhaseFilter, s_LayerPairFilter);
{
JPH::PhysicsSettings settings = m_PhysicsSystem.GetPhysicsSettings();
@ -460,9 +478,9 @@ JoltPhysicsSpring::JoltPhysicsSpring( JPH::PhysicsSystem *pPhysicsSystem, JoltPh
settings.mMinDistance = m_OnlyStretch ? 0.0f : SourceToJolt::Distance( pParams->naturalLength );
settings.mMaxDistance = SourceToJolt::Distance( pParams->naturalLength );
settings.mFrequency = GetSpringFrequency( pParams->constant, m_pObjectStart, m_pObjectEnd );
// TODO(Josh): The damping values are normally fucking crazy like 5500 from Source... wtf is going on here.
settings.mDamping = 0.0f;
settings.mLimitsSpringSettings.mMode = JPH::ESpringMode::StiffnessAndDamping;
settings.mLimitsSpringSettings.mFrequency = pParams->constant;
settings.mLimitsSpringSettings.mDamping = pParams->damping;
m_pConstraint = static_cast< JPH::DistanceConstraint * >( settings.Create( *refBody, *attBody ) );
m_pConstraint->SetEnabled( true );
@ -503,7 +521,8 @@ void JoltPhysicsSpring::SetSpringConstant( float flSpringConstant )
m_pObjectStart->Wake();
m_pObjectEnd->Wake();
m_pConstraint->SetFrequency( GetSpringFrequency( flSpringConstant, m_pObjectStart, m_pObjectEnd ) );
JPH::SpringSettings& springSettings = m_pConstraint->GetLimitsSpringSettings();
springSettings.mStiffness = flSpringConstant;
}
void JoltPhysicsSpring::SetSpringDamping( float flSpringDamping )
@ -511,7 +530,8 @@ void JoltPhysicsSpring::SetSpringDamping( float flSpringDamping )
m_pObjectStart->Wake();
m_pObjectEnd->Wake();
//m_pConstraint->SetDamping( flSpringDamping );
JPH::SpringSettings& springSettings = m_pConstraint->GetLimitsSpringSettings();
springSettings.mDamping = flSpringDamping;
}
void JoltPhysicsSpring::SetSpringLength( float flSpringLength )
@ -755,7 +775,6 @@ void JoltPhysicsEnvironment::Simulate( float deltaTime )
for ( IJoltPhysicsController *pController : m_pPhysicsControllers )
pController->OnPreSimulate( deltaTime );
const int nIntegrationSubSteps = vjolt_substeps_integration.GetInt();
const int nCollisionSubSteps = vjolt_substeps_collision.GetInt();
// If we haven't already, optimize the broadphase, currently this can only happen once per-environment
@ -774,20 +793,20 @@ void JoltPhysicsEnvironment::Simulate( float deltaTime )
int nIterCount = 0;
while ( m_PhysicsSystem.GetNumActiveBodies() && nIterCount < MaxInitialIterations )
{
m_PhysicsSystem.Update( InitialIterationTimescale, 1, InitialSubSteps, tempAllocator, jobSystem );
m_PhysicsSystem.Update( InitialIterationTimescale, InitialSubSteps, tempAllocator, jobSystem );
nIterCount++;
}
}
else
{
// Move things around!
m_PhysicsSystem.Update( deltaTime, nCollisionSubSteps, nIntegrationSubSteps, tempAllocator, jobSystem );
m_PhysicsSystem.Update( deltaTime, nCollisionSubSteps, tempAllocator, jobSystem );
}
}
else
{
// Move things around!
m_PhysicsSystem.Update( deltaTime, nCollisionSubSteps, nIntegrationSubSteps, tempAllocator, jobSystem );
m_PhysicsSystem.Update( deltaTime, nCollisionSubSteps, tempAllocator, jobSystem );
}
m_ContactListener.FlushCallbacks();

View File

@ -11,7 +11,9 @@
#include "vjolt_constraints.h"
#include "vjolt_listener_contact.h"
class JoltBPLayerInterfaceImpl;
class JoltBroadPhaseLayerInterface;
class JoltObjectVsBroadPhaseLayerFilter;
class JoltObjectLayerPairFilter;
// StateRecorder implementation that saves to a fixed buffer
class VJoltStateRecorder final : public JPH::StateRecorder, public CUtlBuffer
@ -188,7 +190,9 @@ private:
float m_flStepTime = 1.0f / 60.0f;
float m_flAirDensity = 2.0f;
static JoltBPLayerInterfaceImpl s_BPLayerInterface;
static JoltBroadPhaseLayerInterface s_BroadPhaseLayerInterface;
static JoltObjectVsBroadPhaseLayerFilter s_BroadPhaseFilter;
static JoltObjectLayerPairFilter s_LayerPairFilter;
// For GetObjectList
mutable JPH::BodyIDVector m_CachedBodies;

View File

@ -40,7 +40,7 @@ public:
{
}
JPH::ValidateResult OnContactValidate( const JPH::Body &inBody1, const JPH::Body &inBody2, const JPH::CollideShapeResult &inCollisionResult ) override
JPH::ValidateResult OnContactValidate( const JPH::Body &inBody1, const JPH::Body &inBody2, JPH::Vec3Arg inBaseOffset, const JPH::CollideShapeResult &inCollisionResult ) override
{
return JPH::ValidateResult::AcceptAllContactsForThisBodyPair;
}
@ -414,7 +414,7 @@ private:
: m_CollisionPair{ pObject1, pObject2 }
// Slart: Note this negated vector, it is important, Portal 2 bouncy paint needs it negated otherwise things fly into the surface they hit
, m_SurfaceNormal( -Vector( inManifold.mWorldSpaceNormal.GetX(), inManifold.mWorldSpaceNormal.GetY(), inManifold.mWorldSpaceNormal.GetZ() ) )
, m_ContactPoint( JoltToSource::Distance( inManifold.mWorldSpaceContactPointsOn1[0] ) )
, m_ContactPoint( JoltToSource::Distance( inManifold.GetWorldSpaceContactPointOn1( 0 ) ) )
// Unused...
, m_ContactSpeed( vec3_origin )
, m_Velocity0( pObject1->GetBody()->GetLinearVelocity() )

View File

@ -31,6 +31,7 @@ JoltPhysicsObject::JoltPhysicsObject( JPH::Body *pBody, JoltPhysicsEnvironment *
, m_pGameData( pParams->pGameData )
, m_materialIndex( Max( nMaterialIndex, 0 ) ) // Sometimes we get passed -1.
, m_flVolume( pParams->volume )
, m_pName( pParams->pName )
{
// Josh:
// Assert that m_pGameData is the first element, some games
@ -280,7 +281,7 @@ void JoltPhysicsObject::SetMass( float mass )
JPH::MassProperties massProperties = m_pBody->GetShape()->GetMassProperties();
massProperties.ScaleToMass( mass );
massProperties.mInertia( 3, 3 ) = 1.0f;
pMotionProperties->SetMassProperties( massProperties );
pMotionProperties->SetMassProperties( JPH::EAllowedDOFs::All, massProperties );
CalculateBuoyancy();
}
@ -396,7 +397,7 @@ float JoltPhysicsObject::GetSphereRadius() const
return 0.0f;
const JPH::SphereShape *pSphereShape = static_cast< const JPH::SphereShape * >( m_pBody->GetShape() );
return pSphereShape->GetRadius();
return JoltToSource::Distance( pSphereShape->GetRadius() );
}
void JoltPhysicsObject::SetSphereRadius( float radius )
@ -916,8 +917,7 @@ const CPhysCollide *JoltPhysicsObject::GetCollide() const
const char *JoltPhysicsObject::GetName() const
{
// Slart: Jolt used to store debug names in JPH::Body, but it was removed. So now everybody's NoName.
return "NoName";
return m_pName;
}
//-------------------------------------------------------------------------------------------------
@ -979,7 +979,7 @@ void JoltPhysicsObject::RemoveTrigger()
const JPH::Shape *pShape = GetCollide()->ToShape();
m_pPhysicsSystem->GetNarrowPhaseQueryNoLock().CollideShape(
pShape, JPH::Vec3::sReplicate( 1.0f ), queryTransform, collideSettings, collector,
pShape, JPH::Vec3::sReplicate( 1.0f ), queryTransform, collideSettings, JPH::Vec3::sZero(), collector,
JPH::SpecifiedBroadPhaseLayerFilter( BroadPhaseLayers::MOVING ), JPH::SpecifiedObjectLayerFilter( Layers::MOVING ), body_filter );
}

View File

@ -239,6 +239,7 @@ private:
// remain un-named offset by the vtable to get to this
// instead of calling GetGameData().
void *m_pGameData = nullptr;
const char *m_pName = "NoName";
uint16 m_gameFlags = 0;
uint16 m_gameIndex = 0;
@ -283,7 +284,3 @@ inline float GetInvEffectiveMass( JoltPhysicsObject *pObject0, JoltPhysicsObject
return ( pObject0->IsStatic() ? 0.0f : pObject0->GetInvMass() ) + ( pObject1->IsStatic() ? 0.0f : pObject1->GetInvMass() );
}
inline float GetSpringFrequency( float flConstant, JoltPhysicsObject *pObject0, JoltPhysicsObject *pObject1 )
{
return sqrt( flConstant * GetInvEffectiveMass( pObject0, pObject1 ) ) / ( 2.0f * M_PI_F );
}

View File

@ -234,6 +234,38 @@ KeyValues *JoltPhysicsSurfaceProps::SurfacePropsToKeyValues( const char *pszBuff
//-------------------------------------------------------------------------------------------------
void *JoltPhysicsSurfaceProps::GetIVPMaterial( int nIndex )
{
Log_Stub( LOG_VJolt );
return nullptr;
}
int JoltPhysicsSurfaceProps::GetIVPMaterialIndex( const void *pMaterial ) const
{
Log_Stub( LOG_VJolt );
return (int)(uintp)( pMaterial );
}
void *JoltPhysicsSurfaceProps::GetIVPManager( void )
{
Log_Stub( LOG_VJolt );
return nullptr;
}
int JoltPhysicsSurfaceProps::RemapIVPMaterialIndex( int nIndex ) const
{
Log_Stub( LOG_VJolt );
return nIndex;
}
const char *JoltPhysicsSurfaceProps::GetReservedMaterialName( int nMaterialIndex ) const
{
Log_Stub( LOG_VJolt );
return "default";
}
//-------------------------------------------------------------------------------------------------
JoltPhysicsMaterialIndexSaveOps JoltPhysicsMaterialIndexSaveOps::s_Instance;
void JoltPhysicsMaterialIndexSaveOps::Save( const SaveRestoreFieldInfo_t &fieldInfo, ISave *pSave )

View File

@ -43,6 +43,13 @@ public:
ISaveRestoreOps *GetMaterialIndexDataOps() const override_portal2;
// GMod-specific internal gubbins that was exposed in the public interface.
void *GetIVPMaterial( int nIndex ) override_gmod;
int GetIVPMaterialIndex( const void *pMaterial ) const override_gmod;
void *GetIVPManager( void ) override_gmod;
int RemapIVPMaterialIndex( int nIndex ) const override_gmod;
const char *GetReservedMaterialName( int nMaterialIndex ) const override_gmod;
public:
static JoltPhysicsSurfaceProps& GetInstance() { return s_PhysicsSurfaceProps; }

View File

@ -6,6 +6,8 @@
$Macro PROJNAME "vphysics_jolt_avx2"
$Conditional VOLT_SSE2 "0"
$Conditional VOLT_SSE42 "0"
$Conditional VOLT_AVX2 "1"
$Macro VOLTARCH "AVX2"

View File

@ -6,7 +6,9 @@
$Macro PROJNAME "vphysics_jolt_sse2"
$Conditional VOLT_SSE2 "1"
$Conditional VOLT_SSE2 "1"
$Conditional VOLT_SSE42 "0"
$Conditional VOLT_AVX2 "0"
$Macro VOLTARCH "SSE2"
$Include "vphysics_jolt_inc.vpc"

View File

@ -6,7 +6,9 @@
$Macro PROJNAME "vphysics_jolt_sse42"
$Conditional VOLT_SSE42 "1"
$Conditional VOLT_SSE2 "0"
$Conditional VOLT_SSE42 "1"
$Conditional VOLT_AVX2 "0"
$Macro VOLTARCH "SSE42"
$Include "vphysics_jolt_inc.vpc"