diff --git a/SDK/include/NDK/Components/ParticleEmitterComponent.hpp b/SDK/include/NDK/Components/ParticleEmitterComponent.hpp index add138ee9..b874e0818 100644 --- a/SDK/include/NDK/Components/ParticleEmitterComponent.hpp +++ b/SDK/include/NDK/Components/ParticleEmitterComponent.hpp @@ -20,6 +20,7 @@ namespace Ndk ParticleEmitterComponent(Nz::ParticleGroup* group); ParticleEmitterComponent(const ParticleEmitterComponent& emitter); + ParticleEmitterComponent(ParticleEmitterComponent&& emitter); ~ParticleEmitterComponent(); inline bool IsActive() const; @@ -31,8 +32,12 @@ namespace Ndk static ComponentIndex componentIndex; private: + void OnParticleGroupRelease(const Nz::ParticleGroup* particleGroup); + void SetupParticles(Nz::ParticleMapper& mapper, unsigned int count) const override; + NazaraSlot(Nz::ParticleGroup, OnParticleGroupRelease, m_particleGroupRelease); + SetupFunc m_setupFunc; Nz::ParticleGroup* m_particleGroup; bool m_isActive; diff --git a/build/scripts/common.lua b/build/scripts/common.lua index fa610e85c..b467eb9c5 100644 --- a/build/scripts/common.lua +++ b/build/scripts/common.lua @@ -693,7 +693,9 @@ function NazaraBuild:LoadConfig() local paths = string.explode(self.Config["InstallDir"], ";") for k,v in pairs(paths) do - self:AddInstallPath(v) + if (#v > 0) then + self:AddInstallPath(v) + end end end diff --git a/include/Nazara/Graphics/ParticleEmitter.hpp b/include/Nazara/Graphics/ParticleEmitter.hpp index 7e2c6a7f8..b7a168262 100644 --- a/include/Nazara/Graphics/ParticleEmitter.hpp +++ b/include/Nazara/Graphics/ParticleEmitter.hpp @@ -8,6 +8,7 @@ #define NAZARA_PARTICLEEMITTER_HPP #include +#include #include namespace Nz @@ -20,7 +21,7 @@ namespace Nz public: ParticleEmitter(); ParticleEmitter(const ParticleEmitter& emitter) = default; - ParticleEmitter(ParticleEmitter&& emitter) = default; + ParticleEmitter(ParticleEmitter&& emitter); virtual ~ParticleEmitter(); virtual void Emit(ParticleGroup& system, float elapsedTime) const; @@ -36,7 +37,11 @@ namespace Nz void SetEmissionRate(float rate); ParticleEmitter& operator=(const ParticleEmitter& emitter) = default; - ParticleEmitter& operator=(ParticleEmitter&& emitter) = default; + ParticleEmitter& operator=(ParticleEmitter&& emitter); + + // Signals: + NazaraSignal(OnParticleEmitterMove, const ParticleEmitter* /*oldParticleEmitter*/, const ParticleEmitter* /*newParticleEmitter*/); + NazaraSignal(OnParticleEmitterRelease, const ParticleEmitter* /*particleEmitter*/); private: virtual void SetupParticles(ParticleMapper& mapper, unsigned int count) const = 0; diff --git a/include/Nazara/Graphics/ParticleGroup.hpp b/include/Nazara/Graphics/ParticleGroup.hpp index 412b94511..4d4704171 100644 --- a/include/Nazara/Graphics/ParticleGroup.hpp +++ b/include/Nazara/Graphics/ParticleGroup.hpp @@ -8,6 +8,7 @@ #define NAZARA_PARTICLEGROUP_HPP #include +#include #include #include #include @@ -62,6 +63,9 @@ namespace Nz ParticleGroup& operator=(const ParticleGroup& emitter); + // Signals: + NazaraSignal(OnParticleGroupRelease, const ParticleGroup* /*particleGroup*/); + private: void MakeBoundingVolume() const override; void ResizeBuffer(); diff --git a/src/Nazara/Graphics/ParticleEmitter.cpp b/src/Nazara/Graphics/ParticleEmitter.cpp index b11cfdfe9..10f057dce 100644 --- a/src/Nazara/Graphics/ParticleEmitter.cpp +++ b/src/Nazara/Graphics/ParticleEmitter.cpp @@ -32,7 +32,19 @@ namespace Nz { } - ParticleEmitter::~ParticleEmitter() = default; + ParticleEmitter::ParticleEmitter(ParticleEmitter&& emitter) : + m_lagCompensationEnabled(emitter.m_lagCompensationEnabled), + m_emissionAccumulator(0.f), + m_emissionRate(emitter.m_emissionRate), + m_emissionCount(emitter.m_emissionCount) + { + OnParticleEmitterMove(&emitter, this); + } + + ParticleEmitter::~ParticleEmitter() + { + OnParticleEmitterRelease(this); + } /*! * \brief Emits particles according to the delta time between the previous frame @@ -141,4 +153,14 @@ namespace Nz { m_emissionRate = rate; } + + ParticleEmitter& ParticleEmitter::operator=(ParticleEmitter && emitter) + { + m_emissionCount = emitter.m_emissionCount; + m_emissionRate = emitter.m_emissionRate; + m_lagCompensationEnabled = emitter.m_lagCompensationEnabled; + + OnParticleEmitterMove(&emitter, this); + return *this; + } } diff --git a/src/Nazara/Graphics/ParticleGroup.cpp b/src/Nazara/Graphics/ParticleGroup.cpp index d93c085db..87dbb390c 100644 --- a/src/Nazara/Graphics/ParticleGroup.cpp +++ b/src/Nazara/Graphics/ParticleGroup.cpp @@ -77,7 +77,10 @@ namespace Nz std::memcpy(m_buffer.data(), system.m_buffer.data(), system.m_particleCount*m_particleSize); } - ParticleGroup::~ParticleGroup() = default; + ParticleGroup::~ParticleGroup() + { + OnParticleGroupRelease(this); + } /*! * \brief Adds a controller to the particles