101 lines
3.0 KiB
C++
101 lines
3.0 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================//
|
|
|
|
#ifndef FX_WATER_H
|
|
#define FX_WATER_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "fx.h"
|
|
#include "particles_simple.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
|