summaryrefslogtreecommitdiff
path: root/public/movieobjects/dmedrawsettings.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/movieobjects/dmedrawsettings.h')
-rw-r--r--public/movieobjects/dmedrawsettings.h195
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