You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.7 KiB
187 lines
5.7 KiB
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef PARTICLEPICKER_H
|
|
#define PARTICLEPICKER_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "tier1/utlstring.h"
|
|
#include "vgui_controls/Frame.h"
|
|
#include "matsys_controls/baseassetpicker.h"
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
namespace vgui
|
|
{
|
|
class Splitter;
|
|
class EditablePanel;
|
|
class ScrollBar;
|
|
class IScheme;
|
|
class IImage;
|
|
}
|
|
|
|
class CParticleSystemPanel;
|
|
class CParticleSnapshotPanel;
|
|
class CParticleCollection;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Grid of particle snapshots
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class CParticleSnapshotGrid: public vgui::EditablePanel
|
|
{
|
|
DECLARE_CLASS_SIMPLE( CParticleSnapshotGrid, vgui::EditablePanel );
|
|
|
|
public:
|
|
CParticleSnapshotGrid( vgui::Panel *pParent, const char *pName );
|
|
|
|
virtual void PerformLayout();
|
|
virtual void OnTick();
|
|
virtual void OnMousePressed(vgui::MouseCode code);
|
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
|
virtual void OnMouseWheeled(int delta);
|
|
virtual void OnKeyCodeTyped( vgui::KeyCode code );
|
|
|
|
/*
|
|
Since the grid can be re-ordered:
|
|
- "index" is the location of a preview panel in m_Panels, which determines physical placement
|
|
- "id" is the location of the system in the original SetParticleList() array that was handed in (useful for clients)
|
|
*/
|
|
|
|
void SetParticleList( const CUtlVector<const char *>& ParticleNames );
|
|
void LayoutScrolled();
|
|
|
|
const char *GetSystemName( int nId );
|
|
|
|
int GetSelectedSystemId( int nSelectionIndex );
|
|
int GetSelectedSystemCount( );
|
|
|
|
void SelectId( int nId, bool bAddToSelection, bool bToggle );
|
|
void SelectSystem( const char *pSystemName, bool bAddToSelection, bool bToggle );
|
|
void DeselectAll();
|
|
|
|
MESSAGE_FUNC_CHARPTR( OnParticleSystemSelected, "ParticleSystemSelected", SystemName );
|
|
MESSAGE_FUNC_CHARPTR( OnParticleSystemCtrlSelected, "ParticleSystemCtrlSelected", SystemName );
|
|
MESSAGE_FUNC_CHARPTR( OnParticleSystemShiftSelected, "ParticleSystemShiftSelected", SystemName );
|
|
MESSAGE_FUNC_CHARPTR( OnParticleSystemPicked, "ParticleSystemPicked", SystemName );
|
|
|
|
MESSAGE_FUNC( OnScrollBarSliderMoved, "ScrollBarSliderMoved" );
|
|
MESSAGE_FUNC_PARAMS( OnCheckButtonChecked, "CheckButtonChecked", kv );
|
|
|
|
struct PSysRelativeInfo_t
|
|
{
|
|
CUtlString relName;
|
|
bool bVisibleInCurrentView;
|
|
};
|
|
|
|
private:
|
|
void SelectIndex( int nIndex, bool bAddToSelection, bool bToggle );
|
|
|
|
int IdToIndex( int nId );
|
|
int InternalFindSystemIndexByName( const char *pSystemName );
|
|
|
|
bool IsSystemVisible( int nInternalIndex );
|
|
|
|
void UpdatePanelRelatives( int nInternalIndex );
|
|
void MapSystemRelatives( );
|
|
void UpdateAllRelatives( );
|
|
|
|
void SetAllPreviewEnabled( bool bEnabled );
|
|
|
|
int GetPanelWide();
|
|
int GetPanelTall();
|
|
|
|
vgui::Panel *m_pScrollPanel;
|
|
vgui::Panel *m_pToolPanel;
|
|
vgui::ScrollBar *m_pScrollBar;
|
|
vgui::Label *m_pNoSystemsLabel;
|
|
|
|
vgui::CheckButton *m_pPreviewCheckbox;
|
|
|
|
CUtlVector<CParticleSnapshotPanel*> m_Panels;
|
|
|
|
int m_nCurrentColCount;
|
|
|
|
bool m_bAllowMultipleSelection;
|
|
int m_nMostRecentSelectedIndex;
|
|
|
|
vgui::IImage *m_pRelativesImgNeither;
|
|
vgui::IImage *m_pRelativesImgPOnly;
|
|
vgui::IImage *m_pRelativesImgCOnly;
|
|
vgui::IImage *m_pRelativesImgBoth;
|
|
|
|
CUtlVector< CUtlVector<PSysRelativeInfo_t> > m_ParentsMap;
|
|
CUtlVector< CUtlVector<PSysRelativeInfo_t> > m_ChildrenMap;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Particle picker panel
|
|
//-----------------------------------------------------------------------------
|
|
class CParticlePicker : public CBaseAssetPicker
|
|
{
|
|
DECLARE_CLASS_SIMPLE( CParticlePicker, CBaseAssetPicker );
|
|
|
|
public:
|
|
|
|
CParticlePicker( vgui::Panel *pParent );
|
|
~CParticlePicker();
|
|
|
|
virtual void PerformLayout();
|
|
virtual void OnMousePressed(vgui::MouseCode code);
|
|
|
|
void GetSelectedParticleSysName( char *pBuffer, int nMaxLen );
|
|
void SelectParticleSys( const char *pRelativePath );
|
|
|
|
// asset cache interface
|
|
virtual int GetAssetCount();
|
|
virtual const char *GetAssetName( int nAssetIndex );
|
|
virtual const CachedAssetInfo_t& GetCachedAsset( int nAssetIndex );
|
|
virtual int GetCachedAssetCount();
|
|
virtual bool IncrementalCacheAssets( float flTimeAllowed ); // return true if finished
|
|
virtual bool BeginCacheAssets( bool bForceRecache ); // return true if finished
|
|
virtual CUtlString GetSelectedAssetFullPath( int nIndex );
|
|
|
|
protected:
|
|
virtual void OnAssetListChanged( );
|
|
|
|
private:
|
|
MESSAGE_FUNC_PARAMS( OnAssetSelected, "AssetSelected", params );
|
|
MESSAGE_FUNC( OnParticleSystemSelectionChanged, "ParticleSystemSelectionChanged" );
|
|
MESSAGE_FUNC_CHARPTR( OnParticleSystemPicked, "ParticleSystemPicked", SystemName );
|
|
|
|
virtual void OnSelectedAssetPicked( const char *pParticleSysName );
|
|
void CachePCFInfo( int nModIndex, const char *pFileName );
|
|
void HandleModParticles( int nModIndex );
|
|
|
|
vgui::Splitter* m_pFileBrowserSplitter;
|
|
|
|
CParticleSnapshotGrid *m_pSnapshotGrid;
|
|
|
|
friend class CParticlePickerFrame;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Main app window
|
|
//-----------------------------------------------------------------------------
|
|
class CParticlePickerFrame : public CBaseAssetPickerFrame
|
|
{
|
|
DECLARE_CLASS_SIMPLE( CParticlePickerFrame, CBaseAssetPickerFrame );
|
|
|
|
public:
|
|
CParticlePickerFrame( vgui::Panel *pParent, const char *pTitle );
|
|
virtual ~CParticlePickerFrame();
|
|
|
|
// Allows external apps to select a MDL
|
|
void SelectParticleSys( const char *pRelativePath );
|
|
};
|
|
|
|
|
|
#endif // MDLPICKER_H
|