Files
GTASource/game/debug/DebugArchetypeProxy.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

211 lines
8.1 KiB
C++

// ===========================
// debug/DebugArchetypeProxy.h
// (c) 2012 RockstarNorth
// ===========================
#ifndef _DEBUG_DEBUGARCHETYPEPROXY_H_
#define _DEBUG_DEBUGARCHETYPEPROXY_H_
#define USE_DEBUG_ARCHETYPE_PROXIES (1 && __BANK)
#if __BANK
#include "modelinfo/BaseModelInfo.h"
#include "modelinfo/PedModelInfo.h"
#include "modelinfo/VehicleModelInfo.h"
class CDebugArchetypeProxy;
class CDebugArchetype
{
public:
#if USE_DEBUG_ARCHETYPE_PROXIES
static bool AreDebugArchetypeProxiesBeingCreated();
static void CreateDebugArchetypeProxies();
static void CheckDebugArchetypeProxy(const CBaseModelInfo* pModelInfo);
#endif // USE_DEBUG_ARCHETYPE_PROXIES
static u32 GetMaxDebugArchetypeProxies(); // use this instead of GetMaxModelInfos
static const CDebugArchetypeProxy* GetDebugArchetypeProxy(u32 i); // use this instead of GetBaseModelInfo(fwModelId(i))
static const CDebugArchetypeProxy* GetDebugArchetypeProxyForHashKey(u32 hashKey, int* out_proxyIndex = NULL);
static const CDebugArchetypeProxy* GetDebugArchetypeProxyForModelInfo(const CBaseModelInfo* pModelInfo, int* out_proxyIndex = NULL);
static CBaseModelInfo* GetBaseModelInfoForProxy(const CDebugArchetypeProxy* proxy);
};
#endif // __BANK
#if USE_DEBUG_ARCHETYPE_PROXIES
enum
{
DEBUG_ARCHETYPE_PROXY_STATIC = BIT(0),
DEBUG_ARCHETYPE_PROXY_IS_PROP = BIT(1),
DEBUG_ARCHETYPE_PROXY_IS_TREE = BIT(2),
DEBUG_ARCHETYPE_PROXY_DONT_CAST_SHADOWS = BIT(3),
DEBUG_ARCHETYPE_PROXY_SHADOW_PROXY = BIT(4),
DEBUG_ARCHETYPE_PROXY_HAS_UV_ANIMATION = BIT(5),
};
class CDebugArchetypeProxy
{
private:
friend class CDebugArchetype;
void Create(const CBaseModelInfo* pModelInfo, u32 proxyIndex, int mapTypeSlot, bool bStaticArchetype);
bool Check(const CBaseModelInfo* pModelInfo) const;
public:
static int FindProxyIndex(u32 hashKey);
const char* GetModelName () const { return m_modelName.GetCStr(); }
u32 GetHashKey () const { return m_hashKey; }
int GetMapTypeSlot () const { return m_mapTypeSlot; }
u8 GetModelType () const { return m_type; }
bool GetIsStaticArchetype () const { return (m_proxyFlags & DEBUG_ARCHETYPE_PROXY_STATIC ) != 0; }
bool GetIsProp () const { return (m_proxyFlags & DEBUG_ARCHETYPE_PROXY_IS_PROP ) != 0; }
bool GetIsTree () const { return (m_proxyFlags & DEBUG_ARCHETYPE_PROXY_IS_TREE ) != 0; }
bool GetDontCastShadows () const { return (m_proxyFlags & DEBUG_ARCHETYPE_PROXY_DONT_CAST_SHADOWS) != 0; }
bool GetIsShadowProxy () const { return (m_proxyFlags & DEBUG_ARCHETYPE_PROXY_SHADOW_PROXY ) != 0; }
bool GetHasAnimUV () const { return (m_proxyFlags & DEBUG_ARCHETYPE_PROXY_HAS_UV_ANIMATION ) != 0; }
float GetHDTextureDistance () const { return m_HDTexDistance; }
float GetLodDistanceUnscaled() const { return m_lodDistance; }
bool GetHasLoaded () const;
fwArchetype::DrawableType GetDrawableType() const { return (fwArchetype::DrawableType)m_drawableType; }
s32 SafeGetDrawableIndex() const;
s32 SafeGetDrawDictIndex() const;
s32 SafeGetFragmentIndex() const;
s32 SafeGetDrawDictEntry_IfLoaded() const;
s32 GetAssetParentTxdIndex() const;
s32 GetPtFxAssetSlot() const { return m_ptfxAssetSlot; }
rmcDrawable* GetDrawable() const;
private:
atHashString m_modelName;
u32 m_hashKey;
s16 m_mapTypeSlot; // -1 for static archetypes
u16 m_proxyFlags;
float m_HDTexDistance;
float m_lodDistance;
u8 m_type;
u8 m_drawableType;
s32 m_drawableIndex; // slot index in g_DwdStore, g_DrawableStore or g_FragmentStore
s32 m_ptfxAssetSlot;
};
class CDebugPedArchetypeProxy : public CDebugArchetypeProxy
{
private:
friend class CDebugArchetypeProxy;
void Create(const CPedModelInfo* pedModelInfo);
bool Check(const CPedModelInfo* pedModelInfo) const;
public:
s32 GetHDTxdIndex () const { return m_HDtxdIdx; }
s32 GetPedComponentFileIndex () const { return m_pedCompFileIndex; }
s32 GetPropsFileIndex () const { return m_propsFileIndex; }
bool HasStreamedProps () const { return strcmp(GetPropStreamFolder(), "null") != 0;}
bool GetIsStreamedGfx () const { return m_isStreamedGraphics; }
const char* GetPropStreamFolder() const { return m_propStreamFolder; }
private:
s32 m_HDtxdIdx;
s32 m_pedCompFileIndex;
s32 m_propsFileIndex;
bool m_isStreamedGraphics : 1;
const char* m_propStreamFolder;
};
class CDebugVehicleArchetypeProxy : public CDebugArchetypeProxy
{
private:
friend class CDebugArchetypeProxy;
void Create(const CVehicleModelInfo* pVehicleModelInfo);
bool Check(const CVehicleModelInfo* pVehicleModelInfo) const;
public:
s32 GetHDFragmentIndex() const { return m_HDfragIdx; }
s32 GetHDTxdIndex () const { return m_HDtxdIdx; }
private:
s32 m_HDfragIdx;
s32 m_HDtxdIdx;
};
class CDebugWeaponArchetypeProxy : public CDebugArchetypeProxy
{
private:
friend class CDebugArchetypeProxy;
void Create(const CWeaponModelInfo* pWeaponModelInfo);
bool Check(const CWeaponModelInfo* pWeaponModelInfo) const;
public:
s32 GetHDDrawableIndex() const { return m_HDdrawIdx; }
s32 GetHDTxdIndex () const { return m_HDtxdIdx; }
private:
s32 m_HDdrawIdx;
s32 m_HDtxdIdx;
};
#elif __BANK
class CDebugArchetypeProxy : protected CBaseModelInfo
{
public:
const char* GetModelName () const { return CBaseModelInfo::GetModelName(); }
u8 GetModelType () const { return CBaseModelInfo::GetModelType(); }
int GetMapTypeSlot () const { return -1; } // not supported
u32 GetHashKey () const { return CBaseModelInfo::GetHashKey(); }
bool GetIsStaticArchetype () const { return true; }
bool GetIsProp () const { return CBaseModelInfo::GetIsProp(); }
bool GetIsTree () const { return CBaseModelInfo::GetIsTree(); }
bool GetDontCastShadows () const { return CBaseModelInfo::GetDontCastShadows(); }
bool GetIsShadowProxy () const { return CBaseModelInfo::GetIsShadowProxy(); }
bool GetHasAnimUV () const { return CBaseModelInfo::GetClipDictionaryIndex() != -1 && CBaseModelInfo::GetHasUvAnimation(); }
float GetHDTextureDistance () const { return CBaseModelInfo::GetHDTextureDistance(); }
float GetLodDistanceUnscaled() const { return CBaseModelInfo::GetLodDistanceUnscaled(); }
bool GetHasLoaded () const { return CBaseModelInfo::GetHasLoaded(); }
DrawableType GetDrawableType() const { return CBaseModelInfo::GetDrawableType(); }
s32 SafeGetDrawableIndex() const { return CBaseModelInfo::SafeGetDrawableIndex().Get(); }
s32 SafeGetDrawDictIndex() const { return CBaseModelInfo::SafeGetDrawDictIndex().Get(); }
s32 SafeGetFragmentIndex() const { return CBaseModelInfo::SafeGetFragmentIndex().Get(); }
s32 SafeGetDrawDictEntry_IfLoaded() const { return CBaseModelInfo::SafeGetDrawDictEntry().Get(); }
s32 GetAssetParentTxdIndex() const { return CBaseModelInfo::GetAssetParentTxdIndex().Get(); }
s32 GetPtFxAssetSlot() const { return CBaseModelInfo::GetPtFxAssetSlot().Get(); }
rmcDrawable* GetDrawable() const { return CBaseModelInfo::GetDrawable(); }
};
class CDebugPedArchetypeProxy : public CPedModelInfo
{
public:
s32 GetHDTxdIndex () const { return CPedModelInfo::GetHDTxdIndex(); }
s32 GetPedComponentFileIndex() const { return CPedModelInfo::GetPedComponentFileIndex(); }
s32 GetPropsFileIndex () const { return CPedModelInfo::GetPropsFileIndex(); }
bool GetIsStreamedGfx () const { return CPedModelInfo::GetIsStreamedGfx(); }
};
class CDebugVehicleArchetypeProxy : public CVehicleModelInfo
{
public:
s32 GetHDFragmentIndex() const { return CVehicleModelInfo::GetHDFragmentIndex(); }
s32 GetHDTxdIndex () const { return CVehicleModelInfo::GetHDTxdIndex(); }
};
class CDebugWeaponArchetypeProxy : public CWeaponModelInfo
{
public:
s32 GetHDDrawableIndex() const { return CWeaponModelInfo::GetHDDrawableIndex(); }
s32 GetHDTxdIndex () const { return CWeaponModelInfo::GetHDTxdIndex(); }
};
#endif // __BANK
#endif // _DEBUG_DEBUGARCHETYPEPROXY_H_