r5sdk/r5dev/game/server/baseanimating.h
Kawe Mazidjatari a618990937 Detour code refactor
This change was planned for a long time. This moves all REGISTER calls to a single translation unit, this is required as we currently added a very dirty workaround for not registering duplicates by checking if VFTable pointer was already present in the vector... Registering from single translation unit prevents duplicate instances that gets created if header is included by more cpp files.
Reworking this reduced 100kb+ of compiled code. This commit also reworked the way functions/variables/constant gets logged with their addresses; the new code formats them on the fly, and allows for resize at any time. Formatting is no longer required by programmer.

TODO: currently there are some compile errors for dedicated and client dll's. These will be resolved very soon as they need to be properly worked out still (server & client only stuff needs to be properly split). Use the 'main' (stable) branch for the time being if you need to compile these dll's.
2023-01-25 02:26:52 +01:00

165 lines
4.7 KiB
C++
Raw Blame History

//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
//===========================================================================//
#ifndef BASEANIMATING_H
#define BASEANIMATING_H
#ifdef _WIN32
#pragma once
#endif
#include "baseentity.h"
#include "public/studio.h"
#include "game/shared/animation.h"
class CBaseAnimating : public CBaseEntity
{
public:
void DrawServerHitboxes(float duration = 0.0f);
void LockStudioHdr(void);
void HitboxToWorldTransforms(uint32_t iBone, matrix3x4_t* transforms);
CStudioHdr* GetModelPtr(void);
float GetModelScale() const { return m_flModelScale; }
protected:
char gap_b04[8]; // Aligns properly in IDA and generated code after setting from 12 to 8.
bool m_markedForServerInterpolation;
bool m_animRemoveFromServerInterpolationNextFrame;
char gap_b12[2];
float m_flGroundSpeed;
float m_flLastEventCheck;
int m_nForceBone;
Vector3D m_vecForce;
int m_nSkin;
__int16 m_skinMod;
char gap_b32[2];
int m_nBody;
int m_camoIndex;
int m_decalIndex;
int m_nHitboxSet;
float m_flModelScale;
int m_nRagdollImpactFXTableId;
float m_flSkyScaleStartTime;
float m_flSkyScaleEndTime;
float m_flSkyScaleStartValue;
float m_flSkyScaleEndValue;
char gap_b5c[4];
char m_SequenceTransitioner[368];
float m_flIKGroundContactTime;
float m_flIKGroundMinHeight;
float m_flIKGroundMaxHeight;
float m_flEstIkFloor;
float m_flEstIkOffset;
char gap_ce4[4];
char m_pIk[8];
int m_ikPrevSequence;
bool m_bSequenceFinished;
bool m_bSequenceLooped;
bool m_bSequenceLoops;
bool m_continueAnimatingAfterRagdoll;
float m_lockedAnimDeltaYaw;
bool m_threadedBoneSetup;
bool m_settingUpBones;
char gap_cfe[2];
float m_flDissolveStartTime;
int m_baseAnimatingActivity;
float m_flPoseParameter[12];
bool m_poseParameterOverTimeActive;
char gap_d39[3];
float m_poseParameterGoalValue[12];
float m_poseParameterEndTime[12];
float m_lastTimeSetPoseParametersSameAs;
bool m_bClientSideAnimation;
bool m_bReallyClientSideAnimation;
char gap_da2[2];
int m_nNewSequenceParity;
int m_nResetEventsParity;
char gap_dac[4];
__int64 m_boneCacheHandle;
__int16 m_fBoneCacheFlags; // END CBASEANIMATING
char gap_dba[2];
int m_animNetworkFlags;
bool m_animActive;
bool m_animCollisionEnabled;
bool m_animPlantingEnabled;
bool m_animInitialCorrection;
bool m_animWaitingForCleanup;
char gap_dc5[3];
int m_animWaitingForCleanupTime;
char gap_dcc[4];
__int64 m_recordedAnim;
int m_recordedAnimIndex;
int m_recordedAnimCachedFrameIndex;
float m_recordedAnimPlaybackRate;
float m_recordedAnimPlaybackTime;
matrix3x4_t m_recordedAnimTransform;
int m_recordedAnimPlaybackEnt;
float m_recordedAnimBlendTime;
Vector3D m_recordedAnimBlendOffset;
Vector3D m_recordedAnimBlendAngles;
AnimRelativeData m_animRelativeData;
int m_syncingWithEntity;
char gap_ec4[4];
PredictedAnimEventData m_predictedAnimEventData;
int m_animRefEntityAttachmentIndex;
int m_fireAttachmentSmartAmmoIndex;
int m_fireAttachmentChestFocusIndex;
int m_fireAttachmentModelIndex;
char m_keyHitboxes[160];
CStudioHdr* m_pStudioHdr;
int m_animSequence;
float m_animCycle;
int m_animModelIndex;
float m_animStartTime;
float m_animStartCycle;
float m_animPlaybackRate;
bool m_animFrozen;
char gap_ff9[7];
__int64 m_createdProp[8];
int m_numCreatedProps;
char gap_1044[4];
__int64 m_currentFramePropEvents[16];
int m_numCurrentFramePropEvents;
char gap_10cc[4];
__int64 m_activeScriptAnimWindows[8];
int m_numActiveScriptAnimWindows;
char gap_1114[4];
__int64 m_currentFrameWindowEvents[16];
int m_numCurrentFrameWindowEvents;
char gap_119c[4];
__int64 m_AnimSyncScriptProps[8];
int m_numAnimSyncScriptProps;
char gap_11E4[12]; // TODO: this might belong to CBaseAnimatingOverlay!
};
inline CMemory p_CBaseAnimating__LockStudioHdr;
inline auto v_CBaseAnimating__LockStudioHdr = p_CBaseAnimating__LockStudioHdr.RCast<CBaseAnimating* (*)(CBaseAnimating* thisp)>();
void BaseAnimating_Attach();
void BaseAnimating_Detach();
///////////////////////////////////////////////////////////////////////////////
class VBaseAnimating : public IDetour
{
virtual void GetAdr(void) const
{
LogFunAdr("CBaseAnimating::LockStudioHdr", p_CBaseAnimating__LockStudioHdr.GetPtr());
}
virtual void GetFun(void) const
{
p_CBaseAnimating__LockStudioHdr = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 41 56 48 83 EC 20 0F BF 41 58");
v_CBaseAnimating__LockStudioHdr = p_CBaseAnimating__LockStudioHdr.RCast<CBaseAnimating* (*)(CBaseAnimating* thisp)>();
}
virtual void GetVar(void) const { }
virtual void GetCon(void) const { }
virtual void Attach(void) const { }
virtual void Detach(void) const { }
};
///////////////////////////////////////////////////////////////////////////////
#endif // BASEANIMATING_H