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.
 
 
 
 
 
 

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