|
|
|
/***
|
|
|
|
*
|
|
|
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
|
|
|
*
|
|
|
|
* This product contains software technology licensed from Id
|
|
|
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
|
|
|
* All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Use, distribution, and modification of this source code and/or resulting
|
|
|
|
* object code is restricted to non-commercial enhancements to products from
|
|
|
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
|
|
|
* without written permission from Valve LLC.
|
|
|
|
*
|
|
|
|
****/
|
|
|
|
#pragma once
|
|
|
|
#if !defined(EFFECTS_H)
|
|
|
|
#define EFFECTS_H
|
|
|
|
|
|
|
|
#define SF_BEAM_STARTON 0x0001
|
|
|
|
#define SF_BEAM_TOGGLE 0x0002
|
|
|
|
#define SF_BEAM_RANDOM 0x0004
|
|
|
|
#define SF_BEAM_RING 0x0008
|
|
|
|
#define SF_BEAM_SPARKSTART 0x0010
|
|
|
|
#define SF_BEAM_SPARKEND 0x0020
|
|
|
|
#define SF_BEAM_DECALS 0x0040
|
|
|
|
#define SF_BEAM_SHADEIN 0x0080
|
|
|
|
#define SF_BEAM_SHADEOUT 0x0100
|
|
|
|
#define SF_BEAM_TEMPORARY 0x8000
|
|
|
|
|
|
|
|
#define SF_SPRITE_STARTON 0x0001
|
|
|
|
#define SF_SPRITE_ONCE 0x0002
|
|
|
|
#define SF_SPRITE_TEMPORARY 0x8000
|
|
|
|
|
|
|
|
class CSprite : public CPointEntity
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void Spawn( void );
|
|
|
|
void Precache( void );
|
|
|
|
|
|
|
|
int ObjectCaps( void )
|
|
|
|
{
|
|
|
|
int flags = 0;
|
|
|
|
if( pev->spawnflags & SF_SPRITE_TEMPORARY )
|
|
|
|
flags = FCAP_DONT_SAVE;
|
|
|
|
return ( CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION ) | flags;
|
|
|
|
}
|
|
|
|
void EXPORT AnimateThink( void );
|
|
|
|
void EXPORT ExpandThink( void );
|
|
|
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
|
|
|
void Animate( float frames );
|
|
|
|
void Expand( float scaleSpeed, float fadeSpeed );
|
|
|
|
void SpriteInit( const char *pSpriteName, const Vector &origin );
|
|
|
|
|
|
|
|
inline void SetAttachment( edict_t *pEntity, int attachment )
|
|
|
|
{
|
|
|
|
if( pEntity )
|
|
|
|
{
|
|
|
|
pev->skin = ENTINDEX( pEntity );
|
|
|
|
pev->body = attachment;
|
|
|
|
pev->aiment = pEntity;
|
|
|
|
pev->movetype = MOVETYPE_FOLLOW;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void TurnOff( void );
|
|
|
|
void TurnOn( void );
|
|
|
|
inline float Frames( void )
|
|
|
|
{
|
|
|
|
return m_maxFrame;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetTransparency( int rendermode, int r, int g, int b, int a, int fx )
|
|
|
|
{
|
|
|
|
pev->rendermode = rendermode;
|
|
|
|
pev->rendercolor.x = r;
|
|
|
|
pev->rendercolor.y = g;
|
|
|
|
pev->rendercolor.z = b;
|
|
|
|
pev->renderamt = a;
|
|
|
|
pev->renderfx = fx;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetTexture( int spriteIndex )
|
|
|
|
{
|
|
|
|
pev->modelindex = spriteIndex;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetScale( float scale )
|
|
|
|
{
|
|
|
|
pev->scale = scale;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetColor( int r, int g, int b )
|
|
|
|
{
|
|
|
|
pev->rendercolor.x = r;
|
|
|
|
pev->rendercolor.y = g;
|
|
|
|
pev->rendercolor.z = b;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetBrightness( int brightness )
|
|
|
|
{
|
|
|
|
pev->renderamt = brightness;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void AnimateAndDie( float framerate )
|
|
|
|
{
|
|
|
|
SetThink( &CSprite::AnimateUntilDead );
|
|
|
|
pev->framerate = framerate;
|
|
|
|
pev->dmgtime = gpGlobals->time + ( m_maxFrame / framerate );
|
|
|
|
pev->nextthink = gpGlobals->time;
|
|
|
|
}
|
|
|
|
|
|
|
|
void EXPORT AnimateUntilDead( void );
|
|
|
|
|
|
|
|
virtual int Save( CSave &save );
|
|
|
|
virtual int Restore( CRestore &restore );
|
|
|
|
static TYPEDESCRIPTION m_SaveData[];
|
|
|
|
static CSprite *SpriteCreate( const char *pSpriteName, const Vector &origin, BOOL animate );
|
|
|
|
|
|
|
|
private:
|
|
|
|
float m_lastTime;
|
|
|
|
float m_maxFrame;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CBeam : public CBaseEntity
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void Spawn( void );
|
|
|
|
void Precache( void );
|
|
|
|
int ObjectCaps( void )
|
|
|
|
{
|
|
|
|
int flags = 0;
|
|
|
|
if( pev->spawnflags & SF_BEAM_TEMPORARY )
|
|
|
|
flags = FCAP_DONT_SAVE;
|
|
|
|
return ( CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION ) | flags;
|
|
|
|
}
|
|
|
|
|
|
|
|
void EXPORT TriggerTouch( CBaseEntity *pOther );
|
|
|
|
|
|
|
|
// These functions are here to show the way beams are encoded as entities.
|
|
|
|
// Encoding beams as entities simplifies their management in the client/server architecture
|
|
|
|
inline void SetType( int type )
|
|
|
|
{
|
|
|
|
pev->rendermode = ( pev->rendermode & 0xF0 ) | ( type & 0x0F );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetFlags( int flags )
|
|
|
|
{
|
|
|
|
pev->rendermode = ( pev->rendermode & 0x0F ) | ( flags & 0xF0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetStartPos( const Vector& pos )
|
|
|
|
{
|
|
|
|
pev->origin = pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetEndPos( const Vector& pos )
|
|
|
|
{
|
|
|
|
pev->angles = pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetStartEntity( int entityIndex );
|
|
|
|
void SetEndEntity( int entityIndex );
|
|
|
|
|
|
|
|
inline void SetStartAttachment( int attachment )
|
|
|
|
{
|
|
|
|
pev->sequence = ( pev->sequence & 0x0FFF ) | ( ( attachment & 0xF ) << 12 );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetEndAttachment( int attachment )
|
|
|
|
{
|
|
|
|
pev->skin = ( pev->skin & 0x0FFF ) | ( ( attachment & 0xF ) << 12 );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetTexture( int spriteIndex )
|
|
|
|
{
|
|
|
|
pev->modelindex = spriteIndex;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetWidth( int width )
|
|
|
|
{
|
|
|
|
pev->scale = width;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetNoise( int amplitude )
|
|
|
|
{
|
|
|
|
pev->body = amplitude;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetColor( int r, int g, int b )
|
|
|
|
{
|
|
|
|
pev->rendercolor.x = r;
|
|
|
|
pev->rendercolor.y = g;
|
|
|
|
pev->rendercolor.z = b;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetBrightness( int brightness )
|
|
|
|
{
|
|
|
|
pev->renderamt = brightness;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetFrame( float frame )
|
|
|
|
{
|
|
|
|
pev->frame = frame;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetScrollRate( int speed )
|
|
|
|
{
|
|
|
|
pev->animtime = speed;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetType( void )
|
|
|
|
{
|
|
|
|
return pev->rendermode & 0x0F;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetFlags( void )
|
|
|
|
{
|
|
|
|
return pev->rendermode & 0xF0;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetStartEntity( void )
|
|
|
|
{
|
|
|
|
return pev->sequence & 0xFFF;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetEndEntity( void )
|
|
|
|
{
|
|
|
|
return pev->skin & 0xFFF;
|
|
|
|
}
|
|
|
|
|
|
|
|
const Vector &GetStartPos( void );
|
|
|
|
const Vector &GetEndPos( void );
|
|
|
|
|
|
|
|
Vector Center( void ) { return (GetStartPos() + GetEndPos()) * 0.5; }; // center point of beam
|
|
|
|
|
|
|
|
inline int GetTexture( void )
|
|
|
|
{
|
|
|
|
return pev->modelindex;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetWidth( void )
|
|
|
|
{
|
|
|
|
return (int)pev->scale;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetNoise( void )
|
|
|
|
{
|
|
|
|
return pev->body;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* inline void GetColor( int r, int g, int b )
|
|
|
|
{
|
|
|
|
pev->rendercolor.x = r;
|
|
|
|
pev->rendercolor.y = g;
|
|
|
|
pev->rendercolor.z = b;
|
|
|
|
}*/
|
|
|
|
|
|
|
|
inline int GetBrightness( void )
|
|
|
|
{
|
|
|
|
return (int)pev->renderamt;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetFrame( void )
|
|
|
|
{
|
|
|
|
return (int)pev->frame;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int GetScrollRate( void )
|
|
|
|
{
|
|
|
|
return (int)pev->animtime;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Call after you change start/end positions
|
|
|
|
void RelinkBeam( void );
|
|
|
|
//void SetObjectCollisionBox( void );
|
|
|
|
|
|
|
|
void DoSparks( const Vector &start, const Vector &end );
|
|
|
|
CBaseEntity *RandomTargetname( const char *szName );
|
|
|
|
void BeamDamage( TraceResult *ptr );
|
|
|
|
// Init after BeamCreate()
|
|
|
|
void BeamInit( const char *pSpriteName, int width );
|
|
|
|
void PointsInit( const Vector &start, const Vector &end );
|
|
|
|
void PointEntInit( const Vector &start, int endIndex );
|
|
|
|
void EntsInit( int startIndex, int endIndex );
|
|
|
|
void HoseInit( const Vector &start, const Vector &direction );
|
|
|
|
|
|
|
|
static CBeam *BeamCreate( const char *pSpriteName, int width );
|
|
|
|
|
|
|
|
inline void LiveForTime( float time )
|
|
|
|
{
|
|
|
|
SetThink( &CBaseEntity::SUB_Remove );
|
|
|
|
pev->nextthink = gpGlobals->time + time;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void BeamDamageInstant( TraceResult *ptr, float damage )
|
|
|
|
{
|
|
|
|
pev->dmg = damage;
|
|
|
|
pev->dmgtime = gpGlobals->time - 1;
|
|
|
|
BeamDamage( ptr );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
#define SF_MESSAGE_ONCE 0x0001 // Fade in, not out
|
|
|
|
#define SF_MESSAGE_ALL 0x0002 // Send to all clients
|
|
|
|
|
|
|
|
class CLaser : public CBeam
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void Spawn( void );
|
|
|
|
void Precache( void );
|
|
|
|
void KeyValue( KeyValueData *pkvd );
|
|
|
|
|
|
|
|
void TurnOn( void );
|
|
|
|
void TurnOff( void );
|
|
|
|
int IsOn( void );
|
|
|
|
|
|
|
|
void FireAtPoint( TraceResult &point );
|
|
|
|
|
|
|
|
void EXPORT StrikeThink( void );
|
|
|
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
|
|
|
virtual int Save( CSave &save );
|
|
|
|
virtual int Restore( CRestore &restore );
|
|
|
|
static TYPEDESCRIPTION m_SaveData[];
|
|
|
|
|
|
|
|
CSprite *m_pSprite;
|
|
|
|
string_t m_iszSpriteName;
|
|
|
|
Vector m_firePosition;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Screen shake
|
|
|
|
class CShake : public CPointEntity
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void Spawn(void);
|
|
|
|
void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
void KeyValue(KeyValueData *pkvd);
|
|
|
|
|
|
|
|
inline float Amplitude(void) { return pev->scale; }
|
|
|
|
inline float Frequency(void) { return pev->dmg_save; }
|
|
|
|
inline float Duration(void) { return pev->dmg_take; }
|
|
|
|
inline float Radius(void) { return pev->dmg; }
|
|
|
|
|
|
|
|
inline void SetAmplitude(float amplitude) { pev->scale = amplitude; }
|
|
|
|
inline void SetFrequency(float frequency) { pev->dmg_save = frequency; }
|
|
|
|
inline void SetDuration(float duration) { pev->dmg_take = duration; }
|
|
|
|
inline void SetRadius(float radius) { pev->dmg = radius; }
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
|
|
|
|
class CGib;
|
|
|
|
|
|
|
|
class CGibShooter : public CBaseDelay
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void Spawn(void);
|
|
|
|
void Precache(void);
|
|
|
|
void KeyValue(KeyValueData *pkvd);
|
|
|
|
void EXPORT ShootThink(void);
|
|
|
|
void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
|
|
|
|
virtual CGib *CreateGib(void);
|
|
|
|
|
|
|
|
virtual int Save(CSave &save);
|
|
|
|
virtual int Restore(CRestore &restore);
|
|
|
|
static TYPEDESCRIPTION m_SaveData[];
|
|
|
|
|
|
|
|
int m_iGibs;
|
|
|
|
int m_iGibCapacity;
|
|
|
|
int m_iGibMaterial;
|
|
|
|
int m_iGibModelIndex;
|
|
|
|
float m_flGibVelocity;
|
|
|
|
float m_flVariance;
|
|
|
|
float m_flGibLife;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CEnvShooter : public CGibShooter
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void Precache(void);
|
|
|
|
void KeyValue(KeyValueData *pkvd);
|
|
|
|
|
|
|
|
CGib *CreateGib(void);
|
|
|
|
};
|
|
|
|
#endif //EFFECTS_H
|