//========= Copyright Valve Corporation, All rights reserved. ============//
//
//  
//
//=============================================================================

#ifndef TF_FX_H
#define TF_FX_H
#ifdef _WIN32
#pragma once
#endif

#include "particle_parse.h"
#include "networkstringtabledefs.h"
void TE_FireBullets( int iPlayerIndex, const Vector &vOrigin, const QAngle &vAngles, int iWeaponID, int	iMode, int iSeed, float flSpread, bool bCritical );

// Historically -1 was used for an nEntIndex when we wanted the client to reconstruct
// INVALID_EHANDLE_INDEX, however that forced us to transmit nEntIndex as signed which
// meant that half of the edict values triggered asserts and did not transmit correctly.
// Now we use 2047 as the magic value. This results in the same bit patterns being
// transmitted, but no asserts, and it makes it more explicit that we have stolen one
// of the valid nEntIndex values for a special purpose.
const int kInvalidEHandleExplosion = MAX_EDICTS - 1;
const int kInvalidEHandleParticleEffect = MAX_EDICTS - 1;
void TE_TFExplosion( IRecipientFilter &filter, float flDelay, const Vector &vecOrigin, const Vector &vecNormal, int iWeaponID, int nEntIndex, int nDefID = -1, int nSound = SPECIAL1, int iCustomParticle = INVALID_STRING_INDEX );
void TE_TFParticleEffect( IRecipientFilter &filter, float flDelay, const char *pszParticleName, ParticleAttachment_t iAttachType, CBaseEntity *pEntity, const char *pszAttachmentName, bool bResetAllParticlesOnEntity = false );
void TE_TFParticleEffect( IRecipientFilter &filter, float flDelay, const char *pszParticleName, ParticleAttachment_t iAttachType, CBaseEntity *pEntity = NULL, int iAttachmentPoint = -1, bool bResetAllParticlesOnEntity = false );
void TE_TFParticleEffect( IRecipientFilter &filter, float flDelay, const char *pszParticleName, Vector vecOrigin, QAngle vecAngles, CBaseEntity *pEntity = NULL, ParticleAttachment_t iAttachType = PATTACH_CUSTOMORIGIN );
void TE_TFParticleEffect( IRecipientFilter &filter, float flDelay, const char *pszParticleName, Vector vecOrigin, Vector vecStart, QAngle vecAngles, CBaseEntity *pEntity = NULL );
void TE_TFParticleEffect( IRecipientFilter &filter, float flDelay, int iEffectIndex, Vector vecOrigin, Vector vecStart, QAngle vecAngles, CBaseEntity *pEntity = NULL );

void TE_TFParticleEffectComplex
(
	IRecipientFilter &filter,
	float flDelay,
	const char *pszParticleName,
	Vector vecOrigin,
	QAngle vecAngles,
	te_tf_particle_effects_colors_t *pOptionalColors = NULL,
	te_tf_particle_effects_control_point_t *pOptionalControlPoint1 = NULL,
	CBaseEntity *pEntity = NULL,
	ParticleAttachment_t eAttachType = PATTACH_CUSTOMORIGIN,
	Vector vecStart = vec3_origin
);

#endif	// TF_FX_H