source-engine/public/movieobjects/dmelight.h

136 lines
4.0 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// A class representing a light
//
//=============================================================================
#ifndef DMELIGHT_H
#define DMELIGHT_H
#ifdef _WIN32
#pragma once
#endif
#include "movieobjects/dmedag.h"
//-----------------------------------------------------------------------------
// Forward declaration
//-----------------------------------------------------------------------------
struct LightDesc_t;
//-----------------------------------------------------------------------------
// A base class for lights
//-----------------------------------------------------------------------------
class CDmeLight : public CDmeDag
{
DEFINE_ELEMENT( CDmeLight, CDmeDag );
public:
// Sets the color and intensity
// NOTE: Color is specified 0-255 floating point.
void SetColor( const Color &color );
void SetIntensity( float flIntensity );
// Sets up render state in the material system for rendering
virtual void SetupRenderState( int nLightIndex );
virtual bool GetLightDesc( LightDesc_t *pDesc ) { return false; }
protected:
// Sets up render state in the material system for rendering
void SetupRenderStateInternal( LightDesc_t &desc, float flAtten0, float flAtten1, float flAtten2 );
CDmaVar< Color > m_Color;
CDmaVar< float > m_flIntensity;
};
//-----------------------------------------------------------------------------
// A directional light
//-----------------------------------------------------------------------------
class CDmeDirectionalLight : public CDmeLight
{
DEFINE_ELEMENT( CDmeDirectionalLight, CDmeLight );
public:
void SetDirection( const Vector &direction );
const Vector &GetDirection() const { return m_Direction; }
// Sets up render state in the material system for rendering
virtual bool GetLightDesc( LightDesc_t *pDesc );
private:
CDmaVar<Vector> m_Direction;
};
//-----------------------------------------------------------------------------
// A point light
//-----------------------------------------------------------------------------
class CDmePointLight : public CDmeLight
{
DEFINE_ELEMENT( CDmePointLight, CDmeLight );
public:
void SetPosition( const Vector &pos ) { m_Position = pos; }
const Vector &GetPosition() const { return m_Position; }
// Sets the attenuation factors
void SetAttenuation( float flConstant, float flLinear, float flQuadratic );
// Sets the maximum range
void SetMaxDistance( float flMaxDistance );
// Sets up render state in the material system for rendering
virtual bool GetLightDesc( LightDesc_t *pDesc );
protected:
CDmaVar< Vector > m_Position;
CDmaVar< float > m_flAttenuation0;
CDmaVar< float > m_flAttenuation1;
CDmaVar< float > m_flAttenuation2;
CDmaVar< float > m_flMaxDistance;
};
//-----------------------------------------------------------------------------
// A spot light
//-----------------------------------------------------------------------------
class CDmeSpotLight : public CDmePointLight
{
DEFINE_ELEMENT( CDmeSpotLight, CDmePointLight );
public:
// Sets the spotlight direction
void SetDirection( const Vector &direction );
// Sets the spotlight angle factors
// Angles are specified in degrees, as full angles (as opposed to half-angles)
void SetAngles( float flInnerAngle, float flOuterAngle, float flAngularFalloff );
// Sets up render state in the material system for rendering
virtual bool GetLightDesc( LightDesc_t *pDesc );
private:
CDmaVar<Vector> m_Direction;
CDmaVar<float> m_flSpotInnerAngle;
CDmaVar<float> m_flSpotOuterAngle;
CDmaVar<float> m_flSpotAngularFalloff;
};
//-----------------------------------------------------------------------------
// An ambient light
//-----------------------------------------------------------------------------
class CDmeAmbientLight : public CDmeLight
{
DEFINE_ELEMENT( CDmeAmbientLight, CDmeLight );
public:
// Sets up render state in the material system for rendering
virtual void SetupRenderState( int nLightIndex );
};
#endif // DMELIGHT_H