CCParticleSystemQuad

#ifndef __CC_PARTICLE_SYSTEM_QUAD_H__

#define __CC_PARTICLE_SYSTEM_QUAD_H__


#include  "CCParticleSystem.h"


NS_CC_BEGIN


class CCSpriteFrame;


/**

 * @addtogroup particle_nodes

 * @{

 */


/** @brief CCParticleSystemQuad is a subclass of CCParticleSystem


It includes all the features of ParticleSystem.


Special features and Limitations:    

- Particle size can be any float number.

- The system can be scaled

- The particles can be rotated

- It supports subrects

- It supports batched rendering since 1.1

@since v0.8

*/

class CC_DLL CCParticleSystemQuad : public CCParticleSystem

{

protected:

    ccV3F_C4B_T2F_Quad    *m_pQuads;        // quads to be rendered

    GLushort            *m_pIndices;    // indices


#if CC_TEXTURE_ATLAS_USE_VAO

    GLuint                m_uVAOname;

#endif


    GLuint                m_pBuffersVBO[2]; //0: vertex  1: indices


public:

    CCParticleSystemQuad();

    virtual ~CCParticleSystemQuad();


    /** creates an initializes a CCParticleSystemQuad from a plist file.

    This plist files can be created manually or with Particle Designer:  

    */

    static CCParticleSystemQuad * create(const char *plistFile);


    /** initializes the indices for the vertices*/

    void initIndices();


    /** initializes the texture with a rectangle measured Points */

    void initTexCoordsWithRect(const CCRect& rect);


    /** Sets a new CCSpriteFrame as particle.

    WARNING: this method is experimental. Use setTexture:withRect instead.

    @since v0.99.4

    */

    void setDisplayFrame(CCSpriteFrame *spriteFrame);


    /** Sets a new texture with a rect. The rect is in Points.

    @since v0.99.4

    */

    void setTextureWithRect(CCTexture2D *texture, const CCRect& rect);

    // super methods

    virtual bool initWithTotalParticles(unsigned int numberOfParticles);

    virtual void setTexture(CCTexture2D* texture);

    virtual void updateQuadWithParticle(tCCParticle* particle, const CCPoint& newPosition);

    virtual void postStep();

    virtual void draw();

    virtual void setBatchNode(CCParticleBatchNode* batchNode);

    virtual void setTotalParticles(unsigned int tp);

    

    /** listen the event that coming to foreground on Android

     */

    void listenBackToForeground(CCObject *obj);


    static CCParticleSystemQuad * create();

    static CCParticleSystemQuad * createWithTotalParticles(unsigned int numberOfParticles);

private:

#if CC_TEXTURE_ATLAS_USE_VAO

    void setupVBOandVAO();

#else

    void setupVBO();

#endif

    bool allocMemory();

};


// end of particle_nodes group

/// @}


NS_CC_END


#endif //__CC_PARTICLE_SYSTEM_QUAD_H__


posted @ 2014-05-22 09:37  sssssnian  阅读(139)  评论(0)    收藏  举报