63 lines
1.2 KiB
C++
63 lines
1.2 KiB
C++
|
||
|
||
struct raytrace
|
||
{
|
||
raytrace(const Vector& src, const Vector& dest) : start(src), delta(dest - src) { isSwept = delta.x || delta.y || delta.z; }
|
||
Vector start{ };
|
||
float pad{ };
|
||
Vector delta{ };
|
||
byte pad2[40]{ };
|
||
bool isRay{ true };
|
||
bool isSwept{ };
|
||
};
|
||
|
||
|
||
struct tracefitlers
|
||
{
|
||
tracefitlers(const CBaseEntity* entity) : skip{ entity } { }
|
||
virtual bool shouldHitEntity(CBaseEntity* entity, int) { return entity != skip; }
|
||
virtual int getTraceType() const { return 0; }
|
||
const void* skip;
|
||
};
|
||
|
||
struct traceclass
|
||
{
|
||
Vector startpos;
|
||
Vector endpos;
|
||
|
||
struct
|
||
{
|
||
Vector normal;
|
||
float distance;
|
||
char type;
|
||
char signbits;
|
||
short unused;
|
||
}
|
||
plane;
|
||
|
||
float fraction;
|
||
int contents;
|
||
short dispflags;
|
||
bool allsolid;
|
||
bool startsolid;
|
||
float fractionleftsolid;
|
||
const char *name;
|
||
short surfaceprops;
|
||
short flags;
|
||
int hitgroup;
|
||
short physicsbone;
|
||
CBaseEntity *pent;
|
||
int hitbox;
|
||
};
|
||
|
||
class CEnginetrace
|
||
{
|
||
public:
|
||
void TraceRay(const raytrace &ray, tracefitlers *pTraceFilter, traceclass *ptrace)
|
||
{
|
||
typedef void(__thiscall* OriginalFn)(PVOID, const raytrace &, int, tracefitlers *, traceclass *);
|
||
return getvfunc<OriginalFn>(this, 5)(this, ray, 0x46004003, pTraceFilter, ptrace);
|
||
}
|
||
};
|
||
|