// // Created by Michal Přikryl on 30.08.2025. // Copyright (c) 2025 slynxcz. All rights reserved. // #pragma once #include #include "vector.h" #include "schema/CBaseEntity.h" #include "craytraceinterface.h" namespace RayTracePlugin::RayTrace { class CTraceFilterEx : public CTraceFilter { public: explicit CTraceFilterEx(CBaseEntity* entityToIgnore) : CTraceFilter(static_cast(entityToIgnore), entityToIgnore ? entityToIgnore->m_hOwnerEntity.Get() : nullptr, entityToIgnore ? entityToIgnore->m_pCollision()->m_collisionAttribute().m_nHierarchyId() : static_cast(0xFFFFFFFF), static_cast(MASK_SHOT_PHYSICS), COLLISION_GROUP_DEFAULT, true) { } CTraceFilterEx() : CTraceFilter(static_cast(MASK_SHOT_PHYSICS), COLLISION_GROUP_DEFAULT, true) { } }; class CRayTrace : public CRayTraceInterface { public: bool Initialize(); public: TraceResult TraceShape(const Vector& vecStart, const QAngle& angAngles, CEntityInstance* pIgnoreEntity, TraceOptions* pTraceOptions) override; TraceResult TraceEndShape(const Vector& vecStart, const Vector& vecEnd, CEntityInstance* pIgnoreEntity, TraceOptions* pTraceOptions) override; TraceResult TraceHullShape(const Vector& vecStart, const Vector& vecEnd, const Vector& vecMins, const Vector& vecMaxs, CEntityInstance* pIgnoreEntity, TraceOptions* pTraceOptions) override; TraceResult TraceShapeEx(const Vector& vecStart, const Vector& vecEnd, CTraceFilter* pTraceFilter, Ray_t* pRay) override; protected: DynLibUtils::CMemory m_pCNavPhysicsInterface_TraceShape; protected: void** m_pCNavPhysicsInterfaceVTable; }; extern CRayTrace g_CRayTrace; }