127 lines
3.7 KiB
C++
127 lines
3.7 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================//
|
|
|
|
#ifndef SPRITETRAIL_H
|
|
#define SPRITETRAIL_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "Sprite.h"
|
|
|
|
#if defined(CLIENT_DLL)
|
|
#define CSpriteTrail C_SpriteTrail
|
|
#endif
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Sprite trail
|
|
//-----------------------------------------------------------------------------
|
|
struct TrailPoint_t {
|
|
DECLARE_SIMPLE_DATADESC();
|
|
|
|
Vector m_vecScreenPos;
|
|
float m_flDieTime;
|
|
float m_flTexCoord;
|
|
float m_flWidthVariance;
|
|
};
|
|
|
|
class CSpriteTrail : public CSprite {
|
|
DECLARE_CLASS(CSpriteTrail, CSprite);
|
|
DECLARE_DATADESC();
|
|
DECLARE_NETWORKCLASS();
|
|
DECLARE_PREDICTABLE();
|
|
|
|
public:
|
|
CSpriteTrail(void);
|
|
|
|
// Sets parameters of the sprite trail
|
|
void SetLifeTime(float time);
|
|
void SetStartWidth(float flStartWidth);
|
|
void SetEndWidth(float flEndWidth);
|
|
void SetStartWidthVariance(float flStartWidthVariance);
|
|
void SetTextureResolution(float flTexelsPerInch);
|
|
void SetMinFadeLength(float flMinFadeLength);
|
|
void SetSkybox(const Vector &vecSkyboxOrigin, float flSkyboxScale);
|
|
|
|
// Is the trail in the skybox?
|
|
bool IsInSkybox() const;
|
|
void Spawn(void);
|
|
void Precache(void);
|
|
void SetTransmit(bool bTransmit = true) {
|
|
m_bDrawForMoveParent = bTransmit;
|
|
}
|
|
|
|
#if defined(CLIENT_DLL)
|
|
// Client only code
|
|
virtual int DrawModel(int flags);
|
|
virtual const Vector &GetRenderOrigin(void);
|
|
virtual const QAngle &GetRenderAngles(void);
|
|
|
|
// On data update
|
|
virtual void OnPreDataChanged(DataUpdateType_t updateType);
|
|
virtual void OnDataChanged(DataUpdateType_t updateType);
|
|
virtual void GetRenderBounds(Vector &mins, Vector &maxs);
|
|
virtual void ClientThink();
|
|
|
|
virtual bool ValidateEntityAttachedToPlayer(bool &bShouldRetry);
|
|
|
|
#else
|
|
// Server only code
|
|
|
|
virtual int ShouldTransmit(const CCheckTransmitInfo *pInfo);
|
|
static CSpriteTrail *SpriteTrailCreate(const char *pSpriteName,
|
|
const Vector &origin, bool animate);
|
|
|
|
#endif
|
|
|
|
private:
|
|
#if defined(CLIENT_DLL)
|
|
enum {
|
|
// NOTE: # of points max must be a power of two!
|
|
MAX_SPRITE_TRAIL_POINTS = 256,
|
|
MAX_SPRITE_TRAIL_MASK = MAX_SPRITE_TRAIL_POINTS - 1,
|
|
};
|
|
|
|
TrailPoint_t *GetTrailPoint(int n);
|
|
void UpdateTrail(void);
|
|
void ComputeScreenPosition(Vector *pScreenPos);
|
|
void ConvertSkybox();
|
|
void UpdateBoundingBox(void);
|
|
|
|
TrailPoint_t m_vecSteps[MAX_SPRITE_TRAIL_POINTS];
|
|
int m_nFirstStep;
|
|
int m_nStepCount;
|
|
float m_flUpdateTime;
|
|
Vector m_vecPrevSkyboxOrigin;
|
|
float m_flPrevSkyboxScale;
|
|
Vector m_vecRenderMins;
|
|
Vector m_vecRenderMaxs;
|
|
#endif
|
|
|
|
CNetworkVar(
|
|
float,
|
|
m_flLifeTime); // Amount of time before a new trail segment fades away
|
|
CNetworkVar(float, m_flStartWidth); // The starting scale
|
|
CNetworkVar(float, m_flEndWidth); // The ending scale
|
|
CNetworkVar(float, m_flStartWidthVariance); // The starting scale
|
|
CNetworkVar(float, m_flTextureRes); // Texture resolution along the trail
|
|
CNetworkVar(float, m_flMinFadeLength); // The end of the trail must fade
|
|
// out for this many units
|
|
CNetworkVector(m_vecSkyboxOrigin); // What's our skybox origin?
|
|
CNetworkVar(float, m_flSkyboxScale); // What's our skybox scale?
|
|
|
|
string_t m_iszSpriteName;
|
|
bool m_bAnimate;
|
|
bool m_bDrawForMoveParent;
|
|
|
|
#if defined(CLIENT_DLL)
|
|
public:
|
|
void SetUpdateTime(float setTo) { m_flUpdateTime = setTo; }
|
|
#endif
|
|
};
|
|
|
|
#endif // SPRITETRAIL_H
|