Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inline void UTIL_ClipRayToEntity(Vector end, Vector start, trace_t* oldtrace, CBaseEntity* ent)
- {
- auto mins = ent->GetMins(), maxs = ent->GetMaxs();
- auto dir(end - start);
- dir.NormalizeInPlace();
- auto center = (maxs + mins) / 2;
- auto pos(center + ent->GetNetworkOrigin());
- auto to = (pos - start);
- auto range_along = dir.Dot(to);
- float range;
- if (range_along < 0.f)
- range = -to.Length();
- else if (range_along > dir.Length())
- range = -(pos - end).Length();
- else
- {
- auto ray(pos - ((dir * range_along) + start));
- range = ray.Length();
- }
- if (range <= 60.f)
- {
- trace_t tr;
- Ray_t ray;
- ray.Init(start, end);
- Interfaces::EngineTrace->ClipRayToEntity(ray, 0x4600400B, (IHandleEntity*)ent, &tr);
- if (oldtrace->fraction > tr.fraction)
- *oldtrace = tr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement