⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectutilities.h

📁 Blood 2全套源码
💻 H
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : ObjectUtilities.h
//
// PURPOSE : Utility functions
//
// CREATED : 2/4/98
//
// ----------------------------------------------------------------------- //

#ifndef __OBJECTUTILITIES_H__
#define __OBJECTUTILITIES_H__

#include "cpp_engineobjects_de.h"
#include "cpp_server_de.h"
#include "generic_msg_de.h"
#include "destructable.h"
#include "SharedDefs.h"

#define	IGNORE_CHARACTER	0x00000001
#define	IGNORE_LIQUID		0x00000002
#define	IGNORE_DESTRUCTABLE	0x00000004
#define IGNORE_GLASS		0x00000008

HSOUNDDE PlaySoundFromObject( HOBJECT hObject, char *pSoundName, DFLOAT fRadius, 
						  DBYTE nSoundPriority, DBOOL bLoop = DFALSE, DBOOL bHandle = DFALSE, DBOOL bTime = DFALSE, DBYTE nVolume = 100,
						  DBOOL bStreaming = DFALSE, DBOOL bInstant = DFALSE );
HSOUNDDE PlaySoundFromPos( DVector *vPos, char *pSoundName, DFLOAT fRadius, 
						  DBYTE nSoundPriority, DBOOL bLoop = DFALSE, DBOOL bHandle = DFALSE, DBOOL bTime = DFALSE, DBYTE nVolume = 100,
						  DBOOL bStreaming = DFALSE);

HSOUNDDE PlaySoundLocal( char *pSoundName, DBYTE nSoundPriority, 
						DBOOL bLoop = DFALSE, DBOOL bHandle = DFALSE, DBOOL bStream = DFALSE, DBYTE nVolume = 100 );


void CreateScorchMark(DVector *pvPos, DFLOAT fMinLightRadius, DFLOAT fMaxLightRadius, 
					  DFLOAT fRampUpTime, DFLOAT fRampDownTime, DFLOAT fRadiusMinTime, 
					  DFLOAT fRadiusMaxTime, DFLOAT fRed, DFLOAT fGreen, DFLOAT fBlue);

SurfaceType GetSurfaceType(HOBJECT hObject, HPOLY hPoly);
void TiltVectorToPlane(DVector *pVec, DVector *pNormal);

void SendSoundTrigger(HOBJECT hSender, int nId, DVector vPos, DFLOAT fRadius);

DBOOL MoveObjectToGround(HOBJECT hObject);

struct GlobalFilterFnData
{	
	GlobalFilterFnData( ) { m_dwFlags = 0; m_nIgnoreObjects = 0; m_hIgnoreObjects = DNULL; }

	DDWORD m_dwFlags;				// Filter flags
	DDWORD m_nIgnoreObjects;		// Number of objects in ingnore list
	HOBJECT *m_hIgnoreObjects;		// Objects to ignore
};

DBOOL GlobalFilterFn(HOBJECT hObj, void *pUserData);

DBOOL IsRandomChance(int nPercent);
int   GetRandom(int lo, int hi);


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	IsPlayer
//
//	PURPOSE:	Checks to see if an object is a CPlayerObj.
//
// ----------------------------------------------------------------------- //

inline DBOOL IsPlayer( HOBJECT hObject )
{
	if(hObject == DNULL)	return DFALSE;

	HCLASS hPlayerTest = g_pServerDE->GetClass( "CPlayerObj" );
	HCLASS hClass = g_pServerDE->GetObjectClass( hObject );
	return ( g_pServerDE->IsKindOf( hClass, hPlayerTest ));
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	IsBaseCharacter
//
//	PURPOSE:	Checks to see if an object is a CBaseCharacter
//
// ----------------------------------------------------------------------- //

inline DBOOL IsBaseCharacter( HOBJECT hObject )
{
	if(hObject == DNULL)	return DFALSE;

	HCLASS hCharacterTest = g_pServerDE->GetClass( "CBaseCharacter" );
	HCLASS hClass = g_pServerDE->GetObjectClass( hObject );
	return ( g_pServerDE->IsKindOf( hClass, hCharacterTest ));
}

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	IsAICharacter
//
//	PURPOSE:	Checks to see if an object is a AI_Mgr
//
// ----------------------------------------------------------------------- //

inline DBOOL IsAICharacter( HOBJECT hObject )
{
	if(hObject == DNULL)	return DFALSE;

	HCLASS hCharacterTest = g_pServerDE->GetClass( "AI_Mgr" );
	HCLASS hClass = g_pServerDE->GetObjectClass( hObject );
	return ( g_pServerDE->IsKindOf( hClass, hCharacterTest ));
}

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	IsCorpse
//
//	PURPOSE:	Checks to see if an object is a CCorpse
//
// ----------------------------------------------------------------------- //

inline DBOOL IsCorpse( HOBJECT hObject )
{
	if(hObject == DNULL)	return DFALSE;

	HCLASS hCorpseTest = g_pServerDE->GetClass( "CCorpse" );
	HCLASS hClass = g_pServerDE->GetObjectClass( hObject );
	return ( g_pServerDE->IsKindOf( hClass, hCorpseTest ));
}

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	IsBrushObject
//
//	PURPOSE:	Checks to see if an object is a CDestructableBrush
//
// ----------------------------------------------------------------------- //

inline DBOOL IsBrushObject( HCLASS hObjClass )
{
	HCLASS hBrushTest = g_pServerDE->GetClass( "CDestructableBrush" );
	return ( g_pServerDE->IsKindOf( hObjClass, hBrushTest ));
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	IsDoor
//
//	PURPOSE:	Checks to see if an object is a Door
//
// ----------------------------------------------------------------------- //

inline DBOOL IsDoor( HCLASS hObjClass )
{
	HCLASS hDoorClass = g_pServerDE->GetClass( "Door" );
	return ( g_pServerDE->IsKindOf( hObjClass, hDoorClass ));
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	IsProjectile
//
//	PURPOSE:	Checks to see if an object is a projectile
//
// ----------------------------------------------------------------------- //

inline DBOOL IsProjectile( HCLASS hObjClass )
{
	HCLASS hProjClass = g_pServerDE->GetClass( "CProjectile" );
	return ( g_pServerDE->IsKindOf( hObjClass, hProjClass ));
}


void DamageObject(HOBJECT hResponsible, LPBASECLASS pDamager, 
						 HOBJECT hDamagee, DFLOAT fDamage, DVector vDir, DVector vPos,DBYTE nDamageType);
void DamageObjectsInRadius(HOBJECT hResponsible, LPBASECLASS pDamager,
								  DVector vOrigin, DFLOAT fRadius,
								  DFLOAT fDamage, DBYTE nDamageType = DAMAGE_TYPE_NORMAL);


inline DFLOAT GetGameConVarValueFloat(char *pVar)
{
	if (!pVar || !g_pServerDE) return 0;

	HCONVAR hConVar = g_pServerDE->GetGameConVar(pVar);
	DFLOAT fVal = 0.0f;
	if (hConVar) fVal = g_pServerDE->GetVarValueFloat(hConVar);
	return fVal;
}

inline DBOOL IsRandomChance(int percent)
{
	return((rand() % 100) < percent);
}

inline int GetRandom(int lo, int hi)
{
	if ((hi - lo + 1) == 0)		// check for divide-by-zero case
	{
		if (rand() & 1) return(lo);
		else return(hi);
	}

	return((rand() % (hi - lo + 1)) + lo);
}


#endif // __OBJECTUTILITIES_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -