You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
7.3 KiB
181 lines
7.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $Workfile: $ |
|
// $Date: $ |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
#if !defined( UTIL_H ) |
|
#define UTIL_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include <soundflags.h> |
|
#include "mathlib/vector.h" |
|
#include <shareddefs.h> |
|
|
|
#include "shake.h" |
|
#include "bitmap/imageformat.h" |
|
#include "ispatialpartition.h" |
|
#include "materialsystem/MaterialSystemUtil.h" |
|
|
|
class Vector; |
|
class QAngle; |
|
class IMaterial; |
|
class ITexture; |
|
class IClientEntity; |
|
class CHudTexture; |
|
class CGameTrace; |
|
class C_BaseEntity; |
|
|
|
struct Ray_t; |
|
struct client_textmessage_t; |
|
typedef CGameTrace trace_t; |
|
|
|
namespace vgui |
|
{ |
|
typedef unsigned long HFont; |
|
}; |
|
|
|
|
|
|
|
extern bool g_MakingDevShots; |
|
|
|
// ScreenHeight returns the height of the screen, in pixels |
|
int ScreenHeight( void ); |
|
// ScreenWidth returns the width of the screen, in pixels |
|
int ScreenWidth( void ); |
|
|
|
#define XRES(x) ( x * ( ( float )ScreenWidth() / 640.0 ) ) |
|
#define YRES(y) ( y * ( ( float )ScreenHeight() / 480.0 ) ) |
|
|
|
int UTIL_ComputeStringWidth( vgui::HFont& font, const char *str ); |
|
int UTIL_ComputeStringWidth( vgui::HFont& font, const wchar_t *str ); |
|
float UTIL_AngleDiff( float destAngle, float srcAngle ); |
|
void UTIL_Bubbles( const Vector& mins, const Vector& maxs, int count ); |
|
void UTIL_Smoke( const Vector &origin, const float scale, const float framerate ); |
|
void UTIL_ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName = NULL ); |
|
int UTIL_PrecacheDecal( const char *name, bool preload = false ); |
|
void UTIL_EmitAmbientSound( C_BaseEntity *entity, const Vector &vecOrigin, const char *samp, float vol, soundlevel_t soundlevel, int fFlags, int pitch ); |
|
void UTIL_SetOrigin( C_BaseEntity *entity, const Vector &vecOrigin ); |
|
void UTIL_ScreenShake( const Vector ¢er, float amplitude, float frequency, float duration, float radius, ShakeCommand_t eCommand, bool bAirShake=false ); |
|
byte *UTIL_LoadFileForMe( const char *filename, int *pLength ); |
|
void UTIL_FreeFile( byte *buffer ); |
|
void UTIL_MakeSafeName( const char *oldName, OUT_Z_CAP(newNameBufSize) char *newName, int newNameBufSize ); ///< Cleans up player names for putting in vgui controls (cleaned names can be up to original*2+1 in length) |
|
const char *UTIL_SafeName( const char *oldName ); ///< Wraps UTIL_MakeSafeName, and returns a static buffer |
|
void UTIL_ReplaceKeyBindings( const wchar_t *inbuf, int inbufsizebytes, OUT_Z_BYTECAP(outbufsizebytes) wchar_t *outbuf, int outbufsizebytes ); |
|
|
|
// Fade out an entity based on distance fades |
|
unsigned char UTIL_ComputeEntityFade( C_BaseEntity *pEntity, float flMinDist, float flMaxDist, float flFadeScale ); |
|
|
|
client_textmessage_t *TextMessageGet( const char *pName ); |
|
|
|
char *VarArgs( PRINTF_FORMAT_STRING const char *format, ... ); |
|
|
|
|
|
// Get the entity the local player is spectating (can be a player or a ragdoll entity). |
|
int GetSpectatorTarget(); |
|
int GetSpectatorMode( void ); |
|
bool IsPlayerIndex( int index ); |
|
int GetLocalPlayerIndex( void ); |
|
int GetLocalPlayerVisionFilterFlags( bool bWeaponsCheck = false ); |
|
bool IsLocalPlayerUsingVisionFilterFlags( int nFlags, bool bWeaponsCheck = false ); |
|
int GetLocalPlayerTeam( void ); |
|
bool IsLocalPlayerSpectator( void ); |
|
void NormalizeAngles( QAngle& angles ); |
|
void InterpolateAngles( const QAngle& start, const QAngle& end, QAngle& output, float frac ); |
|
void InterpolateVector( float frac, const Vector& src, const Vector& dest, Vector& output ); |
|
|
|
const char *nexttoken(char *token, const char *str, char sep); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Base light indices to avoid index collision |
|
//----------------------------------------------------------------------------- |
|
|
|
enum |
|
{ |
|
LIGHT_INDEX_TE_DYNAMIC = 0x10000000, |
|
LIGHT_INDEX_PLAYER_BRIGHT = 0x20000000, |
|
LIGHT_INDEX_MUZZLEFLASH = 0x40000000, |
|
}; |
|
|
|
void UTIL_PrecacheOther( const char *szClassname ); |
|
|
|
void UTIL_SetTrace(trace_t& tr, const Ray_t& ray, C_BaseEntity *edict, float fraction, int hitgroup, unsigned int contents, const Vector& normal, float intercept ); |
|
|
|
bool GetVectorInScreenSpace( Vector pos, int& iX, int& iY, Vector *vecOffset = NULL ); |
|
bool GetVectorInHudSpace( Vector pos, int& iX, int& iY, Vector *vecOffset = NULL ); |
|
bool GetTargetInScreenSpace( C_BaseEntity *pTargetEntity, int& iX, int& iY, Vector *vecOffset = NULL ); |
|
bool GetTargetInHudSpace( C_BaseEntity *pTargetEntity, int& iX, int& iY, Vector *vecOffset = NULL ); |
|
|
|
// prints messages through the HUD (stub in client .dll right now ) |
|
class C_BasePlayer; |
|
void ClientPrint( C_BasePlayer *player, int msg_dest, const char *msg_name, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL ); |
|
|
|
// Pass in an array of pointers and an array size, it fills the array and returns the number inserted |
|
int UTIL_EntitiesInBox( C_BaseEntity **pList, int listMax, const Vector &mins, const Vector &maxs, int flagMask, int partitionMask = PARTITION_CLIENT_NON_STATIC_EDICTS ); |
|
int UTIL_EntitiesInSphere( C_BaseEntity **pList, int listMax, const Vector ¢er, float radius, int flagMask, int partitionMask = PARTITION_CLIENT_NON_STATIC_EDICTS ); |
|
int UTIL_EntitiesAlongRay( C_BaseEntity **pList, int listMax, const Ray_t &ray, int flagMask, int partitionMask = PARTITION_CLIENT_NON_STATIC_EDICTS ); |
|
|
|
// make this a fixed size so it just sits on the stack |
|
#define MAX_SPHERE_QUERY 256 |
|
class CEntitySphereQuery |
|
{ |
|
public: |
|
// currently this builds the list in the constructor |
|
// UNDONE: make an iterative query of ISpatialPartition so we could |
|
// make queries like this optimal |
|
CEntitySphereQuery( const Vector ¢er, float radius, int flagMask=0, int partitionMask = PARTITION_CLIENT_NON_STATIC_EDICTS ); |
|
C_BaseEntity *GetCurrentEntity(); |
|
inline void NextEntity() { m_listIndex++; } |
|
|
|
private: |
|
int m_listIndex; |
|
int m_listCount; |
|
C_BaseEntity *m_pList[MAX_SPHERE_QUERY]; |
|
}; |
|
|
|
C_BaseEntity *CreateEntityByName( const char *className ); |
|
// creates an entity by name, and ensure it's correctness |
|
// does not spawn the entity |
|
// use the CREATE_ENTITY() macro which wraps this, instead of using it directly |
|
template< class T > |
|
T *_CreateEntity( T *newClass, const char *className ) |
|
{ |
|
T *newEnt = dynamic_cast<T*>( CreateEntityByName(className) ); |
|
if ( !newEnt ) |
|
{ |
|
Warning( "classname %s used to create wrong class type\n", className ); |
|
Assert(0); |
|
} |
|
|
|
return newEnt; |
|
} |
|
|
|
#define CREATE_ENTITY( newClass, className ) _CreateEntity( (newClass*)NULL, className ) |
|
#define CREATE_UNSAVED_ENTITY( newClass, className ) _CreateEntityTemplate( (newClass*)NULL, className ) |
|
|
|
// Misc useful |
|
inline bool FStrEq(const char *sz1, const char *sz2) |
|
{ |
|
return (sz1 == sz2 || V_stricmp(sz1, sz2) == 0); |
|
} |
|
|
|
// Given a vector, clamps the scalar axes to MAX_COORD_FLOAT ranges from worldsize.h |
|
void UTIL_BoundToWorldSize( Vector *pVecPos ); |
|
|
|
// Increments the passed key for the current map, eg "viewed" if TF holds the number of times the player has |
|
// viewed the intro movie for this map |
|
void UTIL_IncrementMapKey( const char *pszCustomKey ); |
|
|
|
// Gets the value of the passed key for the current map, eg "viewed" for number of times the player has viewed |
|
// the intro movie for this map |
|
int UTIL_GetMapKeyCount( const char *pszCustomKey ); |
|
|
|
// Returns true if the user has loaded any maps, false otherwise. |
|
bool UTIL_HasLoadedAnyMap(); |
|
|
|
#endif // !UTIL_H
|
|
|