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.
70 lines
1.8 KiB
70 lines
1.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//=============================================================================//
|
|
|
|
// This defines things that allow particle effects to hook into the particle app.
|
|
#ifndef PARTICLE_PROTOTYPE_H
|
|
#define PARTICLE_PROTOTYPE_H
|
|
|
|
|
|
class CParticleMgr;
|
|
class RecvTable;
|
|
|
|
|
|
// Command-line args can be passed in to set state or options in the effects.
|
|
class IPrototypeArgAccess
|
|
{
|
|
public:
|
|
virtual const char* FindArg(const char *pName, const char *pDefault=0)=0;
|
|
};
|
|
|
|
|
|
|
|
// You must implement this interface for the prototype app to be able to run your effect.
|
|
class IPrototypeAppEffect
|
|
{
|
|
public:
|
|
virtual ~IPrototypeAppEffect() {}
|
|
|
|
// Start the effect. You can get command-line args with pArgs.
|
|
virtual void Start(CParticleMgr *pParticleMgr, IPrototypeArgAccess *pArgs)=0;
|
|
|
|
// Return false if you don't allow properties to be edited in the prototype app.
|
|
virtual bool GetPropEditInfo(RecvTable **ppTable, void **ppObj) {return false;}
|
|
};
|
|
|
|
|
|
|
|
// Used internally.
|
|
typedef IPrototypeAppEffect* (*PrototypeEffectCreateFn)();
|
|
class PrototypeEffectLink
|
|
{
|
|
public:
|
|
PrototypeEffectLink(PrototypeEffectCreateFn fn, const char *pName);
|
|
|
|
PrototypeEffectCreateFn m_CreateFn;
|
|
const char *m_pEffectName;
|
|
PrototypeEffectLink *m_pNext;
|
|
};
|
|
|
|
|
|
#ifdef PARTICLEPROTOTYPE_APP
|
|
extern PrototypeEffectLink *g_pPrototypeEffects; // The list of prototype effects..
|
|
|
|
|
|
// Expose your effect with this macro.
|
|
#define EXPOSE_PROTOTYPE_EFFECT(effectName, className) \
|
|
static IPrototypeAppEffect* ___Create##effectName##() {return new className;} \
|
|
static PrototypeEffectLink ___effectlink_##effectName##(___Create##effectName##, #effectName);
|
|
#else
|
|
#define EXPOSE_PROTOTYPE_EFFECT(effectName, className)
|
|
#endif
|
|
|
|
|
|
#endif
|
|
|
|
|