Seaside/SpyCustom/sdk/cdll_client_int.h
2021-06-16 18:45:17 +03:00

271 lines
8.9 KiB
C++

#ifndef CDLL_CLIENT_INT_H
#define CDLL_CLIENT_INT_H
#ifdef _WIN32
#pragma once
#endif
#include "iclientnetworkable.h"
#include "utllinkedlist.h"
#include "cdll_int.h"
#include "shareddefs.h"
#include "eiface.h"
#include "tier3.h"
#include "tier2_logging.h"
#include "shareddefs.h"
class IVModelRender;
class IVEngineClient;
class IVModelRender;
class IVEfx;
class IVRenderView;
class IVDebugOverlay;
class IMaterialSystem;
class IMaterialSystemStub;
class IDataCache;
class IMDLCache;
class IVModelInfoClient;
class IEngineVGui;
class ISpatialPartition;
class IBaseClientDLL;
class ISpatialPartition;
class IFileSystem;
class IStaticPropMgrClient;
class IShadowMgr;
class IEngineSound;
class IMatSystemSurface;
class IMaterialSystemHardwareConfig;
class ISharedGameRules;
class IEngineTrace;
class IGameUIFuncs;
class IGameEventManager2;
class IPhysicsGameTrace;
class CGlobalVarsBase;
class IClientTools;
class C_BaseAnimating;
class IColorCorrectionSystem;
class IInputSystem;
class ISceneFileCache;
class IXboxSystem;
class IAvi;
class IBik;
class CSteamAPIContext;
class IReplayHistoryManager;
class ISoundEmitterSystemBase;
enum CPULevel_t;
enum GPULevel_t;
extern IVModelRender* modelrender;
extern IVEngineClient* engine;
extern IVModelRender* modelrender;
extern IVEfx* effects;
extern IVRenderView* render;
extern IVDebugOverlay* debugoverlay;
extern IMaterialSystemStub* materials_stub;
extern IVModelInfoClient* modelinfo;
extern IEngineVGui* enginevgui;
extern ISpatialPartition* partition;
extern IBaseClientDLL* clientdll;
extern IFileSystem* filesystem;
extern IStaticPropMgrClient* staticpropmgr;
extern IShadowMgr* shadowmgr;
extern IEngineSound* enginesound;
extern IEngineTrace* enginetrace;
extern IFileLoggingListener* filelogginglistener;
extern IGameUIFuncs* gameuifuncs;
extern IGameEventManager2* gameeventmanager;
extern IPhysicsGameTrace* physgametrace;
extern CGlobalVarsBase* gpGlobals;
extern IClientTools* clienttools;
extern IInputSystem* inputsystem;
extern ISceneFileCache* scenefilecache;
extern IXboxSystem* xboxsystem;
extern IAvi* avi;
extern IBik* bik;
extern IUploadGameStats* gamestatsuploader;
extern CSteamAPIContext* steamapicontext;
extern ISoundEmitterSystemBase* soundemitterbase;
#ifdef INFESTED_DLL
class IASW_Mission_Chooser;
extern IASW_Mission_Chooser* missionchooser;
#endif
#if defined( REPLAY_ENABLED )
extern IReplayHistoryManager* g_pReplayHistoryManager;
#endif
CPULevel_t GetCPULevel();
CPULevel_t GetActualCPULevel();
GPULevel_t GetGPULevel();
void ConfigureCurrentSystemLevel();
extern bool g_bLevelInitialized;
extern bool g_bTextMode;
extern bool g_bEngineIsHLTV;
bool AddDataChangeEvent(IClientNetworkable* ent, DataUpdateType_t updateType, int* pStoredEvent);
void ClearDataChangedEvent(int iStoredEvent);
void PrecacheMaterial(const char* pMaterialName);
int GetMaterialIndex(const char* pMaterialName);
const char* GetMaterialNameFromIndex(int nIndex);
int PrecacheParticleSystem(const char* pParticleSystemName);
int GetParticleSystemIndex(const char* pParticleSystemName);
const char* GetParticleSystemNameFromIndex(int nIndex);
void PrecacheEffect(const char* pEffectName);
void TrackBoneSetupEnt(C_BaseAnimating* pEnt);
bool IsEngineThreaded();
class CVGuiScreenSizeSplitScreenPlayerGuard
{
public:
CVGuiScreenSizeSplitScreenPlayerGuard(bool bActive, int slot, int nOldSlot);
CVGuiScreenSizeSplitScreenPlayerGuard(bool bActive, C_BaseEntity* pEntity, int nOldSlot);
~CVGuiScreenSizeSplitScreenPlayerGuard();
private:
bool m_bNoRestore;
bool m_bOldSetting;
int m_nOldSize[2];
};
class CSetActiveSplitScreenPlayerGuard : public CVGuiScreenSizeSplitScreenPlayerGuard
{
public:
CSetActiveSplitScreenPlayerGuard(char const* pchContext, int nLine, int slot, int nOldSlot, bool bSetVguiScreenSize);
CSetActiveSplitScreenPlayerGuard(char const* pchContext, int nLine, C_BaseEntity* pEntity, int nOldSlot, bool bSetVguiScreenSize);
~CSetActiveSplitScreenPlayerGuard();
private:
bool m_bChanged;
char const* m_pchContext;
int m_nLine;
int m_nSaveSlot;
bool m_bSaveGetLocalPlayerAllowed;
};
class CHackForGetLocalPlayerAccessAllowedGuard
{
public:
CHackForGetLocalPlayerAccessAllowedGuard(char const* pszContext, bool bOldSlot);
~CHackForGetLocalPlayerAccessAllowedGuard();
private:
bool m_bChanged;
char const* m_pszContext;
bool m_bSaveGetLocalPlayerAllowed;
};
class CVGuiAbsPosSplitScreenPlayerGuard
{
public:
CVGuiAbsPosSplitScreenPlayerGuard(int slot, int nOldSlot, bool bInvert = false);
~CVGuiAbsPosSplitScreenPlayerGuard();
private:
bool m_bNoRestore;
};
int FirstValidSplitScreenSlot();
int NextValidSplitScreenSlot(int i);
bool IsValidSplitScreenSlot(int i);
void IterateRemoteSplitScreenViewSlots_Push(bool bSet);
void IterateRemoteSplitScreenViewSlots_Pop(void);
class C_BasePlayer;
void AddRemoteSplitScreenViewPlayer(C_BasePlayer* pPlayer);
void RemoveRemoteSplitScreenViewPlayer(C_BasePlayer* pPlayer);
C_BasePlayer* GetSplitScreenViewPlayer(int nSlot);
bool IsLocalSplitScreenPlayer(int nSlot);
#if defined( SPLIT_SCREEN_STUBS )
#define VGUI_SCREENSIZE_SPLITSCREEN_GUARD( slot )
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD( slot )
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD_ENT( entity )
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD_VGUI( slot )
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD_ENT_VGUI( entity )
#define HACK_GETLOCALPLAYER_GUARD( desc )
#define VGUI_ABSPOS_SPLITSCREEN_GUARD( slot )
#define VGUI_ABSPOS_SPLITSCREEN_GUARD_INVERT( slot )
#define FOR_EACH_VALID_SPLITSCREEN_PLAYER( iteratorName ) for ( int iteratorName = 0; iteratorName == 0; ++iteratorName )
#define ASSERT_LOCAL_PLAYER_RESOLVABLE()
#define ASSERT_LOCAL_PLAYER_NOT_RESOLVABLE()
#define GET_ACTIVE_SPLITSCREEN_SLOT() ( 0 )
FORCEINLINE uint32 ComputeSplitscreenRenderingFlags(IClientRenderable* pRenderable)
{
return 0xFFFFFFFF;
}
#else
#define VGUI_SCREENSIZE_SPLITSCREEN_GUARD( slot ) CVGuiScreenSizeSplitScreenPlayerGuard s_VGuiSSGuard( slot, engine->GetActiveSplitScreenPlayerSlot() );
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD( slot ) CSetActiveSplitScreenPlayerGuard g_SSGuard( __FILE__, __LINE__, slot, engine->GetActiveSplitScreenPlayerSlot(), false );
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD_ENT( entity ) CSetActiveSplitScreenPlayerGuard g_SSEGuard( __FILE__, __LINE__, entity, engine->GetActiveSplitScreenPlayerSlot(), false );
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD_VGUI( slot ) CSetActiveSplitScreenPlayerGuard g_SSGuardNoVgui( __FILE__, __LINE__, slot, engine->GetActiveSplitScreenPlayerSlot(), true );
#define ACTIVE_SPLITSCREEN_PLAYER_GUARD_ENT_VGUI( entity ) CSetActiveSplitScreenPlayerGuard g_SSEGuardNoVgui( __FILE__, __LINE__, entity, engine->GetActiveSplitScreenPlayerSlot(), true );
#define HACK_GETLOCALPLAYER_GUARD( desc ) CHackForGetLocalPlayerAccessAllowedGuard g_HackGLPGuard( desc, engine->IsLocalPlayerResolvable() );
#define VGUI_ABSPOS_SPLITSCREEN_GUARD( slot ) CVGuiAbsPosSplitScreenPlayerGuard s_VGuiAbsPosGuard( slot, engine->GetActiveSplitScreenPlayerSlot() );
#define VGUI_ABSPOS_SPLITSCREEN_GUARD_INVERT( slot ) CVGuiAbsPosSplitScreenPlayerGuard s_VGuiAbsPosGuard( slot, engine->GetActiveSplitScreenPlayerSlot(), true );
#define FOR_EACH_VALID_SPLITSCREEN_PLAYER( iteratorName ) \
for ( int iteratorName = FirstValidSplitScreenSlot(); \
iteratorName != -1; \
iteratorName = NextValidSplitScreenSlot( iteratorName ) )
#if defined( SS_SHIPPING_ASSERTS )
#define ASSERT_LOCAL_PLAYER_RESOLVABLE() _AssertMsg( engine->IsLocalPlayerResolvable(), _T("Assertion Failed: ") _T("engine->IsLocalPlayerResolvable()"), ((void)0), false )
#else
#define ASSERT_LOCAL_PLAYER_RESOLVABLE() Assert( engine->IsLocalPlayerResolvable() );
#endif
#if defined( SS_SHIPPING_ASSERTS )
#define ASSERT_LOCAL_PLAYER_NOT_RESOLVABLE() _AssertMsg( !engine->IsLocalPlayerResolvable(), _T("Assertion Failed: ") _T("!engine->IsLocalPlayerResolvable()"), ((void)0), false )
#else
#define ASSERT_LOCAL_PLAYER_NOT_RESOLVABLE() Assert( !engine->IsLocalPlayerResolvable() );
#endif
#define GET_ACTIVE_SPLITSCREEN_SLOT() engine->GetActiveSplitScreenPlayerSlot()
FORCEINLINE uint32 ComputeSplitscreenRenderingFlags(IClientRenderable* pRenderable)
{
if (IsSplitScreenSupported())
{
int nFlags = 0;
for (int i = 0; i < MAX_SPLITSCREEN_PLAYERS; ++i)
{
if (pRenderable->ShouldDrawForSplitScreenUser(i))
{
nFlags |= 1 << i;
}
}
return nFlags;
}
return 0xFFFFFFFF;
}
#endif
inline C_BasePlayer* GetSplitScreenViewPlayer(void) { return GetSplitScreenViewPlayer(GET_ACTIVE_SPLITSCREEN_SLOT()); };
inline bool IsLocalSplitScreenPlayer(void) { return IsLocalSplitScreenPlayer(GET_ACTIVE_SPLITSCREEN_SLOT()); };
int XBX_GetActiveUserId();
#define XBX_GetPrimaryUserId() _Use_XBX_GetActiveUserId_Instead
#endif