123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607 |
- //
- // RParticleSystem.h
- // cocos2d_libs
- //
- // Created by 徐俊杰 on 2020/4/25.
- //
- #ifndef RParticleSystem_h
- #define RParticleSystem_h
- //#include "cocos2d.h"
- #include "rparticle/Macros/RParticleMacros.h"
- #include "base/CCDirector.h"
- #include "rparticle/Modules/ParticleSystemModule.h"
- #include "rparticle/ParticleSystemParticle.h"
- #include "rparticle/Modules/EmissionModule.h"
- #include "rparticle/Modules/InitialModule.h"
- #include "rparticle/Modules/ShapeModule.h"
- #include "renderer/CCCustomCommand.h"
- #include "renderer/CCQuadCommand.h"
- #include "renderer/CCMaterial.h"
- #include "base/CCRefPtr.h"
- #include "2d/IEditorNodeLoadListener.h"
- #include "rparticle/Datas/EditorDatas.h"
- #if REDREAM_EDITOR
- namespace cocos2d {
- class DrawNode3D;
- }
- #endif
- NS_RRP_BEGIN
- //注意:传入时间(无),Render,Transform 这3个相关的操作可能会有问题,还需要验证。
- //todo :碰撞
- class ParticleSystemRenderer;
- class RParticleSystem;
- class CollisionModule;
- class RotationModule;
- class RotationBySpeedModule;
- class SubModule;
- class SubEmitterModule;
- class ExternalForcesModule;
- class VelocityModule;
- class ForceModule;
- class ClampVelocityModule;
- class SizeModule;
- class ColorModule;
- class UVModule;
- class SizeBySpeedModule;
- class ColorBySpeedModule;
- class CC_DLL RParticleSystem : public cocos2d::Node, public cocos2d::TextureProtocol, public IEditorNodeLoadListener
- {
- public:
- enum
- {
- kParticleBuffer0,
- #if UNITY_EDITOR // Double buffered + interpolation
- kParticleBuffer1,
- #endif
- kNumParticleBuffers,
- };
-
- template<class TransferFunction> void Transfer (TransferFunction& transfer);
-
- static RParticleSystem* create();
- ~RParticleSystem();
-
- static void SyncJobs();
- static void BeginUpdateAll();
- static void EndUpdateAll();
- static void Emit(RParticleSystem& system, const SubEmitterEmitCommand& command, ParticleSystemEmitMode emitMode);
- inline bool IsActive () const
- {
- // return _bActive;
- //TODO: 应该递归判断父节点
- return this->isVisible();
- }
-
- float GetLengthInSec () const;
- ParticleSystemParticles& GetParticles (int index = -1);
- size_t GetParticleCount () const;
- static size_t EmitFromData (const ParticleSystemReadOnlyState& roState, ParticleSystemEmissionState& emissionState, size_t& numContinuous, const ParticleSystemEmissionData& emissionData, const Vector3f velocity, float fromT, float toT, float dt, float length);
-
- void Stop ();
- bool GetLoop () const;
-
- void Play (bool autoPrewarm = true);
- void Clear (bool updateBounds = true);
-
- void AwakeFromLoadGroup ();
- void PlayGroup ();
- void StopGroup ();
- void ClearGroup ();
- void StopAndClearGroup();
- bool IsPlaying () const;
- void GetNumTiles(int& uvTilesX, int& uvTilesY) const;
-
- void onEnter() override;
- void onExit() override;
- virtual void setVisible(bool visible) override;
-
- void onEditorNodeLoaded() { AwakeFromLoad(); }
- cocos2d::CustomCommand _command;
- cocos2d::QuadCommand _quadCommand;
- virtual void draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, uint32_t flags) override;
- void onDraw();
-
- #if REDREAM_EDITOR
- cocos2d::DrawNode3D* drawNode = nullptr;
- void OnDrawGizmosSelected();
- #endif
-
- private:
- static void Update0 (RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, float dt, bool fixedTimeStep);
- static void Update1 (RParticleSystem& system, ParticleSystemParticles& ps, float dt, bool fixedTimeStep, bool useProcedural, int rayBudget = 0);
- static void Update2 (RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, bool fixedTimeStep);
- static void Update1Incremental(RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, ParticleSystemParticles& ps, size_t fromIndex, float dt, bool useProcedural);
- static void UpdateProcedural(RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, ParticleSystemParticles& ps);
- static void UpdateBounds(const RParticleSystem& system, const ParticleSystemParticles& ps, ParticleSystemState& state);
- static void UpdateModulesPreSimulationIncremental (const RParticleSystem& system, const ParticleSystemReadOnlyState& roState, const ParticleSystemState& state, ParticleSystemParticles& ps, const size_t fromIndex, const size_t toIndex, float dt);
- static void UpdateModulesIncremental (const RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, ParticleSystemParticles& ps, size_t fromIndex, float dt);
- static void SimulateParticles (const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, ParticleSystemParticles& ps, const size_t fromIndex, float dt);
- static void UpdateModulesPostSimulationIncremental (const RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, ParticleSystemParticles& ps, const size_t fromIndex, float dt);
-
- static void UpdateModulesNonIncremental (const RParticleSystem& system, const ParticleSystemParticles& ps, ParticleSystemParticlesTempData& psTemp, int fromIndex, int toIndex);
-
- static size_t EmitFromModules (const RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemEmissionState& emissionState, size_t& numContinuous, const Vector3f velocity, float fromT, float toT, float dt);
-
- static void StartModules (RParticleSystem& system, const ParticleSystemReadOnlyState& roState, ParticleSystemState& state, const ParticleSystemEmissionState& emissionState, Vector3f initialVelocity, const Matrix4x4f& matrix, ParticleSystemParticles& ps, size_t fromIndex, float dt, float t, size_t numContinuous, float frameOffset);
-
- static void StartParticles(RParticleSystem& system, ParticleSystemParticles& ps, const float prevT, const float t, const float dt, const size_t numContinuous, size_t amountOfParticlesToEmit, float frameOffset);
-
- static void StartParticlesProcedural(RParticleSystem& system, ParticleSystemParticles& ps, const float prevT, const float t, const float dt, const size_t numContinuous, size_t amountOfParticlesToEmit, float frameOffset);
-
- static void AddStagingBuffer(RParticleSystem& system);
- static int SetupSubEmitters(RParticleSystem& shuriken, ParticleSystemState& state);
-
- static bool CheckSupportsProcedural(const RParticleSystem& system);
-
- static void PlaybackSubEmitterCommandBuffer(const RParticleSystem& shuriken, ParticleSystemState& state, bool fixedTimeStep);
-
- bool GetIsDistanceEmitter() const;
- size_t AddNewParticles(ParticleSystemParticles& particles, size_t newParticles) const;
- size_t LimitParticleCount(size_t requestSize) const;
- void KeepUpdating();
-
- void SetUsesAxisOfRotation();
-
- void Cull();
- private:
- RParticleSystem();
- bool init() override;
- void AwakeFromLoad();
- RParticleSystem* FindGroupRoot();
- void AwakeFromLoadTree();
- void PlayTree();
- void StopTree();
- void ClearTree();
- void StopAndClearTree();
- //void WalkTree(std::function<void(RParticleSystem*)> func);
-
- void AddToManager();
- void RemoveFromManager();
- void SetUsesRotationalSpeed();
- void SetUsesEmitAccumulator(int numAccumulators);
-
- /** initializes the texture with a rectangle measured Points */
- void initTexCoordsWithRect(const cocos2d::Rect& rect, bool isrotaed, const cocos2d::Vec2& offset, const cocos2d::Vec2& originalSize);
- void setTextureInternal(cocos2d::Texture2D* spriteFrame);
- void setTextureWithRect(cocos2d::Texture2D* texture, const cocos2d::Rect& rect, bool isRotated, const cocos2d::Vec2& offset, const cocos2d::Vec2 &originalSize);
- void TransferMinMaxCurveToData(const MinMaxCurve& curve, MinMaxCurveData &data) const;
- void TransferMinMaxCurveFromData(MinMaxCurve& curve, const MinMaxCurveData &data);
- void TransferMinMaxGradientToData(const MinMaxGradient& gradient, MinMaxGradientData &data) const;
- void TransferMinMaxGradientFromData(MinMaxGradient& gradient, const MinMaxGradientData &data);
- void TransferEmissionToData(const ParticleSystemEmissionData& emission, EmissionData &data) const;
- void TransferEmissionFromData(ParticleSystemEmissionData& emission, const EmissionData& data);
- public:
- const ColorModule* GetColorModule() const { return m_ColorModule; }
- const ColorBySpeedModule* GetColorBySpeedModule() const { return m_ColorBySpeedModule; }
- const SizeModule* GetSizeModule() const { return m_SizeModule; }
- const SizeBySpeedModule* GetSizeBySpeedModule() const { return m_SizeBySpeedModule; }
- // Getters Setters for Editor
- // m_ReadOnlyState
- void setLengthInSec(float value) { m_ReadOnlyState->lengthInSec = value; }
- float getLengthInSec() const { return m_ReadOnlyState->lengthInSec; }
- void setStartDelay(float value) { m_ReadOnlyState->startDelay = value; }
- float getStartDelay() const { return m_ReadOnlyState->startDelay; }
- void setSpeed(float value) { m_ReadOnlyState->speed = value; }
- float getSpeed() const { return m_ReadOnlyState->speed; }
- void setRandomSeed(UInt32 value) { m_ReadOnlyState->randomSeed = value; }
- UInt32 getRandomSeed() const { return m_ReadOnlyState->randomSeed; }
- void setLooping(bool value) { m_ReadOnlyState->looping = value; }
- bool getLooping() const { return m_ReadOnlyState->looping; }
- void setPrewarm(bool value) { m_ReadOnlyState->prewarm = value; }
- bool getPrewarm() const { return m_ReadOnlyState->prewarm; }
- void setScalingMode(int value) { m_ReadOnlyState->scalingMode = value; }
- int getScalingMode() const { return m_ReadOnlyState->scalingMode; }
- void setPlayOnAwake(bool value) { m_ReadOnlyState->playOnAwake = value; }
- bool getPlayOnAwake() const { return m_ReadOnlyState->playOnAwake; }
- void setUseLocalSpace(bool value) { m_ReadOnlyState->useLocalSpace = value; }
- bool getUseLocalSpace() const { return m_ReadOnlyState->useLocalSpace; }
- // m_InitialModule
- // void setInitialModuleEnabled(bool value) { m_InitialModule.SetEnabled(value); }
- // bool getInitialModuleEnabled() const { return m_InitialModule.GetEnabled(); }
- void setInitialModuleLifetime(const MinMaxCurveData& value) {
- TransferMinMaxCurveFromData(m_InitialModule.GetLifeTimeCurve(), value);
- }
- MinMaxCurveData getInitialModuleLifetime() const {
- MinMaxCurveData data;
- TransferMinMaxCurveToData(m_InitialModule.GetLifeTimeCurve(), data);
- return data;
- }
- void setInitialModuleSpeed(const MinMaxCurveData& value) {
- TransferMinMaxCurveFromData(m_InitialModule.GetSpeedCurve(), value);
- }
- MinMaxCurveData getInitialModuleSpeed() const {
- MinMaxCurveData data;
- TransferMinMaxCurveToData(m_InitialModule.GetSpeedCurve(), data);
- return data;
- }
- void setInitialModuleColor(const MinMaxGradientData& value) {
- TransferMinMaxGradientFromData(m_InitialModule.GetColor(), value);
- }
- MinMaxGradientData getInitialModuleColor() const {
- MinMaxGradientData data;
- TransferMinMaxGradientToData(m_InitialModule.GetColor(), data);
- return data;
- }
- void setInitialModuleSize(const MinMaxCurveData& value) {
- TransferMinMaxCurveFromData(m_InitialModule.GetSizeCurve(), value);
- }
- MinMaxCurveData getInitialModuleSize() const {
- MinMaxCurveData data;
- TransferMinMaxCurveToData(m_InitialModule.GetSizeCurve(), data);
- return data;
- }
- void setInitialModuleRotation(const MinMaxCurveData& value) {
- TransferMinMaxCurveFromData(m_InitialModule.GetRotationCurve(), value);
- }
- MinMaxCurveData getInitialModuleRotation() const {
- MinMaxCurveData data;
- TransferMinMaxCurveToData(m_InitialModule.GetRotationCurve(), data);
- return data;
- }
- void setInitialModuleGravityModifier(float value) { m_InitialModule.SetGravityModifier(value); }
- float getInitialModuleGravityModifier() const { return m_InitialModule.GetGravityModifier(); }
- void setInitialModuleInheritVelocity(float value) { m_InitialModule.SetInheritVelocity(value); }
- float getInitialModuleInheritVelocity() const { return m_InitialModule.GetInheritVelocity(); }
- void setInitialModuleMaxNumParticles(int value) { m_InitialModule.SetMaxNumParticles(value); }
- int getInitialModuleMaxNumParticles() const { return m_InitialModule.GetMaxNumParticles(); }
- // m_EmissionModule
- void setEmissionModuleEnabled(bool value) { m_EmissionModule.SetEnabled(value); }
- bool getEmissionModuleEnabled() const { return m_EmissionModule.GetEnabled(); }
- void setEmissionModuleType(int value) { m_EmissionModule.GetEmissionData().type = value; }
- int getEmissionModuleType() const { return m_EmissionModule.GetEmissionData().type; }
- void setEmissionModuleRate(const MinMaxCurveData& value) {
- TransferMinMaxCurveFromData(m_EmissionModule.GetEmissionData().rate, value);
- }
- MinMaxCurveData getEmissionModuleRate() const {
- MinMaxCurveData data;
- TransferMinMaxCurveToData(m_EmissionModule.GetEmissionData().rate, data);
- return data;
- }
- /*
- void setEmissionModuleBurstTime0(float value) { m_EmissionModule.GetEmissionData().burstTime[0] = value; }
- float getEmissionModuleBurstTime0() const { return m_EmissionModule.GetEmissionData().burstTime[0]; }
- void setEmissionModuleBurstTime1(float value) { m_EmissionModule.GetEmissionData().burstTime[1] = value; }
- float getEmissionModuleBurstTime1() const { return m_EmissionModule.GetEmissionData().burstTime[1]; }
- void setEmissionModuleBurstTime2(float value) { m_EmissionModule.GetEmissionData().burstTime[2] = value; }
- float getEmissionModuleBurstTime2() const { return m_EmissionModule.GetEmissionData().burstTime[2]; }
- void setEmissionModuleBurstTime3(float value) { m_EmissionModule.GetEmissionData().burstTime[3] = value; }
- float getEmissionModuleBurstTime3() const { return m_EmissionModule.GetEmissionData().burstTime[3]; }
- void setEmissionModuleBurstParticleCount0(UInt16 value) { m_EmissionModule.GetEmissionData().burstParticleCount[0] = value; }
- UInt16 getEmissionModuleBurstParticleCount0() const { return m_EmissionModule.GetEmissionData().burstParticleCount[0]; }
- void setEmissionModuleBurstParticleCount1(UInt16 value) { m_EmissionModule.GetEmissionData().burstParticleCount[1] = value; }
- UInt16 getEmissionModuleBurstParticleCount1() const { return m_EmissionModule.GetEmissionData().burstParticleCount[1]; }
- void setEmissionModuleBurstParticleCount2(UInt16 value) { m_EmissionModule.GetEmissionData().burstParticleCount[2] = value; }
- UInt16 getEmissionModuleBurstParticleCount2() const { return m_EmissionModule.GetEmissionData().burstParticleCount[2]; }
- void setEmissionModuleBurstParticleCount3(UInt16 value) { m_EmissionModule.GetEmissionData().burstParticleCount[3] = value; }
- UInt16 getEmissionModuleBurstParticleCount3() const { return m_EmissionModule.GetEmissionData().burstParticleCount[3]; }
- void setEmissionModuleBurstCount(UInt8 value) { m_EmissionModule.GetEmissionData().burstCount = value; }
- UInt8 getEmissionModuleBurstCount() const { return m_EmissionModule.GetEmissionData().burstCount; }
- */
- void setEmissionModuleBurstData(const EmissionData& value);
- EmissionData getEmissionModuleBurstData() const {
- EmissionData data;
- TransferEmissionToData(m_EmissionModule.GetEmissionData(), data);
- return data;
- }
- // m_ShapeModule
- void setShapeModuleEnabled(bool value) { m_ShapeModule.SetEnabled(value); }
- bool getShapeModuleEnabled() const { return m_ShapeModule.GetEnabled(); }
- void setShapeModuleType(int value) { m_ShapeModule.SetType(value); }
- int getShapeModuleType() const { return m_ShapeModule.GetType(); }
- void setShapeModuleRadius(float value) { m_ShapeModule.SetRadius(value); }
- float getShapeModuleRadius() const { return m_ShapeModule.GetRadius(); }
- void setShapeModuleRadiusThickness(float value) { m_ShapeModule.SetRadiusThickness(value); }
- float getShapeModuleRadiusThickness() const { return m_ShapeModule.GetRadiusThickness(); }
- void setShapeModuleAngle(float value) { m_ShapeModule.SetAngle(value); }
- float getShapeModuleAngle() const { return m_ShapeModule.GetAngle(); }
- void setShapeModuleLength(float value) { m_ShapeModule.SetLength(value); }
- float getShapeModuleLength() const { return m_ShapeModule.GetLength(); }
- void setShapeModuleArc(float value) { m_ShapeModule.SetArc(value); }
- float getShapeModuleArc() const { return m_ShapeModule.GetArc(); }
- void setShapeModuleBurstSpread(bool value) { m_ShapeModule.SetBurstSpread(value); }
- bool getShapeModuleBurstSpread() const { return m_ShapeModule.GetBurstSpread(); }
- void setShapeModuleSpreadSpaceThickness(float value) { m_ShapeModule.SetSpreadSpaceThickness(value); }
- float getShapeModuleSpreadSpaceThickness() const { return m_ShapeModule.GetSpreadSpaceThickness(); }
- void setShapeModuleBoxX(float value) { m_ShapeModule.SetBoxX(value); }
- float getShapeModuleBoxX() const { return m_ShapeModule.GetBoxX(); }
- void setShapeModuleBoxY(float value) { m_ShapeModule.SetBoxY(value); }
- float getShapeModuleBoxY() const { return m_ShapeModule.GetBoxY(); }
- void setShapeModuleBoxZ(float value) { m_ShapeModule.SetBoxZ(value); }
- float getShapeModuleBoxZ() const { return m_ShapeModule.GetBoxZ(); }
- void setShapeModuleRandomDirection(bool value) { m_ShapeModule.SetRandomDirection(value); }
- bool getShapeModuleRandomDirection() const { return m_ShapeModule.GetRandomDirection(); }
- // m_RotationModule
- void setRotationModuleEnabled(bool value);
- bool getRotationModuleEnabled() const;
- void setRotationModuleRate(const MinMaxCurveData& value);
- MinMaxCurveData getRotationModuleRate() const;
- // m_CollisionModule
-
- // m_SubModule
- /*
- void setSubModuleEnabled(bool value);
- bool getSubModuleEnabled() const;
- void setSubModuleEmittersBirthID0(int value);
- int getSubModuleEmittersBirthID0() const;
- void setSubModuleEmittersBirthID1(int value);
- int getSubModuleEmittersBirthID1() const;
- void setSubModuleEmittersCollisionID0(int value);
- int getSubModuleEmittersCollisionID0() const;
- void setSubModuleEmittersCollisionID1(int value);
- int getSubModuleEmittersCollisionID1() const;
- void setSubModuleEmittersDeathID0(int value);
- int getSubModuleEmittersDeathID0() const;
- void setSubModuleEmittersDeathID1(int value);
- int getSubModuleEmittersDeathID1() const;
- */
-
- // m_SubEmitterModule
- void setSubEmitterModuleEnabled(bool value);
- bool getSubEmitterModuleEnabled() const;
- void setSubEmitterModuleSubEmitterType(int value);
- int getSubEmitterModuleSubEmitterType() const;
- bool getSubEmitterModuleInheritColor() const;
- void setSubEmitterModuleInheritColor(bool value);
- bool getSubEmitterModuleInheritSize() const;
- void setSubEmitterModuleInheritSize(bool value);
- bool getSubEmitterModuleInheritRotation() const;
- void setSubEmitterModuleInheritRotation(bool value);
- bool getSubEmitterModuleInheritLifetime() const;
- void setSubEmitterModuleInheritLifetime(bool value);
- bool getSubEmitterModuleInheritDuration() const;
- void setSubEmitterModuleInheritDuration(bool value);
- // m_ExternalForcesModule
- void setExternalForcesModuleEnabled(bool value);
- bool getExternalForcesModuleEnabled() const;
- void setExternalForcesModuleMultiplier(float value);
- float getExternalForcesModuleMultiplier() const;
- // m_RotationBySpeedModule
- void setRotationBySpeedModuleEnabled(bool value);
- bool getRotationBySpeedModuleEnabled() const;
- void setRotationBySpeedModuleCurve(const MinMaxCurveData& value);
- MinMaxCurveData getRotationBySpeedModuleCurve() const;
- void setRotationBySpeedModuleRange(const Vector2f& value);
- const Vector2f& getRotationBySpeedModuleRange() const;
- // m_VelocityModule
- void setVelocityModuleEnabled(bool value);
- bool getVelocityModuleEnabled() const;
- void setVelocityModuleXCurve(const MinMaxCurveData& value);
- MinMaxCurveData getVelocityModuleXCurve() const;
- void setVelocityModuleYCurve(const MinMaxCurveData& value);
- MinMaxCurveData getVelocityModuleYCurve() const;
- void setVelocityModuleZCurve(const MinMaxCurveData& value);
- MinMaxCurveData getVelocityModuleZCurve() const;
- void setVelocityModuleInWorldSpace(bool value);
- bool getVelocityModuleInWorldSpace() const;
- // m_ForceModule
- void setForceModuleEnabled(bool value);
- bool getForceModuleEnabled() const;
- void setForceModuleXCurve(const MinMaxCurveData& value);
- MinMaxCurveData getForceModuleXCurve() const;
- void setForceModuleYCurve(const MinMaxCurveData& value);
- MinMaxCurveData getForceModuleYCurve() const;
- void setForceModuleZCurve(const MinMaxCurveData& value);
- MinMaxCurveData getForceModuleZCurve() const;
- void setForceModuleInWorldSpace(bool value);
- bool getForceModuleInWorldSpace() const;
- void setForceModuleRandomizePerFrame(bool value);
- bool getForceModuleRandomizePerFrame() const;
- // m_ClampVelocityModule
- void setClampVelocityModuleEnabled(bool value);
- bool getClampVelocityModuleEnabled() const;
- void setClampVelocityModuleXCurve(const MinMaxCurveData& value);
- MinMaxCurveData getClampVelocityModuleXCurve() const;
- void setClampVelocityModuleYCurve(const MinMaxCurveData& value);
- MinMaxCurveData getClampVelocityModuleYCurve() const;
- void setClampVelocityModuleZCurve(const MinMaxCurveData& value);
- MinMaxCurveData getClampVelocityModuleZCurve() const;
- void setClampVelocityModuleMagnitude(const MinMaxCurveData& value);
- MinMaxCurveData getClampVelocityModuleMagnitude() const;
- void setClampVelocityModuleDrag(const MinMaxCurveData& value);
- MinMaxCurveData getClampVelocityModuleDrag() const;
- void setClampVelocityModuleInWorldSpace(bool value);
- bool getClampVelocityModuleInWorldSpace() const;
- void setClampVelocityModuleSeparateAxis(bool value);
- bool getClampVelocityModuleSeparateAxis() const;
- void setClampVelocityModuleMultiplyDragByParticleSize(bool value);
- bool getClampVelocityModuleMultiplyDragByParticleSize() const;
- void setClampVelocityModuleMultiplyDragByParticleVelocity(bool value);
- bool getClampVelocityModuleMultiplyDragByParticleVelocity() const;
- void setClampVelocityModuleDampen(float value);
- float getClampVelocityModuleDampen() const;
- // m_SizeModule
- void setSizeModuleEnabled(bool value);
- bool getSizeModuleEnabled() const;
- void setSizeModuleCurve(const MinMaxCurveData& value);
- MinMaxCurveData getSizeModuleCurve() const;
- // m_ColorModule
- void setColorModuleEnabled(bool value);
- bool getColorModuleEnabled() const;
- void setColorModuleGradient(const MinMaxGradientData& value);
- MinMaxGradientData getColorModuleGradient() const;
- // m_UVModule
- void setUVModuleEnabled(bool value);
- bool getUVModuleEnabled() const;
- void setUVModuleCurve(const MinMaxCurveData& value);
- MinMaxCurveData getUVModuleCurve() const;
- void setUVModuleTilesX(int value);
- int getUVModuleTilesX() const;
- void setUVModuleTilesY(int value);
- int getUVModuleTilesY() const;
- void setUVModuleAnimationType(int value);
- int getUVModuleAnimationType() const;
- void setUVModuleRowIndex(int value);
- int getUVModuleRowIndex() const;
- void setUVModuleCycles(float value);
- float getUVModuleCycles() const;
- void setUVModuleRandomRow(bool value);
- bool getUVModuleRandomRow() const;
- void setUVModuleMode(int value);
- int getUVModuleMode() const;
- void setUVModuleFrameNamePrefix(const std::string& value);
- const std::string& getUVModuleFrameNamePrefix() const;
- void setUVModuleFrameStartIndex(int value);
- int getUVModuleFrameStartIndex() const;
- void setUVModuleFrameEndIndex(int value);
- int getUVModuleFrameEndIndex() const;
- void setUVModuleFrameCount(int value);
- int getUVModuleFrameCount() const;
- // m_SizeBySpeedModule
- void setSizeBySpeedModuleEnabled(bool value);
- bool getSizeBySpeedModuleEnabled() const;
- void setSizeBySpeedModuleCurve(const MinMaxCurveData& value);
- MinMaxCurveData getSizeBySpeedModuleCurve() const;
- void setSizeBySpeedModuleRange(const Vector2f& value);
- const Vector2f& getSizeBySpeedModuleRange() const;
- // m_ColorBySpeedModule
- void setColorBySpeedModuleEnabled(bool value);
- bool getColorBySpeedModuleEnabled() const;
- void setColorBySpeedModuleGradient(const MinMaxGradientData& value);
- MinMaxGradientData getColorBySpeedModuleGradient() const;
- void setColorBySpeedModuleRange(const Vector2f& value);
- const Vector2f& getColorBySpeedModuleRange() const;
- // m_renderer
- void setRendererOrthographic(bool orthographic);
- bool getRendererOrthographic() const;
- void setRendererScale(float value);
- float getRendererScale() const;
- void setRendererRenderMode(int value);
- int getRendererRenderMode() const;
- void setRendererSortMode(int value);
- int getRendererSortMode() const;
- void setRendererMaxParticleSize(float value);
- float getRendererMaxParticleSize() const;
- void setRendererCameraVelocityScale(float value);
- float getRendererCameraVelocityScale() const;
- void setRendererVelocityScale(float value);
- float getRendererVelocityScale() const;
- void setRendererLengthScale(float value);
- float getRendererLengthScale() const;
- void setRendererSortingFudge(float value);
- float getRendererSortingFudge() const;
- void setRendererNormalDirection(float value);
- float getRendererNormalDirection() const;
- // Material, Texture, Blend
- void setUseMaterialFile(bool useMaterialFile) { _useMaterialFile = useMaterialFile; }
- bool getUseMaterialFile() const { return _useMaterialFile; }
-
- void setBlendFunc(const cocos2d::BlendFunc &blendFunc) override;
- const cocos2d::BlendFunc& getBlendFunc() const override { return _blendFunc; }
-
- void setDisplayFrame(cocos2d::SpriteFrame *spriteFrame);
- virtual void setTexture(cocos2d::Texture2D *texture) override;
- virtual cocos2d::Texture2D* getTexture() const override { return _texture; }
- virtual void updateBlendFunc();
-
- // m_Material
- void setMaterial(cocos2d::Material* material) {
- m_Material = material;
- if (_useMaterialFile && material) {
- _isSpriteFrame = false;
- //initTexCoordsWithRect(cocos2d::Rect(0, 0, 1, 1), false, Vector2f::ZERO, Vector2f::ONE);
- _vertexInfo = RRP_PARTICLEQUAD_VERTEX_INFO(RRP_PARTICLEQUAD_BORDER(), cocos2d::Tex2F(0, 1), cocos2d::Tex2F(1, 1), cocos2d::Tex2F(0, 0), cocos2d::Tex2F(1, 0));
- }
- }
- void setMaterialFile(const std::string& materialFile) {
- _materialFile = materialFile;
- auto mat = cocos2d::Material::createWithFilename(_materialFile);
- setMaterial(mat);
- }
- const std::string& getMaterialFile() const {
- return _materialFile;
- }
-
- void allocMemory(int particleCount);
-
- private:
- int m_EmittersIndex;
- ParticleSystemParticles m_ParticlesStaging; // staging buffer for emitting into the emitter
- ParticleSystemParticles m_Particles[kNumParticleBuffers];
- ParticleSystemReadOnlyState* m_ReadOnlyState;
- ParticleSystemState* m_State;
-
- InitialModule m_InitialModule;
- EmissionModule m_EmissionModule;
- ShapeModule m_ShapeModule;
-
- RotationModule* m_RotationModule;
- CollisionModule* m_CollisionModule;
- SubModule* m_SubModule;
- SubEmitterModule* m_SubEmitterModule;
- ExternalForcesModule* m_ExternalForcesModule;
-
- RotationBySpeedModule* m_RotationBySpeedModule;
-
- // Dependent on energy value
- VelocityModule* m_VelocityModule;
- ForceModule* m_ForceModule;
- // Depends on velocity and modifies velocity
- ClampVelocityModule* m_ClampVelocityModule;
-
-
- // Dependent on energy value
- SizeModule* m_SizeModule;
- ColorModule* m_ColorModule;
- UVModule* m_UVModule;
-
- // Dependent on velocity value
- SizeBySpeedModule* m_SizeBySpeedModule;
- ColorBySpeedModule* m_ColorBySpeedModule;
-
- ParticleSystemRenderer* m_renderer;
- bool _useMaterialFile;
- cocos2d::BlendFunc _blendFunc;
- cocos2d::RefPtr<cocos2d::Texture2D> _texture;
- cocos2d::RefPtr<cocos2d::Material> m_Material;
- std::string _materialFile;
- cocos2d::V3F_C4B_T2F_Quad* _quads; // quads to be rendered
- int _quadCount;
- bool _opacityModifyRGB;
- RRP_PARTICLEQUAD_VERTEX_INFO _vertexInfo;
- bool _isSpriteFrame;
- public:
- virtual void update(float dt) override;
-
- friend class ParticleSystemRenderer;
- };
- NS_RRP_END
- #endif /* RParticleSystem_h */
|