cs16-client-legacy/dlls/effects.h

219 lines
6.5 KiB
C++

/***
*
* 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.
*
****/
#ifndef 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 Restart(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 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);
public:
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;
}
public:
void EXPORT AnimateThink(void);
void EXPORT ExpandThink(void);
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;
}
public:
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; }
public:
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);
public:
Vector Center(void){ return (GetStartPos() + GetEndPos()) * 0.5; }
public:
inline int GetTexture(void) { return pev->modelindex; }
inline int GetWidth(void) { return (int)(pev->scale); }
inline int GetNoise(void) { return pev->body; }
inline int GetBrightness(void) { return (int)(pev->renderamt); }
inline int GetFrame(void) { return (int)(pev->frame); }
inline int GetScrollRate(void){ return (int)(pev->animtime); }
public:
void EXPORT TriggerTouch(CBaseEntity *pOther);
void RelinkBeam(void);
void DoSparks(const Vector &start, const Vector &end);
CBaseEntity *RandomTargetname(const char *szName);
void BeamDamage(TraceResult *ptr);
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);
public:
static CBeam *BeamCreate(const char *pSpriteName, int width);
public:
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
#define SF_MESSAGE_ALL 0x0002
class CLaser : public CBeam
{
public:
void Spawn(void);
void Precache(void);
void KeyValue(KeyValueData *pkvd);
void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
int Save(CSave &save);
int Restore(CRestore &restore);
public:
void TurnOn(void);
void TurnOff(void);
int IsOn(void);
public:
void FireAtPoint(TraceResult &point);
void EXPORT StrikeThink(void);
public:
static TYPEDESCRIPTION m_SaveData[];
public:
CSprite *m_pSprite;
int m_iszSpriteName;
Vector m_firePosition;
};
#endif