This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

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