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.
165 lines
5.5 KiB
165 lines
5.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: A particle system definition |
|
// |
|
//============================================================================= |
|
|
|
#ifndef DMEPARTICLESYSTEMDEFINITION_H |
|
#define DMEPARTICLESYSTEMDEFINITION_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "datamodel/dmelement.h" |
|
#include "datamodel/dmattribute.h" |
|
#include "datamodel/dmattributevar.h" |
|
#include "datamodel/dmehandle.h" |
|
#include "particles/particles.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
class CDmeEditorTypeDictionary; |
|
class CDmeParticleSystemDefinition; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Base class for particle functions inside a particle system definition |
|
//----------------------------------------------------------------------------- |
|
class CDmeParticleFunction : public CDmElement |
|
{ |
|
DEFINE_ELEMENT( CDmeParticleFunction, CDmElement ); |
|
|
|
public: |
|
virtual const char *GetFunctionType() const { return NULL; } |
|
virtual void Resolve(); |
|
virtual void OnElementUnserialized(); |
|
|
|
// Used for backward compat |
|
void AddMissingFields( const DmxElementUnpackStructure_t *pUnpack ); |
|
|
|
// Returns the editor type dictionary |
|
CDmeEditorTypeDictionary* GetEditorTypeDictionary(); |
|
|
|
// Marks a particle system as a new instance |
|
// This is basically a workaround to prevent newly-copied particle functions |
|
// from recompiling themselves a zillion times |
|
void MarkNewInstance(); |
|
|
|
protected: |
|
void UpdateAttributes( const DmxElementUnpackStructure_t *pUnpack ); |
|
|
|
private: |
|
// Defines widgets to edit this bad boy |
|
CDmeHandle< CDmeEditorTypeDictionary > m_hTypeDictionary; |
|
bool m_bSkipNextResolve; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Something that updates particles |
|
//----------------------------------------------------------------------------- |
|
class CDmeParticleOperator : public CDmeParticleFunction |
|
{ |
|
DEFINE_ELEMENT( CDmeParticleOperator, CDmeParticleFunction ); |
|
|
|
public: |
|
// Sets the particle operator |
|
void SetFunction( IParticleOperatorDefinition *pDefinition ); |
|
|
|
// Returns the function type |
|
virtual const char *GetFunctionType() const; |
|
|
|
private: |
|
CDmaString m_FunctionName; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// A child of a particle system |
|
//----------------------------------------------------------------------------- |
|
class CDmeParticleChild : public CDmeParticleFunction |
|
{ |
|
DEFINE_ELEMENT( CDmeParticleChild, CDmeParticleFunction ); |
|
|
|
public: |
|
// Sets the particle operator |
|
void SetChildParticleSystem( CDmeParticleSystemDefinition *pDef, IParticleOperatorDefinition *pDefinition ); |
|
|
|
// Returns the function type |
|
virtual const char *GetFunctionType() const; |
|
|
|
CDmaElement< CDmeParticleSystemDefinition > m_Child; |
|
}; |
|
|
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Represents an editable entity; draws its helpers |
|
//----------------------------------------------------------------------------- |
|
class CDmeParticleSystemDefinition : public CDmElement |
|
{ |
|
DEFINE_ELEMENT( CDmeParticleSystemDefinition, CDmElement ); |
|
|
|
public: |
|
virtual void OnElementUnserialized(); |
|
virtual void Resolve(); |
|
|
|
// Add, remove |
|
CDmeParticleFunction* AddOperator( ParticleFunctionType_t type, const char *pFunctionName ); |
|
CDmeParticleFunction* AddChild( CDmeParticleSystemDefinition *pChild ); |
|
void RemoveFunction( ParticleFunctionType_t type, CDmeParticleFunction *pParticleFunction ); |
|
void RemoveFunction( ParticleFunctionType_t type, int nIndex ); |
|
|
|
// Find |
|
int FindFunction( ParticleFunctionType_t type, CDmeParticleFunction *pParticleFunction ); |
|
int FindFunction( ParticleFunctionType_t type, const char *pFunctionName ); |
|
|
|
// Iteration |
|
int GetParticleFunctionCount( ParticleFunctionType_t type ) const; |
|
CDmeParticleFunction *GetParticleFunction( ParticleFunctionType_t type, int nIndex ); |
|
|
|
// Reordering |
|
void MoveFunctionUp( ParticleFunctionType_t type, CDmeParticleFunction *pElement ); |
|
void MoveFunctionDown( ParticleFunctionType_t type, CDmeParticleFunction *pElement ); |
|
|
|
// Returns the editor type dictionary |
|
CDmeEditorTypeDictionary* GetEditorTypeDictionary(); |
|
|
|
// Recompiles the particle system when a change occurs |
|
void RecompileParticleSystem(); |
|
|
|
// Marks a particle system as a new instance |
|
// This is basically a workaround to prevent newly-copied particle functions |
|
// from recompiling themselves a zillion times |
|
void MarkNewInstance(); |
|
|
|
// Should we use name-based lookup? |
|
bool UseNameBasedLookup() const; |
|
|
|
private: |
|
CDmaElementArray< CDmeParticleFunction > m_ParticleFunction[PARTICLE_FUNCTION_COUNT]; |
|
CDmaVar< bool > m_bPreventNameBasedLookup; |
|
|
|
// Defines widgets to edit this bad boy |
|
CDmeHandle< CDmeEditorTypeDictionary > m_hTypeDictionary; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Should we use name-based lookup? |
|
//----------------------------------------------------------------------------- |
|
inline bool CDmeParticleSystemDefinition::UseNameBasedLookup() const |
|
{ |
|
return !m_bPreventNameBasedLookup; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Human readable string for the particle functions |
|
//----------------------------------------------------------------------------- |
|
const char *GetParticleFunctionTypeName( ParticleFunctionType_t type ); |
|
|
|
|
|
#endif // DMEPARTICLESYSTEMDEFINITION_H
|
|
|