//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //===========================================================================// #ifndef DMEPARTICLEPANEL_H #define DMEPARTICLEPANEL_H #ifdef _WIN32 #pragma once #endif #include "matsys_controls/PotteryWheelPanel.h" #include "datamodel/dmattributetypes.h" #include "particles/particles.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- class IMaterial; class CMeshBuilder; class Vector; class CParticleCollection; class CColorPickerButton; class CDmeParticleSystemDefinition; class CDmeParticleFunction; class CControlPointPage; namespace vgui { class ScrollBar; class IScheme; class PropertyPage; class PropertySheet; class Splitter; class Label; class TextEntry; } //----------------------------------------------------------------------------- // Particle System Viewer Panel //----------------------------------------------------------------------------- class CParticleSystemPanel : public CPotteryWheelPanel { DECLARE_CLASS_SIMPLE( CParticleSystemPanel, CPotteryWheelPanel ); public: // constructor, destructor CParticleSystemPanel( vgui::Panel *pParent, const char *pName ); virtual ~CParticleSystemPanel(); // Set the particle system to draw void SetParticleSystem( CDmeParticleSystemDefinition *pDef ); void SetDmeElement( CDmeParticleSystemDefinition *pDef ); CParticleCollection *GetParticleSystem(); // Indicates that bounds should be drawn void RenderBounds( bool bEnable ); // Indicates that cull sphere should be drawn void RenderCullBounds( bool bEnable ); // Indicates that helpers should be drawn void RenderHelpers( bool bEnable ); // Indicates which helper to draw void SetRenderedHelper( CDmeParticleFunction *pOp ); virtual void OnTick(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); // Accessor for control point values const Vector& GetControlPointValue( int nControlPoint ) const; void SetControlPointValue( int nControlPoint, const Vector &value ); private: // Shutdown, startup particle collection void StartupParticleCollection(); void ShutdownParticleCollection(); // Draw bounds void DrawBounds(); void DrawCullBounds(); // paint it! virtual void OnPaint3D(); private: bool m_bRenderBounds : 1; bool m_bRenderCullBounds : 1; bool m_bRenderHelpers : 1; bool m_bPerformNameBasedLookup : 1; Vector m_pControlPointValue[MAX_PARTICLE_CONTROL_POINTS]; DmObjectId_t m_RenderHelperId; float m_flLastTime; // Stores the id or name of the particle system being viewed DmObjectId_t m_ParticleSystemId; CUtlString m_ParticleSystemName; // The particle system to draw CParticleCollection *m_pParticleSystem; // A texture to use for a lightmap CTextureReference m_pLightmapTexture; // The default env_cubemap CTextureReference m_DefaultEnvCubemap; }; //----------------------------------------------------------------------------- // Accessor for control point values //----------------------------------------------------------------------------- inline const Vector& CParticleSystemPanel::GetControlPointValue( int nControlPoint ) const { return m_pControlPointValue[nControlPoint]; } inline void CParticleSystemPanel::SetControlPointValue( int nControlPoint, const Vector &value ) { m_pControlPointValue[nControlPoint] = value; } //----------------------------------------------------------------------------- // This panel has a particle system viewer as well as controls //----------------------------------------------------------------------------- class CParticleSystemPreviewPanel : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CParticleSystemPreviewPanel, vgui::EditablePanel ); public: // constructor, destructor CParticleSystemPreviewPanel( vgui::Panel *pParent, const char *pName ); virtual ~CParticleSystemPreviewPanel(); // Set the material to draw void SetParticleSystem( CDmeParticleSystemDefinition *pDef ); void SetParticleFunction( CDmeParticleFunction *pFunction ); void SetDmeElement( CDmeParticleSystemDefinition *pDef ); virtual void OnThink(); private: MESSAGE_FUNC_PARAMS( OnCheckButtonChecked, "CheckButtonChecked", params ); MESSAGE_FUNC_PARAMS( OnBackgroundColorChanged, "ColorPickerPicked", params ); MESSAGE_FUNC_PARAMS( OnBackgroundColorPreview, "ColorPickerPreview", params ); MESSAGE_FUNC_PARAMS( OnBackgroundColorCancel, "ColorPickerCancel", params ); MESSAGE_FUNC( OnParticleSystemReconstructed, "ParticleSystemReconstructed" ); vgui::Splitter *m_Splitter; CParticleSystemPanel *m_pParticleSystemPanel; vgui::PropertySheet *m_pControlSheet; vgui::PropertyPage *m_pRenderPage; CControlPointPage *m_pControlPointPage; vgui::CheckButton *m_pRenderCullBounds; vgui::CheckButton *m_pRenderBounds; vgui::CheckButton *m_pRenderHelpers; CColorPickerButton *m_pBackgroundColor; vgui::Label *m_pParticleCount; }; #endif // DMEPARTICLEPANEL_H