mirror of
				https://github.com/halpz/re3.git
				synced 2025-11-04 15:35:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1027 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1027 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
#ifndef RPPRTSTD_H
 | 
						|
#define RPPRTSTD_H
 | 
						|
 | 
						|
/*===========================================================================*
 | 
						|
 *--- Include files ---------------------------------------------------------*
 | 
						|
 *===========================================================================*/
 | 
						|
 | 
						|
#include "rwcore.h"
 | 
						|
#include "rpworld.h"
 | 
						|
 | 
						|
 | 
						|
/*---- start: ./prtstd.h----*/
 | 
						|
 | 
						|
#include "rwcore.h"
 | 
						|
#include "rpworld.h"
 | 
						|
#include "rpptank.h"
 | 
						|
 | 
						|
#include "rpprtstd.rpe"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
/**
 | 
						|
 * \defgroup rpprtstd RpPrtStd
 | 
						|
 * \ingroup rpplugin
 | 
						|
 *
 | 
						|
 * Particle Animation Plugin for RenderWare Graphics.
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Current version stamp
 | 
						|
 */
 | 
						|
#define rpPRTSTDVERSIONSTAMP                2
 | 
						|
 | 
						|
/*
 | 
						|
 * Random Number Generation Macros
 | 
						|
 */
 | 
						|
#define PRTSTD_SRAND_MAX                    0xFFFFFFFF
 | 
						|
#define PRTSTD_SRAND_IMAX                   ((RwReal) 1.0 / (RwReal) PRTSTD_SRAND_MAX)
 | 
						|
 | 
						|
#define PRTSTD_SRAND(_seed)                 ((_seed) = ((_seed) * 196314165 + 907633515))
 | 
						|
 | 
						|
/* Real rand -1.0 .. + 1.0 */
 | 
						|
#define PRTSTD_RSRAND(_seed)                (((RwReal)((RwUInt32) (_seed) * PRTSTD_SRAND_IMAX) * \
 | 
						|
                                            (RwReal) 2.0) - (RwReal) 1.0)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#define PRTSTD_RSRAND2(_seed)               (((RwReal)((RwReal) (_seed) * PRTSTD_SRAND_IMAX) * \
 | 
						|
                                            (RwReal)1.0))
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \ref RpPrtStdParticleFlags, this type represents the different properties of
 | 
						|
 * a particle.
 | 
						|
 */
 | 
						|
enum RpPrtStdParticleFlags
 | 
						|
{
 | 
						|
    rpPRTSTDPARTICLEFLAGEMITTER              = 0x00000001, /**<Particle is an emitter. */
 | 
						|
 | 
						|
    rpPRTSTDPARTICLEFLAGFORCEENUMSIZEINT    = RWFORCEENUMSIZEINT
 | 
						|
};
 | 
						|
 | 
						|
typedef enum RpPrtStdParticleFlags RpPrtStdParticleFlags;
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \ref RpPrtStdEmitterFlags, this type represents the different properties of
 | 
						|
 * an emitter.
 | 
						|
 */
 | 
						|
enum RpPrtStdEmitterFlags
 | 
						|
{
 | 
						|
    rpPRTSTDEMITTERFLAGALIVE                = 0x00000001, /**< The emitter is alive and should not be removed */
 | 
						|
    rpPRTSTDEMITTERFLAGACTIVE               = 0x00000002, /**< This indicates the emitter is active or idle */
 | 
						|
    rpPRTSTDEMITTERFLAGPTANK                = 0x00000004, /**< The emitter uses the \ref rpptank */
 | 
						|
    rpPRTSTDEMITTERFLAGEMIT                 = 0x00000008, /**< This indicates the emitter can emit new particles */
 | 
						|
    rpPRTSTDEMITTERFLAGUPDATE               = 0x00000010, /**< This indicates if the emitter is to be updated. */
 | 
						|
    rpPRTSTDEMITTERFLAGUPDATEPARTICLE       = 0x00000020, /**< This indicated if the emitter's particles are updated. */
 | 
						|
    rpPRTSTDEMITTERFLAGRENDER               = 0x00000040, /**< This indicates if the emitter is rendered. */
 | 
						|
    rpPRTSTDEMITTERFLAGRENDERPARTICLE       = 0x00000080, /**< This indicates if the emitter's particles are rendered. */
 | 
						|
    rpPRTSTDEMITTERFLAGFORCEENUMSIZEINT     = RWFORCEENUMSIZEINT
 | 
						|
};
 | 
						|
 | 
						|
typedef enum RpPrtStdEmitterFlags RpPrtStdEmitterFlags;
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
#define rpPRTSTDPARTICLECALLBACKMAX             7
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \ref RpPrtStdParticleCallBackCode, this type represents the different callbacks for
 | 
						|
 * processing a \ref RpPrtStdParticleBatch. These callbacks will be called at various point for
 | 
						|
 * processing the particle's custom data.
 | 
						|
 */
 | 
						|
enum RpPrtStdParticleCallBackCode
 | 
						|
{
 | 
						|
    rpPRTSTDPARTICLECALLBACKUPDATE              = 0, /**< Particle update callback */
 | 
						|
    rpPRTSTDPARTICLECALLBACKRENDER,                  /**< Particle render callback */
 | 
						|
    rpPRTSTDPARTICLECALLBACKCREATE,                  /**< Particle create callback */
 | 
						|
    rpPRTSTDPARTICLECALLBACKDESTROY,                 /**< Particle destroy callback */
 | 
						|
    rpPRTSTDPARTICLECALLBACKSTREAMREAD,              /**< Particle stream input callback */
 | 
						|
    rpPRTSTDPARTICLECALLBACKSTREAMWRITE,             /**< Particle stream outout callback */
 | 
						|
    rpPRTSTDPARTICLECALLBACKSTREAMGETSIZE,           /**< Particle stream get size callback */
 | 
						|
    rpPRTSTDPARTICLECALLBACKFORCEENUMSIZEINT    = RWFORCEENUMSIZEINT
 | 
						|
};
 | 
						|
 | 
						|
