Counter Strike : Global Offensive Source Code
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

//====== 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