Get fresh bones with entityhitboxcache and fix drawhitboxes issues
This commit is contained in:
parent
76b1a940be
commit
945c88e0ff
@ -95,6 +95,7 @@ weaponmode GetWeaponMode(CachedEntity *ent);
|
|||||||
void FixMovement(CUserCmd &cmd, Vector &viewangles);
|
void FixMovement(CUserCmd &cmd, Vector &viewangles);
|
||||||
void VectorAngles(Vector &forward, Vector &angles);
|
void VectorAngles(Vector &forward, Vector &angles);
|
||||||
void AngleVectors2(const QAngle &angles, Vector *forward);
|
void AngleVectors2(const QAngle &angles, Vector *forward);
|
||||||
|
void AngleVectors3(const QAngle &angles, Vector *forward, Vector *right, Vector *up);
|
||||||
extern std::mutex trace_lock;
|
extern std::mutex trace_lock;
|
||||||
bool IsEntityVisible(CachedEntity *entity, int hb);
|
bool IsEntityVisible(CachedEntity *entity, int hb);
|
||||||
bool IsEntityVectorVisible(CachedEntity *entity, Vector endpos, unsigned int mask = MASK_SHOT_HULL, trace_t *trace = nullptr);
|
bool IsEntityVectorVisible(CachedEntity *entity, Vector endpos, unsigned int mask = MASK_SHOT_HULL, trace_t *trace = nullptr);
|
||||||
|
26
include/reclasses/C_BaseAnimating.hpp
Normal file
26
include/reclasses/C_BaseAnimating.hpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "reclasses.hpp"
|
||||||
|
#include "copypasted/CSignature.h"
|
||||||
|
#include "e8call.hpp"
|
||||||
|
|
||||||
|
namespace re
|
||||||
|
{
|
||||||
|
|
||||||
|
class C_BaseAnimating
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline static void InvalidateBoneCache(IClientEntity *self)
|
||||||
|
{
|
||||||
|
typedef int (*InvalidateBoneCache_t)(IClientEntity *);
|
||||||
|
static uintptr_t addr = gSignatures.GetClientSignature("55 8B 0D ? ? ? ? 89 E5 8B 45 ? 8D 51");
|
||||||
|
static InvalidateBoneCache_t InvalidateBoneCache = InvalidateBoneCache_t(addr);
|
||||||
|
InvalidateBoneCache(self);
|
||||||
|
}
|
||||||
|
inline static bool Interpolate(IClientEntity *self, float time)
|
||||||
|
{
|
||||||
|
typedef bool (*fn_t)(IClientEntity *, float);
|
||||||
|
return vfunc<fn_t>(self, offsets::PlatformOffset(143, offsets::undefined, 143), 0)(self, time);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace re
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
|
#include "C_BaseAnimating.hpp"
|
||||||
#include "C_BaseEntity.hpp"
|
#include "C_BaseEntity.hpp"
|
||||||
#include "ITFGroupMatchCriteria.hpp"
|
#include "ITFGroupMatchCriteria.hpp"
|
||||||
#include "CTFPlayerShared.hpp"
|
#include "CTFPlayerShared.hpp"
|
||||||
|
@ -126,6 +126,13 @@ matrix3x4_t *EntityHitboxCache::GetBones(int numbones)
|
|||||||
}
|
}
|
||||||
if (!bones_setup)
|
if (!bones_setup)
|
||||||
{
|
{
|
||||||
|
// Reset game cache
|
||||||
|
if (!bonecache_enabled)
|
||||||
|
{
|
||||||
|
re::C_BaseAnimating::InvalidateBoneCache(RAW_ENT(parent_ref));
|
||||||
|
re::C_BaseAnimating::Interpolate(RAW_ENT(parent_ref), bones_setup_time);
|
||||||
|
}
|
||||||
|
|
||||||
// If numbones is not set, get it from some terrible and unnamed variable
|
// If numbones is not set, get it from some terrible and unnamed variable
|
||||||
if (numbones == -1)
|
if (numbones == -1)
|
||||||
{
|
{
|
||||||
|
@ -731,7 +731,7 @@ void MatrixGetColumn(const matrix3x4_t &in, int column, Vector &out)
|
|||||||
out.z = in[2][column];
|
out.z = in[2][column];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void MatrixAngles(const matrix3x4_t &matrix, float *angles)
|
void MatrixAngles(const matrix3x4_t &matrix, float *angles)
|
||||||
{
|
{
|
||||||
float forward[3];
|
float forward[3];
|
||||||
float left[3];
|
float left[3];
|
||||||
|
Reference in New Issue
Block a user