typedef enum RpPrtStdParticleCallBackCode RpPrtStdParticleCallBackCode;
 | 
						|
 | 
						|
#define rpPRTSTDEMITTERCALLBACKMAX              10
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \ref RpPrtStdEmitterCallBackCode, this type represents the different callbacks for
 | 
						|
 * processing a \ref RpPrtStdEmitter. These callbacks will be called at various point for
 | 
						|
 * processing the emitter's custom data.
 | 
						|
 */
 | 
						|
enum RpPrtStdEmitterCallBackCode
 | 
						|
{
 | 
						|
    rpPRTSTDEMITTERCALLBACKEMIT                 = 0, /**< Emitter particle emission callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKBEGINUPDATE,              /**< Emitter begin update call back */
 | 
						|
    rpPRTSTDEMITTERCALLBACKENDUPDATE,                /**< Emitter end update callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKBEGINRENDER,              /**< Emitter begin render callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKENDRENDER,                /**< Emitter end render callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKCREATE,                   /**< Emitter create callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKDESTROY,                  /**< Emitter destroy callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKSTREAMREAD,               /**< Emitter stream input callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKSTREAMWRITE,              /**< Emitter stream output callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKSTREAMGETSIZE,            /**< Emitter stream get size callback */
 | 
						|
    rpPRTSTDEMITTERCALLBACKFORCEENUMSIZEINT     = RWFORCEENUMSIZEINT
 | 
						|
};
 | 
						|
 | 
						|
typedef enum RpPrtStdEmitterCallBackCode RpPrtStdEmitterCallBackCode;
 | 
						|
 | 
						|
typedef RwInt32 RpPrtStdPropertyCode;
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitter RWALIGN(RpPrtStdEmitter, rwMATRIXALIGNMENT);
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \typedef RpPrtStdEmitterCallBack
 | 
						|
 * \ref RpPrtStdEmitterCallBack represents the function called for processing
 | 
						|
 * a \ref RpPrtStdEmitter. There can several types of the functions, each performing a
 | 
						|
 * specific task defined by \ref RpPrtStdEmitterCallBackCode.
 | 
						|
 *
 | 
						|
 * \param atomic        A pointer to the emitter's parent atomic.
 | 
						|
 * \param emt           A pointer to the emitter.
 | 
						|
 * \param data          A pointer to user data.
 | 
						|
 *
 | 
						|
 * \return A pointer to the emitter on success. NULL otherwise.
 | 
						|
 */
 | 
						|
