#pragma once #include "Tree/Instance.hpp" #include "DataModel/Effect.hpp" #include "DataModel/PartInstance.hpp" #include "Utility/TextureId.hpp" #include "DataModel/NumberSequence.hpp" #include "DataModel/ColorSequence.hpp" #include "DataModel/NumberRange.hpp" namespace Aya { extern const char* const sParticleEmitter; class CustomParticleEmitter : public DescribedCreatable , public Effect { typedef DescribedCreatable Base; public: CustomParticleEmitter(); virtual ~CustomParticleEmitter(); static Reflection::PropDescriptor prop_texture; static Reflection::PropDescriptor prop_color; static Reflection::PropDescriptor prop_transp; static Reflection::PropDescriptor prop_size; static Reflection::PropDescriptor prop_enabled; static Reflection::PropDescriptor prop_lightEmission; static Reflection::PropDescriptor prop_rate; static Reflection::PropDescriptor prop_speed; static Reflection::PropDescriptor prop_spread; static Reflection::PropDescriptor prop_rotation; static Reflection::PropDescriptor prop_rotSpeed; static Reflection::PropDescriptor prop_lifetime; static Reflection::PropDescriptor prop_accel; static Reflection::PropDescriptor prop_zOffset; static Reflection::PropDescriptor prop_velocityInheritance; static Reflection::PropDescriptor prop_dampening; static Reflection::PropDescriptor prop_lockedToLocalSpace; static Reflection::EnumPropDescriptor prop_emissionDirection; static Reflection::RemoteEventDesc event_onEmitRequested; static Reflection::BoundFuncDesc desc_burst; bool getEnabled() const { return enabled; } float getLightEmission() const { return lightEmission; } float getRate() const { return rate; } const NumberRange& getSpeed() const { return speed; } float getSpread() const { return spread; } const NumberRange& getRotation() const { return rotation; } const NumberRange& getRotSpeed() const { return rotSpeed; } const NumberRange& getLifetime() const { return lifetime; } const Vector3& getAccel() const { return accel; } float getZOffset() const { return zOffset; } void setEnabled(bool v); void setLightEmission(float v); void setRate(float v); void setSpeed(const NumberRange& v); void setSpread(float v); void setRotation(const NumberRange& v); void setRotSpeed(const NumberRange& v); void setLifetime(const NumberRange& v); void setAccel(const Vector3& v); void setZOffset(float v); Aya::remote_signal onEmitRequested; const TextureId& getTexture() const; void setTexture(const TextureId& id); const NumberSequence& getTransparency() const; void setTransparency(const NumberSequence& v); const ColorSequence& getColor() const; void setColor(const ColorSequence& val); const NumberSequence& getSize() const; void setSize(const NumberSequence& val); float getVelocityInheritance() const { return velocityInheritance; } void setVelocityInheritance(float value); float getDampening() const { return dampening; } void setDampening(float value); bool getLockedToLocalSpace() const { return lockedToLocalSpace; } void setLockedToLocalSpace(bool value); void requestBurst(int value); NormalId getEmissionDirection() const { return emissionDirection; } void setEmissionDirection(NormalId value); private: TextureId texture; ColorSequence color; NumberSequence transparency; NumberSequence size; bool enabled; float lightEmission; float rate; NumberRange speed; float spread; NumberRange rotation; NumberRange rotSpeed; NumberRange lifetime; Vector3 accel; float zOffset; float velocityInheritance; float dampening; bool lockedToLocalSpace; NormalId emissionDirection; virtual bool askSetParent(const Instance* parent) const { return Instance::fastDynamicCast(parent) != NULL; } virtual bool askAddChild(const Instance* instance) const { return false; } virtual void onAncestorChanged(const AncestorChanged& event); }; } // namespace Aya