#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__