typedef RpPrtStdEmitter *
 | 
						|
        (*RpPrtStdEmitterCallBack)
 | 
						|
            (RpAtomic *atomic, RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
typedef struct RpPrtStdParticleBatch RWALIGN(RpPrtStdParticleBatch, rwMATRIXALIGNMENT);
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \typedef RpPrtStdParticleCallBack
 | 
						|
 * \ref RpPrtStdParticleCallBack represents the function called for processing
 | 
						|
 * a \ref RpPrtStdParticleBatch. There can be several types of the functions, each
 | 
						|
 * performing a specific task defined by \ref RpPrtStdParticleCallBackCode.
 | 
						|
 *
 | 
						|
 * \param emt           A pointer to the particle batch's parent emitter.
 | 
						|
 * \param prtBatch      A pointer to the particle batch.
 | 
						|
 * \param data          A pointer to user data.
 | 
						|
 *
 | 
						|
 * \return A pointer to the particle batch on success. NULL otherwise.
 | 
						|
 */
 | 
						|
typedef RpPrtStdParticleBatch *
 | 
						|
        (*RpPrtStdParticleCallBack)
 | 
						|
            (RpPrtStdEmitter *emt, RpPrtStdParticleBatch *prtBatch, void *data);
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \typedef RpPrtStdEmitterCallBackArray
 | 
						|
 * \ref RpPrtStdEmitterCallBackArray represents a set of callback functions for
 | 
						|
 * processing a \ref RpPrtStdEmitter. All the functions are of the type \ref
 | 
						|
 * RpPrtStdEmitterCallBack.
 | 
						|
 *
 | 
						|
 * \see RpPrtStdEmitterCallBackCode
 | 
						|
 */
 | 
						|
typedef RpPrtStdEmitterCallBack
 | 
						|
        RpPrtStdEmitterCallBackArray[rpPRTSTDEMITTERCALLBACKMAX];
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \typedef RpPrtStdParticleCallBackArray
 | 
						|
 * \ref RpPrtStdParticleCallBackArray represents a set of callback functions for
 | 
						|
 * processing a \ref RpPrtStdParticleBatch. All the functions are of the type \ref
 | 
						|
 * RpPrtStdParticleCallBack.
 | 
						|
 *
 | 
						|
 * \see RpPrtStdParticleCallBackCode
 | 
						|
 */
 | 
						|
typedef RpPrtStdParticleCallBack
 | 
						|
        RpPrtStdParticleCallBackArray[rpPRTSTDPARTICLECALLBACKMAX];
 | 
						|
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterClass RpPrtStdEmitterClass;
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \typedef RpPrtStdEClassSetupCallBack
 | 
						|
 * \ref RpPrtStdEClassSetupCallBack represents the function called for setting up an
 | 
						|
 * emitter class's set of callback function. The callback function is called
 | 
						|
 * after an emitter class is streamed in.
 | 
						|
 *
 | 
						|
 * \param eClass        A pointer to an emitter class.
 | 
						|
 *
 | 
						|
 * \return A pointer to the emitter class on success. NULL otherwise.
 | 
						|
 */
 | 
						|
typedef RpPrtStdEmitterClass *
 | 
						|
        (*RpPrtStdEClassSetupCallBack)
 | 
						|
            (RpPrtStdEmitterClass *eClass);
 | 
						|
 | 
						|
typedef struct RpPrtStdParticleClass RpPrtStdParticleClass;
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \typedef RpPrtStdPClassSetupCallBack
 | 
						|
 * \ref RpPrtStdPClassSetupCallBack represents the function called for setting up an
 | 
						|
 * emitter class's set of callback function. The callback function is called
 | 
						|
 * after an emitter class is streamed in.
 | 
						|
 *
 | 
						|
 * \param pClass        A pointer to a particle class.
 | 
						|
 *
 | 
						|
 * \return A pointer to the particle class on success. NULL otherwise.
 | 
						|
 */
 | 
						|
typedef RpPrtStdParticleClass *
 | 
						|
        (*RpPrtStdPClassSetupCallBack)
 | 
						|
            (RpPrtStdParticleClass *pClass);
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
typedef struct RpPrtStdPropertyTable RpPrtStdPropertyTable;
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdPropertyTable
 | 
						|
 * A structure representing properties's data present in an emitter or
 | 
						|
 * particle.
 | 
						|
 * An emitter, or particle, are treated as a single block of memory. The
 | 
						|
 * property table is used to describe the data presents in the memory block.
 | 
						|
 * It stores the property's id, offset entry from the start of the memory
 | 
						|
 * block and size in bytes.
 | 
						|
 */
 | 
						|
struct RpPrtStdPropertyTable
 | 
						|
{
 | 
						|
    RwUInt32                        *propPtr;       /**< Internal usage */
 | 
						|
    RpPrtStdPropertyTable           *next;          /**< Internal usage */
 | 
						|
 | 
						|
    RwInt32                         id;             /**< Property table's id */
 | 
						|
 | 
						|
    RwInt32                         numProp;        /**< Number of properties in the table */
 | 
						|
    RwInt32                         maxProp;        /**< Internal usage */
 | 
						|
    RwInt32                         *propID;        /**< Array of properties's id */
 | 
						|
    RwInt32                         *propOffset;    /**< Array of properties's offset */
 | 
						|
    RwInt32                         *propSize;      /**< Array of properties's size */
 | 
						|
    RwInt32                         *propSizeUA;    /**< Internal usage */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdEmitterClass
 | 
						|
 * A structure representing the collection of data and callbacks for an emitter. An emitter
 | 
						|
 * class is used to create emitters that share the same properties and callback functions.
 | 
						|
 * Once created, an emitter class cannot be altered. An emitter class should also not be
 | 
						|
 * destroyed if emitters of the class are still in use.
 | 
						|
 */
 | 
						|
struct RpPrtStdEmitterClass
 | 
						|
{
 | 
						|
    RpPrtStdEmitterClass                    *next;          /**< Internal usage */
 | 
						|
 | 
						|
    RwInt32                                 id;             /**< Emitter class's id */
 | 
						|
 | 
						|
    RwInt32                                 objSize;        /**< Size of the emitter */
 | 
						|
    RpPrtStdPropertyTable                   *propTab;       /**< Reference to a table of emitter properties */
 | 
						|
 | 
						|
    RwInt32                                 numCallback;    /**< Number of callback arrays */
 | 
						|
    RpPrtStdEmitterCallBackArray            *callback;      /**< Array of emitter callback functions */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdParticleClass
 | 
						|
 * A structure representing the collection of data and callbacks for a particle. A particle
 | 
						|
 * class is used to create particle that share the same properties and callback functions.
 | 
						|
 * Once created, a particle class cannot be altered. A particle class should also not be
 | 
						|
 * destroyed if particles of the class are still in use.
 | 
						|
 */
 | 
						|
struct RpPrtStdParticleClass
 | 
						|
{
 | 
						|
    RpPrtStdParticleClass                   *next;          /**< Internal usage */
 | 
						|
 | 
						|
    RwInt32                                 id;             /**< Particle class's id */
 | 
						|
 | 
						|
    RwInt32                                 objSize;        /**< Size of a particle */
 | 
						|
    RpPrtStdPropertyTable                   *propTab;       /**< Reference to a table of particle properties */
 | 
						|
 | 
						|
    RwInt32                                 numCallback;    /**< Number of callback sets */
 | 
						|
    RpPrtStdParticleCallBackArray           *callback;      /**< Array of particle batch callback functions */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdParticleBatch
 | 
						|
 * A structure repsenting a group of particles. For efficient, particles are stored
 | 
						|
 * in batches rather than individually. All live particles are stored at the head
 | 
						|
 * of batch with no gaps of dead particles. A counter is used to record the number of
 | 
						|
 * live particles in the batch. Once a batch has 0 live particles, it will removed
 | 
						|
 * from the emitter's active particle list to the inactive list.
 | 
						|
 * The first particle of the batch is given by an offset from the start of the
 | 
						|
 * particle batch.
 | 
						|
 */
 | 
						|
struct RpPrtStdParticleBatch
 | 
						|
{
 | 
						|
    RpPrtStdParticleBatch       *next;                      /**< Pointer to the next particle batch */
 | 
						|
 | 
						|
    RpPrtStdParticleClass       *prtClass;                  /**< Pointer to the particle's class */
 | 
						|
 | 
						|
    RwInt32                     numPrt;                     /**< Number of particles in the batch */
 | 
						|
    RwInt32                     maxPrt;                     /**< Maxium number of particles in batch */
 | 
						|
    RwInt32                     newPrt;                     /**< Start of newly emitted particles in the batch */
 | 
						|
 | 
						|
    RwInt32                     offset;                     /**< Offset to the first particle, from the start of the
 | 
						|
                                                             * particle batch */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdEmitter
 | 
						|
 * A structure repsenting the mandatory data set for any emitter. Each emitter contains information of
 | 
						|
 * itself and its particles, via the emitter class and particle class respectively. It also contains the
 | 
						|
 * list of particles, in batches, it had emitted.
 | 
						|
 * Optional data are stored immediately after the mandatory set. The contents of the optional data are
 | 
						|
 * described in the emitter class's property table. The offset from the property table are from the start
 | 
						|
 * of the emitter.
 | 
						|
 *
 | 
						|
 * The type of particles emitted are given by the particle class. Each emitter may have only emitter class
 | 
						|
 * and particle class and these should not be changed during the lifetime of the emitter and its particles.
 | 
						|
 * The emitter maintains two lists of particle batches, an acitive list, contain still active particles,
 | 
						|
 * and an inactive list. The maximum number of particles in each batch is given by the prtBatchMaxPrt field.
 | 
						|
 */
 | 
						|
struct RpPrtStdEmitter
 | 
						|
{
 | 
						|
    RpPrtStdEmitter             *next;                      /**< Pointer to the next emitter */
 | 
						|
 | 
						|
    RwUInt32                    flag;                       /**< Emitter's property flag */
 | 
						|
 | 
						|
    RpAtomic                    *atomic;                    /**< Pointer to emitter's parent atomic */
 | 
						|
 | 
						|
    RpPrtStdEmitterClass        *emtClass;                  /**< Pointer the emitter's class */
 | 
						|
 | 
						|
    RwInt32                     prtActive;                  /**< Number of particles emitted */
 | 
						|
    RwInt32                     prtBatchMaxPrt;             /**< Maximum number of particles per batch */
 | 
						|
    RpPrtStdParticleClass       *prtClass;                  /**< Pointer to the particle's class */
 | 
						|
 | 
						|
    RpPrtStdParticleBatch       *inactiveBatch,             /**< Circular linked list of inactive particle batches */
 | 
						|
                                *activeBatch;               /**< Circular linked list of active particle batches */
 | 
						|
 | 
						|
    RwReal                      boundingSphere;             /**< Emitter's bounding sphere. */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTER                                 0
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERSTANDARD                         1
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERPRTCOLOR                         2
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERPRTTEXCOORDS                     3
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERPRTANIMFRAME                     4
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERPRTSIZE                          5
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERPTANK                            6
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERPRTVELOCITY                      7
 | 
						|
#define rpPRTSTDPROPERTYCODEEMITTERPRTMATRIX                        8
 | 
						|
 | 
						|
#define rpPRTSTDEMITTERPROPERTYCOUNT                                9
 | 
						|
 | 
						|
#define rpPRTSTDEMITTERDATAFLAGSTANDARD                     0x00000001
 | 
						|
#define rpPRTSTDEMITTERDATAFLAGPRTCOLOR                     0x00000002
 | 
						|
#define rpPRTSTDEMITTERDATAFLAGPRTTEXCOORDS                 0x00000004
 | 
						|
#define rpPRTSTDEMITTERDATAFLAGPRTANIMFRAME                 0x00000008
 | 
						|
#define rpPRTSTDEMITTERDATAFLAGPRTSIZE                      0x00000010
 | 
						|
#define rpPRTSTDEMITTERDATAFLAGPTANK                        0x00000020
 | 
						|
#define rpPRTSTDEMITTERDATAFLAGPRTMATRIX                    0x00000040
 | 
						|
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterStandard RpPrtStdEmitterStandard;
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdEmitterStandard
 | 
						|
 * A structure represent the set of properties for a basic emitter. The structure is stored as
 | 
						|
 * a single optional data in the emitter property table.
 | 
						|
 *
 | 
						|
 * The basic emitter uses a 'time' variable to control particle emissions. A large time gap between
 | 
						|
 * emission can give pulse effects where as a small time gap produces a streaming effects. Particles
 | 
						|
 * can be emitted from a single point, line, area or a volume.
 | 
						|
 *
 | 
						|
 * Particles emitted from an emitter are of the same type. An emitter cannot emit different types of
 | 
						|
 * particles. Once an emitter has reached its maximum number of particles, no further particles are
 | 
						|
 * emitted until some of the existing particles have died.
 | 
						|
 *
 | 
						|
 * Most properties have a bias value to vary the property value. This uses the seed field
 | 
						|
 * to give a degreee of randomness.
 | 
						|
 */
 | 
						|
struct RpPrtStdEmitterStandard
 | 
						|
{
 | 
						|
    RwInt32                     seed;                           /**< Seed for random number generator */
 | 
						|
 | 
						|
    RwInt32                     maxPrt;                         /**< Maximum number of active particles */
 | 
						|
 | 
						|
    RwReal                      currTime,                       /**< Current timestamp for emitter */
 | 
						|
                                prevTime;                       /**< Previous timestamp for emitter */
 | 
						|
    RwV3d                       force;                          /**< External force applied to particles */
 | 
						|
 | 
						|
    RwV3d                       emtPos,                         /**< Emitter position */
 | 
						|
                                emtSize;                        /**< Emitter size. This is the volume where new particles
 | 
						|
                                                                 * are emitted */
 | 
						|
    RwReal                      emtEmitGap,                     /**< Time gap between emission */
 | 
						|
                                emtEmitGapBias,                 /**< Time gap bias */
 | 
						|
                                emtPrevEmitTime,                /**< Previous particle emission time */
 | 
						|
                                emtEmitTime;                    /**< Next particle emission time */
 | 
						|
    RwInt32                     emtPrtEmit,                     /**< Number of particle emit per emission */
 | 
						|
                                emtPrtEmitBias;                 /**< Particle emission bias */
 | 
						|
 | 
						|
    RwReal                      prtInitVel,                     /**< Particle's initial speed */
 | 
						|
                                prtInitVelBias;                 /**< Particle's initial speed bias */
 | 
						|
    RwReal                      prtLife,                        /**< Particle's duration */
 | 
						|
                                prtLifeBias;                    /**< Particle's duration bias */
 | 
						|
 | 
						|
    RwV3d                       prtInitDir,                     /**< Particle's initial direction */
 | 
						|
                                prtInitDirBias;                 /**< particle's initial direction bias */
 | 
						|
 | 
						|
    RwV2d                       prtSize;                        /**< Particle's size */
 | 
						|
 | 
						|
    RwRGBA                      prtColor;                       /**< Particle's color */
 | 
						|
 | 
						|
    RwTexCoords                 prtUV[4];                       /**< Particle's texture coordindates */
 | 
						|
    RwTexture                   *texture;                       /**< Particle's texture */
 | 
						|
 | 
						|
    RwMatrix                    *ltm;                           /**< LTM to transform particle coordinates from local space
 | 
						|
                                                                 * to world space */
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterPrtColor RpPrtStdEmitterPrtColor;
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdEmitterPrtColor
 | 
						|
 * An optional structure to represent the change in color of a particle from birth to death.
 | 
						|
 * The particles will start with the prtStartCol and ends with endPrtColor. The particle's
 | 
						|
 * life is used to interpolate the colors.
 | 
						|
 *
 | 
						|
 * If this structure is not present, then the particles will have a constant color.
 | 
						|
 */
 | 
						|
struct RpPrtStdEmitterPrtColor
 | 
						|
{
 | 
						|
    RwRGBAReal                  prtStartCol,                    /**< Particle start color */
 | 
						|
                                prtStartColBias;                /**< Particle start color bias */
 | 
						|
    RwRGBAReal                  prtEndCol,                      /**< Particle end color */
 | 
						|
                                prtEndColBias;                  /**< Particle end color bias */
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterPrtTexCoords RpPrtStdEmitterPrtTexCoords;
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdEmitterPrtTexCoords
 | 
						|
 * An optional structure to represent the change in texcoords of a particle from birth to death.
 | 
						|
 * The particles will start with prtStartUV0 and prtStartUV1 and ends with endPrtEndUV0 and endPrtEndUV1.
 | 
						|
 * The particle's life is used to interpolate the texcoords.
 | 
						|
 *
 | 
						|
 * A particle can have two texcoords representing the top left and bottom right respectively. By varying
 | 
						|
 * the texcoords can give an animated texture effect on a particle.
 | 
						|
 *
 | 
						|
 * If this structure is not present, then the particles will have a constant texcoords.
 | 
						|
 */
 | 
						|
struct RpPrtStdEmitterPrtTexCoords
 | 
						|
{
 | 
						|
    RwTexCoords                 prtStartUV0,                        /**< Particle start top left texcoords */
 | 
						|
                                prtStartUV0Bias;                    /**< Particle start top left texcoords bias */
 | 
						|
    RwTexCoords                 prtEndUV0,                          /**< Particle end top left texcoords */
 | 
						|
                                prtEndUV0Bias;                      /**< Particle end top left texcoords bias */
 | 
						|
    RwTexCoords                 prtStartUV1,                        /**< Particle start bottom right texcoords */
 | 
						|
                                prtStartUV1Bias;                    /**< Particle start botton right texcoords bias */
 | 
						|
    RwTexCoords                 prtEndUV1,                          /**< Particle end bottom right texcoords */
 | 
						|
                                prtEndUV1Bias;                      /**< Particle end bottom right texcoords bias */
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterPrtAnimFrame RpPrtStdEmitterPrtAnimFrame;
 | 
						|
 | 
						|
struct RpPrtStdEmitterPrtAnimFrame
 | 
						|
{
 | 
						|
    RwInt32                     prtNumFrames;
 | 
						|
 | 
						|
    RwTexCoords                 *prtAnimFrameTexCoords;
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterPrtSize RpPrtStdEmitterPrtSize;
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdEmitterPrtSize
 | 
						|
 * An optional structure to represent the change in size of a particle from birth to death.
 | 
						|
 * The particles will start with prtStartSize and ends with prtEndSize. The particle's life
 | 
						|
 * is used to interpolate the size.
 | 
						|
 *
 | 
						|
 * If this structure is not present, then the particles will have a constant size.
 | 
						|
 */
 | 
						|
struct RpPrtStdEmitterPrtSize
 | 
						|
{
 | 
						|
    RwV2d                       prtStartSize,                       /**< Particle start size */
 | 
						|
                                prtStartSizeBias;                   /**< Particle start size bias */
 | 
						|
    RwV2d                       prtEndSize,                         /**< Particle end size */
 | 
						|
                                prtEndSizeBias;                     /**< Particle end size bias */
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterPrtMatrix RWALIGN(RpPrtStdEmitterPrtMatrix, rwMATRIXALIGNMENT);
 | 
						|
 | 
						|
struct RpPrtStdEmitterPrtMatrix
 | 
						|
{
 | 
						|
    RwMatrix                    prtCnsMtx;
 | 
						|
 | 
						|
    RwV3d                       prtPosMtxAt,
 | 
						|
                                prtPosMtxAtBias;
 | 
						|
    RwV3d                       prtPosMtxUp,
 | 
						|
                                prtPosMtxUpBias;
 | 
						|
 | 
						|
    RwInt32                     flags;
 | 
						|
};
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
 | 
						|
 | 
						|
enum RpPrtStdPTankPropertyCode
 | 
						|
{
 | 
						|
    rpPRTSTDPTANKPROPPARTICLESMAX                   = 0,
 | 
						|
    rpPRTSTDPTANKPROPDATAFLAGS,
 | 
						|
    rpPRTSTDPTANKPROPPLATFORMFLAGS,
 | 
						|
    rpPRTSTDPTANKPROPPTANK,
 | 
						|
    rpPRTSTDPTANKPROPFORCEENUMSIZEINT               = RWFORCEENUMSIZEINT
 | 
						|
};
 | 
						|
 | 
						|
typedef enum RpPrtStdPTankPropertyCode RpPrtStdPTankPropertyCode;
 | 
						|
 | 
						|
typedef struct RpPrtStdEmitterPTank RpPrtStdEmitterPTank;
 | 
						|
struct RpPrtStdEmitterPTank
 | 
						|
{
 | 
						|
    RwUInt32                    dataFlags,
 | 
						|
                                platFlags,
 | 
						|
                                numPrt,
 | 
						|
                                maxPrt,
 | 
						|
                                updateFlags,
 | 
						|
                                emitFlags;
 | 
						|
    RpAtomic                    *pTank;
 | 
						|
    RwChar                      **dataInPtrs,
 | 
						|
                                **dataOutPtrs;
 | 
						|
    RwInt32                     *dataStride;
 | 
						|
};
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLESTANDARD                0
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLEPOSITION                1
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLECOLOR                   2
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLETEXCOORDS               3
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLEANIMFRAME               4
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLESIZE                    5
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLEVELOCITY                6
 | 
						|
#define rpPRTSTDPROPERTYCODEPARTICLEMATRIX                  7
 | 
						|
 | 
						|
#define rpPRTSTDPARTICLEPROPERTYCOUNT                       8
 | 
						|
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGSTANDARD                    0x00000001
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGPOSITION                    0x00000002
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGCOLOR                       0x00000004
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGTEXCOORDS                   0x00000008
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGANIMFRAME                   0x00000010
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGSIZE                        0x00000020
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGVELOCITY                    0x00000040
 | 
						|
#define rpPRTSTDPARTICLEDATAFLAGMATRIX                      0x00000080
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdParticleStandard
 | 
						|
 * A structure represent the set of properties for a basic particle. This structure is mandatory
 | 
						|
 * for all particles.
 | 
						|
 * The structure contain the life duration of the particle. The particle will be removed when the current
 | 
						|
 * time is greater than the end time. The particle timer always starts at zero.
 | 
						|
 *
 | 
						|
 * The inverted end time is for interpolating optional particle properties.
 | 
						|
 */
 | 
						|
typedef struct RpPrtStdParticleStandard RpPrtStdParticleStandard;
 | 
						|
struct RpPrtStdParticleStandard
 | 
						|
{
 | 
						|
    RwInt32                     flag;                               /**< Particle's property flag */
 | 
						|
    RwReal                      currTime,                           /**< Particle's curr time  */
 | 
						|
                                endTime,                            /**< Particle's end time */
 | 
						|
                                invEndTime;                         /**< Particle's inv end for interpolation */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
typedef struct RpPrtStdParticleColor RpPrtStdParticleColor;
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdParticleColor
 | 
						|
 * A structure representing the change in a particle's color during its life time. The structure is optional
 | 
						|
 * and should not be used if particles have a constant color.
 | 
						|
 */
 | 
						|
struct RpPrtStdParticleColor
 | 
						|
{
 | 
						|
    RwRGBAReal                  startCol,                           /**< Particle's end size bias */
 | 
						|
                                deltaCol;                           /**< Particle's color rate of change */
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdParticleTexCoords RpPrtStdParticleTexCoords;
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdParticleTexCoords
 | 
						|
 * A structure representing the change in a particle's texcoords during its life time. The structure is optional
 | 
						|
 * and should not be used if particles have a constant texcoords.
 | 
						|
 */
 | 
						|
struct RpPrtStdParticleTexCoords
 | 
						|
{
 | 
						|
    RwTexCoords                 startUV0,                           /**< Particle's starting top left texcoords */
 | 
						|
                                startUV1;                           /**< Particle's starting bottom right texcoords */
 | 
						|
    RwTexCoords                 deltaUV0,                           /**< Particle's top left texcoords rate of change */
 | 
						|
                                deltaUV1;                           /**< Particle's bottom right texcoords rate of change */
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdParticleAnimFrame RpPrtStdParticleAnimFrame;
 | 
						|
 | 
						|
struct RpPrtStdParticleAnimFrame
 | 
						|
{
 | 
						|
    RwInt32                     frame;
 | 
						|
 | 
						|
    RwReal                      delta;
 | 
						|
};
 | 
						|
 | 
						|
typedef struct RpPrtStdParticleSize RpPrtStdParticleSize;
 | 
						|
 | 
						|
/**
 | 
						|
 * \ingroup rpprtstd
 | 
						|
 * \struct RpPrtStdParticleSize
 | 
						|
 * A structure representing the change in a particle's size during its life time. The structure is optional
 | 
						|
 * and should not be used if particles have a constant size.
 | 
						|
 */
 | 
						|
struct RpPrtStdParticleSize
 | 
						|
{
 | 
						|
    RwV2d                       startSize,                          /**< Particle's starting size */
 | 
						|
                                deltaSize;                          /**< Particle's size rate of change */
 | 
						|
    RwV2d                       currSize,                           /**< Particle's current size. Internal use only */
 | 
						|
                                invCurrSize;                        /**< Particle's inverse current size. Internal use only */
 | 
						|
};
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
#ifdef    __cplusplus
 | 
						|
extern "C"
 | 
						|
{
 | 
						|
#endif         /* __cplusplus */
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpParticleStandardPluginAttach( void );
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RpAtomic *
 | 
						|
RpPrtStdAtomicCreate(RpPrtStdEmitterClass *eClass, void *data);
 | 
						|
 | 
						|
extern RpAtomic *
 | 
						|
RpPrtStdAtomicUpdate(RpAtomic *atomic, void *data);
 | 
						|
 | 
						|
extern RpAtomic *
 | 
						|
RpPrtStdAtomicSetEmitter(RpAtomic *atomic, RpPrtStdEmitter *emt);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdAtomicGetEmitter(RpAtomic *atomic);
 | 
						|
 | 
						|
extern RpAtomic *
 | 
						|
RpPrtStdAtomicForAllEmitter(RpAtomic *atomic,
 | 
						|
                            RpPrtStdEmitterCallBack callback,
 | 
						|
                            void *data);
 | 
						|
 | 
						|
extern RpAtomic *
 | 
						|
RpPrtStdAtomicAddEmitter(RpAtomic *,
 | 
						|
                         RpPrtStdEmitter *emt);
 | 
						|
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterCreate(RpPrtStdEmitterClass *eClass);
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdEmitterDestroy(RpPrtStdEmitter *emt);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterForAllParticleBatch(RpPrtStdEmitter *emt,
 | 
						|
                                    RpPrtStdParticleCallBack callback,
 | 
						|
                                    void * data);
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterAddEmitter(RpPrtStdEmitter *emtHead,
 | 
						|
                          RpPrtStdEmitter *emt);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterLinkPTank(RpPrtStdEmitter *emt,RpAtomic *ptank);
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterDestroyParticleBatch(RpPrtStdEmitter *emt);
 | 
						|
 | 
						|
extern RpPrtStdParticleBatch *
 | 
						|
RpPrtStdEmitterNewParticleBatch(RpPrtStdEmitter *emt);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterAddParticleBatch(RpPrtStdEmitter *emt,
 | 
						|
                                RpPrtStdParticleBatch *prtBatch);
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterSetPClass(RpPrtStdEmitter *emt,
 | 
						|
                                 RpPrtStdParticleClass *pClass,
 | 
						|
                                 RwInt32 maxPrt);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterGetPClass(RpPrtStdEmitter *emt,
 | 
						|
                                 RpPrtStdParticleClass **pClass,
 | 
						|
                                 RwInt32 *maxPrt);
 | 
						|
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RpPrtStdParticleBatch *
 | 
						|
RpPrtStdParticleBatchCreate(RpPrtStdParticleClass *pClass, RwInt32 maxPrt);
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdParticleBatchDestroy(RpPrtStdParticleBatch *prtBatch);
 | 
						|
 | 
						|
extern RpPrtStdParticleBatch *
 | 
						|
RpPrtStdParticleBatchAddBatch(RpPrtStdParticleBatch *prtBatchHead,
 | 
						|
                              RpPrtStdParticleBatch *prtBatch);
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RpPrtStdPropertyTable *
 | 
						|
RpPrtStdPropTabCreate(RwInt32 numProp,
 | 
						|
                            RwInt32 *propID, RwInt32 *propStride);
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdPropTabDestroy(RpPrtStdPropertyTable *propTab);
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdPropertyTable *
 | 
						|
RpPrtStdPropTabGetProperties(RpPrtStdPropertyTable *propTab,
 | 
						|
                             RwInt32 *numProp,
 | 
						|
                             RwInt32 **propID,
 | 
						|
                             RwInt32 **propOffset,
 | 
						|
                             RwInt32 **propSize);
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdPropTabGetPropOffset(RpPrtStdPropertyTable *propTab,
 | 
						|
                             RwInt32 propID);
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdPropTabGetPropIndex(RpPrtStdPropertyTable *propTab,
 | 
						|
                            RwInt32 propID);
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdPropertyTable *
 | 
						|
RpPrtStdPropTabGet(RwInt32 id);
 | 
						|
 | 
						|
extern RpPrtStdPropertyTable *
 | 
						|
RpPrtStdPropTabStreamRead(RwStream *stream);
 | 
						|
 | 
						|
extern RpPrtStdPropertyTable *
 | 
						|
RpPrtStdPropTabStreamWrite(RpPrtStdPropertyTable *eClass,
 | 
						|
                           RwStream *stream);
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdPropTabStreamGetSize(RpPrtStdPropertyTable *eClass);
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdEClassDestroy(RpPrtStdEmitterClass *eClass);
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassCreate( void );
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassSetCallBack(RpPrtStdEmitterClass *eClass,
 | 
						|
                                RwInt32 numCallback,
 | 
						|
                                RpPrtStdEmitterCallBackArray *emtCB);
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassGetCallBack(RpPrtStdEmitterClass *eClass,
 | 
						|
                           RwInt32 *numCallback,
 | 
						|
                           RpPrtStdEmitterCallBackArray **emtCB);
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassSetPropTab(RpPrtStdEmitterClass *eClass,
 | 
						|
                         RpPrtStdPropertyTable *propTab);
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassGetPropTab(RpPrtStdEmitterClass *eClass,
 | 
						|
                         RpPrtStdPropertyTable **propTab);
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassGet(RwInt32 id);
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassStreamRead(RwStream *stream);
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassStreamWrite(RpPrtStdEmitterClass *eClass,
 | 
						|
                                 RwStream *stream);
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdEClassStreamGetSize(RpPrtStdEmitterClass *eClass);
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassCreate( void );
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdPClassDestroy(RpPrtStdParticleClass *pClass);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassSetCallBack(RpPrtStdParticleClass *pClass,
 | 
						|
                                 RwInt32 numCallback,
 | 
						|
                                 RpPrtStdParticleCallBackArray *prtCB);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassGetCallBack(RpPrtStdParticleClass *pClass,
 | 
						|
                                 RwInt32 *numCallback,
 | 
						|
                                 RpPrtStdParticleCallBackArray **prtCB);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassSetPropTab(RpPrtStdParticleClass *pClass,
 | 
						|
                                      RpPrtStdPropertyTable *propTab);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassGetPropTab(RpPrtStdParticleClass *pClass,
 | 
						|
                                      RpPrtStdPropertyTable **propTab);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassGet(RwInt32 id);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassStreamRead(RwStream *stream);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassStreamWrite(RpPrtStdParticleClass *pClass,
 | 
						|
                                 RwStream *stream);
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdPClassStreamGetSize(RpPrtStdParticleClass *pClass);
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdSetEClassSetupCallBack(RpPrtStdEClassSetupCallBack emtCB);
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdGetEClassSetupCallBack(RpPrtStdEClassSetupCallBack *emtCB);
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdSetPClassSetupCallBack(RpPrtStdPClassSetupCallBack prtCB);
 | 
						|
 | 
						|
extern RwBool
 | 
						|
RpPrtStdGetPClassSetupCallBack(RpPrtStdPClassSetupCallBack *prtCB);
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
 | 
						|
extern RwStream *
 | 
						|
RpPrtStdGlobalDataStreamRead(RwStream *stream);
 | 
						|
 | 
						|
extern RwStream *
 | 
						|
RpPrtStdGlobalDataStreamWrite(RwStream *stream);
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdGlobalDataStreamGetSize( void );
 | 
						|
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterDefaultCB(RpAtomic * atomic,
 | 
						|
                         RpPrtStdEmitter *prtEmt, void * data);
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdParticleBatch *
 | 
						|
RpPrtStdParticleDefaultCB(RpPrtStdEmitter * prtEmt,
 | 
						|
                          RpPrtStdParticleBatch *prtBatch, void * data);
 | 
						|
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
extern RpPrtStdParticleBatch *
 | 
						|
RpPrtStdParticleStdUpdateCB(RpPrtStdEmitter *emt,
 | 
						|
                                 RpPrtStdParticleBatch *prtBatch, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdEmitCB(RpAtomic *atomic,
 | 
						|
                              RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdCreateCB(RpAtomic *atomic,
 | 
						|
                                RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdBeginUpdateCB(RpAtomic *atomic,
 | 
						|
                                     RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdEndUpdateCB(RpAtomic *atomic,
 | 
						|
                                   RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdRenderCB(RpAtomic *atomic,
 | 
						|
                                RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdStreamReadCB(RpAtomic *atomic,
 | 
						|
                                    RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdStreamWriteCB(RpAtomic *atomic,
 | 
						|
                                     RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
extern RpPrtStdEmitter *
 | 
						|
RpPrtStdEmitterStdStreamGetSizeCB(RpAtomic *atomic,
 | 
						|
                                       RpPrtStdEmitter *emt, void *data);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassStdCreate( RwInt32 dataFlag );
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdEClassStdCreateID( RwInt32 dataFlag );
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassStdCreate( RwInt32 dataFlag );
 | 
						|
 | 
						|
extern RwInt32
 | 
						|
RpPrtStdPClassStdCreateID( RwInt32 dataFlag );
 | 
						|
 | 
						|
extern RpPrtStdEmitterClass *
 | 
						|
RpPrtStdEClassStdSetupCB(RpPrtStdEmitterClass *eClass);
 | 
						|
 | 
						|
extern RpPrtStdParticleClass *
 | 
						|
RpPrtStdPClassStdSetupCB(RpPrtStdParticleClass *pClass);
 | 
						|
 | 
						|
 | 
						|
#ifdef    __cplusplus
 | 
						|
}
 | 
						|
#endif         /* __cplusplus */
 | 
						|
 | 
						|
/*---- end: ./prtstd.h----*/
 | 
						|
 | 
						|
/*---- start: c:/daily/rwsdk/plugin/prtstd/d3d8/prtstdplatform.h----*/
 | 
						|
/*---- end: c:/daily/rwsdk/plugin/prtstd/d3d8/prtstdplatform.h----*/
 | 
						|
 | 
						|
#endif /* RPPRTSTD_H */
 | 
						|
 | 
						|
 |