Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

134 lines
4.0 KiB

5 years ago
//========= 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