/********************************************************************
*
* File: fsCParticleEmitterComponent.h
*
* Purpose: A component which holds a ParticleEmitter.
*
*********************************************************************/
#ifndef fsCParticleEmitterComponenthdr
#define fsCParticleEmitterComponenthdr
#include <functional>
#include <fsCore/src/fsCUniqueId.h>
#include "fsIRenderableComponent.h"
class fsCParticleEmitter;
class fsCResourceName;
class fsCSprite;
class fsCEntity;
class fsRect;
struct fsPoint;
class fsIParticle;
class fsCParticleEmitterComponent : public fsIRenderableComponent
{
friend class fsCComponentFactory;
public:
static const fsStr mEntityPrefix;
static const fsCUniqueId mTypeId;
fsS32 remainingParticleCountGet() const;
const fsStr& collectableTypeGet() const;
fsBool collectableGet() const;
fsS32 photoScoreGet(const fsRect& pScreenRect) const;
fsBool hitTestAndCollect(const fsPoint& pPointerPos, std::function<void(fsIParticle* pParticle)> pCallBack) const;
fsBool hitTest(const fsPoint& pPointerPos) const;
void shortCircuit();
fsBool activeGet() const;
void visibleSet(fsBool pState);
void particleEmitterParentEntSet(fsCEntity* pParent = nullptr) const;
void particelDataLoad(const fsCResourceName& pFileName);
protected:
static fsIComponent* create(fsCEntity* pParent);
virtual void particelDataLoadDo(const fsCResourceName& pFileName);
void initialiseFromVariableTableDo(const fsCVariableTable& pVars) override;
void updateDo(fsS32 pDeltaMs) override;
void renderDo() override;
void matrixApplyDo() override;
void finaliseDo() override;
fsCParticleEmitterComponent(fsCEntity* pParent);
virtual ~fsCParticleEmitterComponent();<--- Destructor in derived class
std::unique_ptr<fsCParticleEmitter> mEmitter;
private:
fsBool mVisibele;
};
#endif