mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 12:06:07 +08:00
First version of the SOurce SDK 2013
This commit is contained in:
136
game/client/fx_cube.cpp
Normal file
136
game/client/fx_cube.cpp
Normal file
@ -0,0 +1,136 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "clientsideeffects.h"
|
||||
#include "materialsystem/imaterial.h"
|
||||
#include "materialsystem/imesh.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
class FX_Cube : public CClientSideEffect
|
||||
{
|
||||
public:
|
||||
FX_Cube(IMaterial *pMaterial) : CClientSideEffect("FX_Cube")
|
||||
{
|
||||
m_pMaterial = pMaterial;
|
||||
if(m_pMaterial)
|
||||
m_pMaterial->IncrementReferenceCount();
|
||||
}
|
||||
|
||||
virtual ~FX_Cube()
|
||||
{
|
||||
if(m_pMaterial)
|
||||
m_pMaterial->DecrementReferenceCount();
|
||||
|
||||
}
|
||||
|
||||
void SetupVec(Vector& v, int dim1, int dim2, int fixedDim, float dim1Val, float dim2Val, float fixedDimVal)
|
||||
{
|
||||
v[dim1] = dim1Val;
|
||||
v[dim2] = dim2Val;
|
||||
v[fixedDim] = fixedDimVal;
|
||||
}
|
||||
|
||||
void DrawBoxSide(
|
||||
int dim1, int dim2, int fixedDim,
|
||||
float minX, float minY,
|
||||
float maxX, float maxY,
|
||||
float fixedDimVal,
|
||||
bool bFlip,
|
||||
float shade)
|
||||
{
|
||||
Vector v;
|
||||
Vector color;
|
||||
VectorScale( m_vColor, shade, color );
|
||||
|
||||
CMatRenderContextPtr pRenderContext( materials );
|
||||
IMesh *pMesh = pRenderContext->GetDynamicMesh();
|
||||
|
||||
CMeshBuilder builder;
|
||||
builder.Begin(pMesh, MATERIAL_TRIANGLE_STRIP, 2);
|
||||
|
||||
SetupVec(v, dim1, dim2, fixedDim, minX, maxY, fixedDimVal);
|
||||
builder.Position3fv(v.Base());
|
||||
builder.Color3fv(color.Base());
|
||||
builder.AdvanceVertex();
|
||||
|
||||
SetupVec(v, dim1, dim2, fixedDim, bFlip ? maxX : minX, bFlip ? maxY : minY, fixedDimVal);
|
||||
builder.Position3fv(v.Base());
|
||||
builder.Color3fv(color.Base());
|
||||
builder.AdvanceVertex();
|
||||
|
||||
SetupVec(v, dim1, dim2, fixedDim, bFlip ? minX : maxX, bFlip ? minY : maxY, fixedDimVal);
|
||||
builder.Position3fv(v.Base());
|
||||
builder.Color3fv(color.Base());
|
||||
builder.AdvanceVertex();
|
||||
|
||||
SetupVec(v, dim1, dim2, fixedDim, maxX, minY, fixedDimVal);
|
||||
builder.Position3fv(v.Base());
|
||||
builder.Color3fv(color.Base());
|
||||
builder.AdvanceVertex();
|
||||
|
||||
builder.End();
|
||||
pMesh->Draw();
|
||||
}
|
||||
|
||||
virtual void Draw( double frametime )
|
||||
{
|
||||
CMatRenderContextPtr pRenderContext( materials );
|
||||
// Draw it.
|
||||
pRenderContext->Bind( m_pMaterial );
|
||||
|
||||
Vector vLightDir(-1,-2,-3);
|
||||
VectorNormalize( vLightDir );
|
||||
|
||||
DrawBoxSide(1, 2, 0, m_mins[1], m_mins[2], m_maxs[1], m_maxs[2], m_mins[0], false, vLightDir.x * 0.5f + 0.5f);
|
||||
DrawBoxSide(1, 2, 0, m_mins[1], m_mins[2], m_maxs[1], m_maxs[2], m_maxs[0], true, -vLightDir.x * 0.5f + 0.5f);
|
||||
|
||||
DrawBoxSide(0, 2, 1, m_mins[0], m_mins[2], m_maxs[0], m_maxs[2], m_mins[1], true, vLightDir.y * 0.5f + 0.5f);
|
||||
DrawBoxSide(0, 2, 1, m_mins[0], m_mins[2], m_maxs[0], m_maxs[2], m_maxs[1], false, -vLightDir.y * 0.5f + 0.5f);
|
||||
|
||||
DrawBoxSide(0, 1, 2, m_mins[0], m_mins[1], m_maxs[0], m_maxs[1], m_mins[2], false, vLightDir.z * 0.5f + 0.5f);
|
||||
DrawBoxSide(0, 1, 2, m_mins[0], m_mins[1], m_maxs[0], m_maxs[1], m_maxs[2], true, -vLightDir.z * 0.5f + 0.5f);
|
||||
|
||||
// Decrease lifetime.
|
||||
m_Life -= frametime;
|
||||
}
|
||||
|
||||
bool IsActive( void )
|
||||
{
|
||||
return m_Life > 0.0;
|
||||
}
|
||||
|
||||
public:
|
||||
Vector m_mins;
|
||||
Vector m_maxs;
|
||||
Vector m_vColor;
|
||||
float m_Life;
|
||||
IMaterial *m_pMaterial;
|
||||
};
|
||||
|
||||
|
||||
void FX_AddCube( const Vector &mins, const Vector &maxs, const Vector &vColor, float life, const char *materialName )
|
||||
{
|
||||
IMaterial *mat = materials->FindMaterial(materialName, TEXTURE_GROUP_CLIENT_EFFECTS);
|
||||
|
||||
FX_Cube *pCube = new FX_Cube(mat);
|
||||
pCube->m_mins = mins;
|
||||
pCube->m_maxs = maxs;
|
||||
pCube->m_vColor = vColor;
|
||||
pCube->m_Life = life;
|
||||
|
||||
clienteffects->AddEffect(pCube);
|
||||
}
|
||||
|
||||
void FX_AddCenteredCube( const Vector ¢er, float size, const Vector &vColor, float life, const char *materialName )
|
||||
{
|
||||
FX_AddCube(center-Vector(size,size,size), center+Vector(size,size,size), vColor, life, materialName);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user