summaryrefslogtreecommitdiff
path: root/engine/r_efx.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /engine/r_efx.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'engine/r_efx.cpp')
-rw-r--r--engine/r_efx.cpp166
1 files changed, 166 insertions, 0 deletions
diff --git a/engine/r_efx.cpp b/engine/r_efx.cpp
new file mode 100644
index 0000000..3d13f29
--- /dev/null
+++ b/engine/r_efx.cpp
@@ -0,0 +1,166 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Implements the Effects API
+// Created: YWB 9/5/2000
+//
+//===========================================================================//
+
+
+#include "quakedef.h"
+#include "r_efx.h"
+#include "r_efxextern.h"
+#include "r_local.h"
+#include "cl_main.h"
+#include "decal.h"
+#include "client.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+// Effects API object.
+static CVEfx efx;
+
+// Engine internal accessor to effects api ( see cl_parsetent.cpp, etc. )
+CVEfx *g_pEfx = &efx;
+
+extern CClientState cl;
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CVEfx::Draw_DecalIndexFromName( char *name )
+{
+ bool found = false;
+ return ::Draw_DecalIndexFromName( name, &found );
+}
+
+//-----------------------------------------------------------------------------
+// Retrieve decal texture name from decal by index
+//-----------------------------------------------------------------------------
+const char *CVEfx::Draw_DecalNameFromIndex( int nIndex )
+{
+ return ::Draw_DecalNameFromIndex( nIndex );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : textureIndex -
+// entity -
+// modelIndex -
+// position -
+// flags -
+//-----------------------------------------------------------------------------
+void CVEfx::DecalShoot( int textureIndex, int entity, const model_t *model, const Vector& model_origin, const QAngle& model_angles, const Vector& position, const Vector *saxis, int flags)
+{
+ color32 white = {255,255,255,255};
+ DecalColorShoot( textureIndex, entity, model, model_origin, model_angles, position, saxis, flags, white );
+}
+
+void CVEfx::DecalColorShoot( int textureIndex, int entity, const model_t *model, const Vector& model_origin, const QAngle& model_angles,
+ const Vector& position, const Vector *saxis, int flags, const color32 &rgbaColor)
+{
+ Vector localPosition = position;
+ if ( entity ) // Not world?
+ {
+ matrix3x4_t matrix;
+ AngleMatrix( model_angles, model_origin, matrix );
+ VectorITransform( position, matrix, localPosition );
+ }
+
+ ::R_DecalShoot( textureIndex, entity, model, localPosition, saxis, flags, rgbaColor, NULL );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : *material -
+// userdata -
+// entity -
+// *model -
+// position -
+// *saxis -
+// flags -
+// &rgbaColor -
+//-----------------------------------------------------------------------------
+void CVEfx::PlayerDecalShoot( IMaterial *material, void *userdata, int entity, const model_t *model, const Vector& model_origin, const QAngle& model_angles,
+ const Vector& position, const Vector *saxis, int flags, const color32 &rgbaColor )
+{
+ Vector localPosition = position;
+ if ( entity ) // Not world?
+ {
+ matrix3x4_t matrix;
+ AngleMatrix( model_angles, model_origin, matrix );
+ VectorITransform( position, matrix, localPosition );
+ }
+
+ R_PlayerDecalShoot( material, userdata, entity, model, position, saxis, flags, rgbaColor );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : key -
+// Output : dlight_t
+//-----------------------------------------------------------------------------
+dlight_t *CVEfx::CL_AllocDlight( int key )
+{
+ return ::CL_AllocDlight( key );
+}
+
+int CVEfx::CL_GetActiveDLights( dlight_t *pList[MAX_DLIGHTS] )
+{
+ int nOut = 0;
+ if ( g_bActiveDlights )
+ {
+ for ( int i=0; i < MAX_DLIGHTS; i++ )
+ {
+ if ( r_dlightactive & (1 << i) )
+ {
+ pList[nOut++] = &cl_dlights[i];
+ }
+ }
+ }
+ return nOut;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : key -
+// Output : dlight_t
+//-----------------------------------------------------------------------------
+dlight_t *CVEfx::CL_AllocElight( int key )
+{
+ return ::CL_AllocElight( key );
+}
+
+
+// Given an elight key, find it. Does not search ordinary dlights. May return NULL.
+dlight_t *CVEfx::GetElightByKey( int key )
+{
+ if ( g_bActiveElights )
+ {
+ for ( unsigned int i = 0 ; i < MAX_ELIGHTS ; ++i )
+ {
+ // if the keys match...
+ if (cl_elights[i].key == key)
+ {
+ // then if the light is active, return it. If it's died,
+ // return NULL.
+ if ( cl_elights[i].die > cl.GetTime() )
+ {
+ return cl_elights + i;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+ }
+ }
+
+ // if we are down here, we found nothing, or no lights were active
+ return NULL;
+}
+
+// Expose it to the client .dll
+EXPOSE_SINGLE_INTERFACE( CVEfx, IVEfx, VENGINE_EFFECTS_INTERFACE_VERSION );