Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//===========================================================================//
#ifndef VMTDOC_H
#define VMTDOC_H
#ifdef _WIN32
#pragma once
#endif
#include "dme_controls/inotifyui.h"
#include "datamodel/dmehandle.h"
#include "materialsystem/MaterialSystemUtil.h"
#include "tier1/utlstring.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class IVMTDocCallback; class IShader; enum ShaderParamType_t; class IMaterial; class IShader;
//-----------------------------------------------------------------------------
// Contains all editable state
//-----------------------------------------------------------------------------
class CVMTDoc : public IDmNotify { public: CVMTDoc( IVMTDocCallback *pCallback ); ~CVMTDoc();
// Inherited from INotifyUI
virtual void NotifyDataChanged( const char *pReason, int nNotifySource, int nNotifyFlags );
// Sets/Gets the file name
const char *GetFileName(); void SetFileName( const char *pFileName );
// Dirty bits (has it changed since the last time it was saved?)
void SetDirty( bool bDirty ); bool IsDirty() const;
// Creates a new act busy list
void CreateNew();
// Saves/loads from file
bool LoadFromFile( const char *pFileName ); bool SaveToFile( );
// Returns the root object
CDmElement *GetRootObject();
// Called when data changes (see INotifyUI for flags)
void OnDataChanged( const char *pReason, int nNotifySource, int nNotifyFlags );
// Sets the shader in the material
void SetShader( const char *pShaderName );
// Gets the preview material
IMaterial *GetPreviewMaterial();
// Sets shader parameters to the default for that shader
void SetParamsToDefault();
private: // Creates the root element
bool CreateRootElement();
// Add attribute for shader parameter
CDmAttribute* AddAttributeForShaderParameter( CDmElement *pMaterial, const char *pParamName, ShaderParamType_t paramType );
// Add a single shader parameter if it doesn't exist
void AddNewShaderParam( CDmElement *pMaterial, const char *pParamName, ShaderParamType_t paramType, const char *pValue );
// Add all shader parameters that don't currently exist
void AddNewShaderParams( CDmElement *pMaterial, IShader *pShader );
// Is this attribute a shader parameter?
bool IsShaderParam( CDmAttribute* pAttribute );
// Remove all shader parameters that don't exist in the new shader
void RemoveUnusedShaderParams( CDmElement *pMaterial, IShader *pShader, IShader *pOldShader );
// Remove all shader parameters
void RemoveAllShaderParams( CDmElement *pMaterial );
// Finds a shader
IShader *FindShader( const char *pShaderName );
// Updates the preview material
void UpdatePreviewMaterial();
// Copies VMT parameters into the root
void CopyParamsFromVMT( CDmElement *pVMT );
// A couple methods to set param values from strings (OLD METHOD!)
bool SetVMatrixParamValue( CDmAttribute *pAttribute, const char *pValue ); bool SetVector2DParamValue( CDmAttribute *pAttribute, const char *pValue ); bool SetVector3DParamValue( CDmAttribute *pAttribute, const char *pValue ); bool SetVector4DParamValue( CDmAttribute *pAttribute, const char *pValue ); bool SetColorParamValue( CDmAttribute *pAttribute, const char *pValue );
// Sets an attribute value from the shader param default
void SetAttributeValueFromDefault( CDmElement *pMaterial, CDmAttribute *pAttribute, const char *pValue );
// Hooks the preview to an existing material, if there is one
void SetupPreviewMaterial( );
// Prior to saving to disk, extract all shader parameters which == the default
CDmElement* ExtractDefaultParameters( );
IVMTDocCallback *m_pCallback; CMaterialReference m_pScratchMaterial; CMaterialReference m_pPreviewMaterial; CDmeHandle< CDmElement > m_hRoot; CUtlString m_CurrentShader; IShader *m_pCurrentIShader; char m_pFileName[512]; bool m_bDirty; };
#endif // VMTDOC_H
|