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.
104 lines
2.8 KiB
104 lines
2.8 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef FX_WATER_H
|
||
|
#define FX_WATER_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "particles_simple.h"
|
||
|
#include "fx.h"
|
||
|
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
class CSplashParticle : public CSimpleEmitter
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CSplashParticle( const char *pDebugName ) : CSimpleEmitter( pDebugName ), m_bUseClipHeight( false ) {}
|
||
|
|
||
|
// Create
|
||
|
static CSplashParticle *Create( const char *pDebugName )
|
||
|
{
|
||
|
return new CSplashParticle( pDebugName );
|
||
|
}
|
||
|
|
||
|
// Roll
|
||
|
virtual float UpdateRoll( SimpleParticle *pParticle, float timeDelta );
|
||
|
|
||
|
// Velocity
|
||
|
virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta );
|
||
|
|
||
|
// Alpha
|
||
|
virtual float UpdateAlpha( const SimpleParticle *pParticle );
|
||
|
|
||
|
void SetClipHeight( float flClipHeight );
|
||
|
|
||
|
// Simulation
|
||
|
void SimulateParticles( CParticleSimulateIterator *pIterator );
|
||
|
|
||
|
private:
|
||
|
CSplashParticle( const CSplashParticle & );
|
||
|
|
||
|
float m_flClipHeight;
|
||
|
bool m_bUseClipHeight;
|
||
|
};
|
||
|
|
||
|
class WaterDebrisEffect : public CSimpleEmitter
|
||
|
{
|
||
|
public:
|
||
|
WaterDebrisEffect( const char *pDebugName ) : CSimpleEmitter( pDebugName ) {}
|
||
|
|
||
|
static WaterDebrisEffect* Create( const char *pDebugName );
|
||
|
|
||
|
virtual float UpdateAlpha( const SimpleParticle *pParticle );
|
||
|
|
||
|
private:
|
||
|
WaterDebrisEffect( const WaterDebrisEffect & );
|
||
|
};
|
||
|
|
||
|
extern void FX_WaterRipple( const Vector &origin, float scale, Vector *pColor, float flLifetime=1.5, float flAlpha=1 );
|
||
|
extern void FX_GunshotSplash( const Vector &origin, const Vector &normal, float scale );
|
||
|
extern void FX_GunshotSlimeSplash( const Vector &origin, const Vector &normal, float scale );
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Retrieve and alter lighting for splashes
|
||
|
// Input : position - point to check
|
||
|
// *color - tint of the lighting at this point
|
||
|
// *luminosity - adjusted luminosity at this point
|
||
|
//-----------------------------------------------------------------------------
|
||
|
inline void FX_GetSplashLighting( Vector position, Vector *color, float *luminosity )
|
||
|
{
|
||
|
// Compute our lighting at our position
|
||
|
Vector totalColor = engine->GetLightForPoint( position, true );
|
||
|
|
||
|
// Get our lighting information
|
||
|
UTIL_GetNormalizedColorTintAndLuminosity( totalColor, color, luminosity );
|
||
|
|
||
|
// Fake a specular highlight (too dim otherwise)
|
||
|
if ( luminosity != NULL )
|
||
|
{
|
||
|
*luminosity = MIN( 1.0f, (*luminosity) * 4.0f );
|
||
|
|
||
|
// Clamp so that we never go completely translucent
|
||
|
if ( *luminosity < 0.25f )
|
||
|
{
|
||
|
*luminosity = 0.25f;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Only take a quarter of the tint, mostly we want to be white
|
||
|
if ( color != NULL )
|
||
|
{
|
||
|
(*color) = ( (*color) * 0.25f ) + Vector( 0.75f, 0.75f, 0.75f );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
|
||
|
#endif // FX_WATER_H
|