diff options
Diffstat (limited to 'public/movieobjects/dmedrawsettings.h')
| -rw-r--r-- | public/movieobjects/dmedrawsettings.h | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/public/movieobjects/dmedrawsettings.h b/public/movieobjects/dmedrawsettings.h new file mode 100644 index 0000000..ebc2a31 --- /dev/null +++ b/public/movieobjects/dmedrawsettings.h @@ -0,0 +1,195 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// A class representing draw settings for Dme things +// +//============================================================================= + +#ifndef DMEDRAWSETTINGS_H +#define DMEDRAWSETTINGS_H + +#ifdef _WIN32 +#pragma once +#endif + + +#include "datamodel/dmelement.h" +#include "materialsystem/MaterialSystemUtil.h" +#include "tier1/utlstack.h" + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +class CDmeDag; + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +class CDmeDrawSettings : public CDmElement +{ + DEFINE_ELEMENT( CDmeDrawSettings, CDmElement ); + +public: + + enum DrawType_t + { + DRAW_INVALID = -1, + + DRAW_SMOOTH, + DRAW_FLAT, + DRAW_WIREFRAME, + DRAW_BOUNDINGBOX, + + STANDARD_DRAW_COUNT + }; + + // resolve internal data from changed attributes + virtual void Resolve(); + + DrawType_t GetDrawType() const; + DrawType_t SetDrawType( int drawType ); + void PushDrawType(); + void PopDrawType(); + + bool Shaded() const { + const DrawType_t drawType = GetDrawType(); + return drawType == DRAW_SMOOTH || drawType == DRAW_FLAT; + } + + bool GetBackfaceCulling() const { return m_bBackfaceCulling.Get(); } + void SetBackfaceCulling( bool val ) { m_bBackfaceCulling.Set( val ); } + + bool GetWireframeOnShaded() const { return m_bWireframeOnShaded.Get(); } + void SetWireframeOnShaded( bool val ) { m_bWireframeOnShaded.Set( val ); } + + bool GetXRay() const { return m_bXRay.Get(); } + void SetXRay( bool val ) { m_bXRay.Set( val ); } + + bool GetGrayShade() const { return m_bGrayShade.Get(); } + void SetGrayShade( bool val ) { m_bGrayShade.Set( val ); } + + bool GetNormals() const { return m_bNormals.Get(); } + void SetNormals( bool val ) { m_bNormals.Set( val ); } + + float GetNormalLength() const { return m_NormalLength.Get(); } + void SetNormalLength( float val ) { m_NormalLength.Set( val ); } + + const Color &GetColor() const { return m_Color.Get(); } + void SetColor( Color val ) { m_Color.Set( val ); } + + bool Drawable( CDmElement *pElement ); + + void BindWireframe(); + + void BindWireframeOnShaded(); + + void BindGray(); + + void BindUnlitGray(); + + bool GetDeltaHighlight() const { return m_bDeltaHighlight; } + void SetDeltaHighlight( bool bDeltaHighlight ) { m_bDeltaHighlight.Set( bDeltaHighlight ); } + + bool IsAMaterialBound() const { + return m_IsAMaterialBound; + } + + void DrawDag( CDmeDag *pDag ); + + CUtlVector< Vector > &GetHighlightPoints() { return m_vHighlightPoints; } + +public: + + CDmaVar< int > m_DrawType; + CDmaVar< bool > m_bBackfaceCulling; + CDmaVar< bool > m_bWireframeOnShaded; + CDmaVar< bool > m_bXRay; + CDmaVar< bool > m_bGrayShade; + CDmaVar< bool > m_bNormals; + CDmaVar< float > m_NormalLength; + CDmaVar< Color > m_Color; + CDmaVar< bool > m_bDeltaHighlight; + CDmaVar< float > m_flHighlightSize; + CDmaVar< Color > m_cHighlightColor; + +protected: + + void BuildKnownDrawableTypes(); + + static bool s_bWireframeMaterialInitialized; + static CMaterialReference s_WireframeMaterial; + + static bool s_bWireframeOnShadedMaterialInitialized; + static CMaterialReference s_WireframeOnShadedMaterial; + + static bool s_bFlatGrayMaterial; + static CMaterialReference s_FlatGrayMaterial; + + static bool s_bUnlitGrayMaterial; + static CMaterialReference s_UnlitGrayMaterial; + + static CUtlRBTree< CUtlSymbol > s_KnownDrawableTypes; + CUtlRBTree< CUtlSymbol > m_NotDrawable; + + CUtlStack< DrawType_t > m_drawTypeStack; + bool m_IsAMaterialBound; + + // Points to highlight + CUtlVector< Vector > m_vHighlightPoints; +}; + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +inline CDmeDrawSettings::DrawType_t CDmeDrawSettings::SetDrawType( int drawType ) +{ + if ( drawType < 0 || drawType >= STANDARD_DRAW_COUNT ) + { + drawType = DRAW_SMOOTH; + } + + m_DrawType.Set( drawType ); + + return GetDrawType(); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +inline CDmeDrawSettings::DrawType_t CDmeDrawSettings::GetDrawType() const +{ + const int drawType( m_DrawType.Get() ); + if ( drawType < 0 || drawType >= STANDARD_DRAW_COUNT ) + return DRAW_SMOOTH; + + return static_cast< DrawType_t >( drawType ); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +inline void CDmeDrawSettings::PushDrawType() +{ + m_drawTypeStack.Push( GetDrawType() ); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +inline void CDmeDrawSettings::PopDrawType() +{ + if ( m_drawTypeStack.Count() ) + { + DrawType_t drawType = GetDrawType(); + m_drawTypeStack.Pop( drawType ); + SetDrawType( drawType ); + } +} + + +#endif // DMEDRAWSETTINGS_H
\ No newline at end of file |