diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ebd7682..5b4bc50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: env: PROJECT: "collisionhook" - SDKS: "css hl2dm dods tf2" + SDKS: "css hl2dm dods tf2 l4d l4d2" MMSOURCE_VERSION: "1.11" SOURCEMOD_VERSION: "1.11" CACHE_PATH: ${{ github.workspace }}/cache @@ -103,12 +103,7 @@ jobs: # Verify github cache, and see if we don't have the sdks already cloned and update them for sdk in ${{ env.SDKS }} do - # TODO: remove these conditionals once https://github.com/alliedmodders/hl2sdk/pull/198 is merged - if [ "${sdk}" == "tf2" ]; then - shallow_checkout "https://github.com/Kenzzer/hl2sdk" "tf2_win64" "hl2sdk-tf2" - else - shallow_checkout "https://github.com/alliedmodders/hl2sdk" "${sdk}" "hl2sdk-${sdk}" - fi + shallow_checkout "https://github.com/alliedmodders/hl2sdk" "${sdk}" "hl2sdk-${sdk}" done shallow_checkout "https://github.com/alliedmodders/ambuild" "master" "ambuild" diff --git a/src/extension.cpp b/src/extension.cpp index a809bd9..bc64a3e 100644 --- a/src/extension.cpp +++ b/src/extension.cpp @@ -22,7 +22,11 @@ SMEXT_LINK( &g_CollisionHook ); SH_DECL_HOOK0( IPhysics, CreateEnvironment, SH_NOATTRIB, 0 , IPhysicsEnvironment * ); SH_DECL_HOOK1_void( IPhysicsEnvironment, SetCollisionSolver, SH_NOATTRIB, 0, IPhysicsCollisionSolver * ); +#if SOURCE_ENGINE == SE_LEFT4DEAD2 +SH_DECL_HOOK6( IPhysicsCollisionSolver, ShouldCollide, SH_NOATTRIB, 0, int, IPhysicsObject *, IPhysicsObject *, void *, void *, const PhysicsCollisionRulesCache_t &, const PhysicsCollisionRulesCache_t & ); +#else SH_DECL_HOOK4( IPhysicsCollisionSolver, ShouldCollide, SH_NOATTRIB, 0, int, IPhysicsObject *, IPhysicsObject *, void *, void * ); +#endif IGameConfig *g_pGameConf = NULL; @@ -175,7 +179,11 @@ void CollisionHook::SetCollisionSolver( IPhysicsCollisionSolver *pSolver ) RETURN_META( MRES_IGNORED ); } +#if SOURCE_ENGINE == SE_LEFT4DEAD2 +int CollisionHook::VPhysics_ShouldCollide( IPhysicsObject *pObj1, IPhysicsObject *pObj2, void *pGameData1, void *pGameData2, const PhysicsCollisionRulesCache_t &objCache1, const PhysicsCollisionRulesCache_t &obhCache2 ) +#else int CollisionHook::VPhysics_ShouldCollide( IPhysicsObject *pObj1, IPhysicsObject *pObj2, void *pGameData1, void *pGameData2 ) +#endif { if ( g_pCollisionFwd->GetFunctionCount() == 0 ) RETURN_META_VALUE( MRES_IGNORED, 1 ); // no plugins are interested, let the game decide diff --git a/src/extension.h b/src/extension.h index d7aaefe..ff8e568 100644 --- a/src/extension.h +++ b/src/extension.h @@ -9,6 +9,9 @@ class IPhysicsEnvironment; class IPhysicsCollisionSolver; class IPhysicsObject; +#if SOURCE_ENGINE == SE_LEFT4DEAD2 +struct PhysicsCollisionRulesCache_t; +#endif class CollisionHook : @@ -87,17 +90,21 @@ public: public: // hooks IPhysicsEnvironment *CreateEnvironment(); void SetCollisionSolver( IPhysicsCollisionSolver *pSolver ); +#if SOURCE_ENGINE == SE_LEFT4DEAD2 + int VPhysics_ShouldCollide( IPhysicsObject *pObj1, IPhysicsObject *pObj2, void *pGameData1, void *pGameData2, const PhysicsCollisionRulesCache_t &objCache1, const PhysicsCollisionRulesCache_t &objCache2 ); +#else int VPhysics_ShouldCollide( IPhysicsObject *pObj1, IPhysicsObject *pObj2, void *pGameData1, void *pGameData2 ); +#endif }; // adapted from util_shared.h -inline const CBaseEntity *UTIL_EntityFromEntityHandle( const IHandleEntity *pConstHandleEntity ) -{ - IHandleEntity *pHandleEntity = const_cast( pConstHandleEntity ); - IServerUnknown *pUnk = static_cast( pHandleEntity ); - - return pUnk->GetBaseEntity(); +inline const CBaseEntity *UTIL_EntityFromEntityHandle( const IHandleEntity *pConstHandleEntity ) +{ + IHandleEntity *pHandleEntity = const_cast( pConstHandleEntity ); + IServerUnknown *pUnk = static_cast( pHandleEntity ); + + return pUnk->GetBaseEntity(); }