#pragma once #ifndef NAZARA_EXAMPLES_PARTICLES_COMMON_HPP #define NAZARA_EXAMPLES_PARTICLES_COMMON_HPP #include #include #include #include #include #include #include #include #include #include #include class ParticleDemo; struct ExampleShared { mutable std::mt19937 randomGen; std::vector> demos; Nz::RenderWindow* target; Nz::TextSpriteRef demoName; Nz::TextSpriteRef fpsCount; Nz::TextSpriteRef particleCount; Ndk::EntityHandle viewer2D; Ndk::EntityHandle viewer3D; Ndk::WorldHandle world2D; Ndk::WorldHandle world3D; }; class ParticleDemo : public Ndk::State { public: ParticleDemo(const Nz::String& name, const ExampleShared& exampleShared); ~ParticleDemo() = default; void Enter(Ndk::StateMachine& fsm) override; void Leave(Ndk::StateMachine& fsm) override; bool Update(Ndk::StateMachine& fsm, float elapsedTime) override; protected: const ExampleShared& m_shared; void RegisterEntity(const Ndk::EntityHandle& entity); void RegisterParticleGroup(const Ndk::EntityHandle& entity); private: std::size_t m_index; std::vector m_entities; std::vector m_particleGroups; Nz::BackgroundRef m_oldBackground2D; Nz::BackgroundRef m_oldBackground3D; Nz::Clock m_updateClock; Nz::String m_name; unsigned int m_fpsCounter; static std::size_t s_demoIndex; }; #endif // NAZARA_EXAMPLES_PARTICLES_COMMON_HPP