You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
5.8 KiB
173 lines
5.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//===========================================================================// |
|
#if !defined( BEAMDRAW_H ) |
|
#define BEAMDRAW_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "materialsystem/imaterial.h" |
|
#include "materialsystem/imesh.h" |
|
#include "mathlib/vector.h" |
|
#include "tier2/beamsegdraw.h" |
|
#include "c_pixel_visibility.h" |
|
|
|
#define NOISE_DIVISIONS 128 |
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
|
|
struct model_t; |
|
struct BeamTrail_t; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Beams fill out this data structure |
|
// This is also used for rendering |
|
//----------------------------------------------------------------------------- |
|
|
|
class Beam_t : public CDefaultClientRenderable |
|
{ |
|
public: |
|
Beam_t(); |
|
|
|
// Methods of IClientRenderable |
|
virtual const Vector& GetRenderOrigin( void ); |
|
virtual const QAngle& GetRenderAngles( void ); |
|
virtual const matrix3x4_t &RenderableToWorldTransform(); |
|
virtual void GetRenderBounds( Vector& mins, Vector& maxs ); |
|
virtual bool ShouldDraw( void ); |
|
virtual bool IsTransparent( void ); |
|
virtual int DrawModel( int flags ); |
|
virtual void ComputeFxBlend( ); |
|
virtual int GetFxBlend( ); |
|
|
|
// Resets the beam state |
|
void Reset(); |
|
|
|
// Method to computing the bounding box |
|
void ComputeBounds(); |
|
|
|
// Bounding box... |
|
Vector m_Mins; |
|
Vector m_Maxs; |
|
pixelvis_handle_t *m_queryHandleHalo; |
|
float m_haloProxySize; |
|
|
|
// Data is below.. |
|
|
|
// Next beam in list |
|
Beam_t* next; |
|
|
|
// Type of beam |
|
int type; |
|
int flags; |
|
|
|
// Control points for the beam |
|
int numAttachments; |
|
Vector attachment[MAX_BEAM_ENTS]; |
|
Vector delta; |
|
|
|
// 0 .. 1 over lifetime of beam |
|
float t; |
|
float freq; |
|
|
|
// Time when beam should die |
|
float die; |
|
float width; |
|
float endWidth; |
|
float fadeLength; |
|
float amplitude; |
|
float life; |
|
|
|
// Color |
|
float r, g, b; |
|
float brightness; |
|
|
|
// Speed |
|
float speed; |
|
|
|
// Animation |
|
float frameRate; |
|
float frame; |
|
int segments; |
|
|
|
// Attachment entities for the beam |
|
EHANDLE entity[MAX_BEAM_ENTS]; |
|
int attachmentIndex[MAX_BEAM_ENTS]; |
|
|
|
// Model info |
|
int modelIndex; |
|
int haloIndex; |
|
|
|
float haloScale; |
|
int frameCount; |
|
|
|
float rgNoise[NOISE_DIVISIONS+1]; |
|
|
|
// Popcorn trail for beam follows to use |
|
BeamTrail_t* trail; |
|
|
|
// for TE_BEAMRINGPOINT |
|
float start_radius; |
|
float end_radius; |
|
|
|
// for FBEAM_ONLYNOISEONCE |
|
bool m_bCalculatedNoise; |
|
|
|
float m_flHDRColorScale; |
|
|
|
#ifdef PORTAL |
|
bool m_bDrawInMainRender; |
|
bool m_bDrawInPortalRender; |
|
#endif //#ifdef PORTAL |
|
}; |
|
|
|
|
|
int ScreenTransform( const Vector& point, Vector& screen ); |
|
|
|
void DrawSegs( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, const Vector& delta, |
|
float startWidth, float endWidth, float scale, float freq, float speed, int segments, |
|
int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f ); |
|
void DrawTeslaSegs( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, const Vector& delta, |
|
float startWidth, float endWidth, float scale, float freq, float speed, int segments, |
|
int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f ); |
|
void DrawSplineSegs( int noise_divisions, float *prgNoise, |
|
const model_t* beammodel, const model_t* halomodel, float flHaloScale, |
|
float frame, int rendermode, int numAttachments, Vector* attachment, |
|
float startWidth, float endWidth, float scale, float freq, float speed, int segments, |
|
int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f ); |
|
void DrawHalo(IMaterial* pMaterial, const Vector& source, float scale, float const* color, float flHDRColorScale = 1.0f ); |
|
void BeamDrawHalo( const model_t* spritemodel, float frame, int rendermode, const Vector& source, |
|
float scale, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawDisk( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, const Vector& delta, |
|
float width, float scale, float freq, float speed, |
|
int segments, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawCylinder( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, |
|
const Vector& delta, float width, float scale, float freq, |
|
float speed, int segments, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *noise, int divs, float scale ), |
|
const model_t* spritemodel, float frame, int rendermode, |
|
const Vector& source, const Vector& delta, float width, float amplitude, |
|
float freq, float speed, int segments, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawBeamFollow( const model_t* spritemodel, BeamTrail_t* pHead, int frame, int rendermode, Vector& delta, |
|
Vector& screen, Vector& screenLast, float die, const Vector& source, |
|
int flags, float width, float amplitude, float freq, float* color, float flHDRColorScale = 1.0f ); |
|
|
|
void DrawBeamQuadratic( const Vector &start, const Vector &control, const Vector &end, float width, const Vector &color, float scrollOffset, float flHDRColorScale = 1.0f ); |
|
class CEngineSprite *Draw_SetSpriteTexture( const model_t *pSpriteModel, int frame, int rendermode ); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Assumes the material has already been bound |
|
//----------------------------------------------------------------------------- |
|
void DrawSprite( const Vector &vecOrigin, float flWidth, float flHeight, color32 color ); |
|
|
|
#endif // BEAMDRAW_H
|