Files
NazaraEngine/include/Nazara/Graphics/ParticleGroup.hpp
Lynix 9d54bb8700 Graphics/ParticleGroup: Fix include name
Former-commit-id: ef6e348d212392631ac904f1a7ae43934674bba6 [formerly 2677f45b4c6004bb9088c6af1e92e701e0f53b48] [formerly 6f2483cfa8b8448f52683b965946f7efa231a5c8 [formerly aa6d158e4094f223c8c38496ba27347f2b790c86]]
Former-commit-id: 2dfc3a0763d2030b7f7310aebea9cd6e0db9c606 [formerly 5ea68861a0b9bae0fa69f0ab601ac222f7290dab]
Former-commit-id: 8c8531dce27be25186f31a50c9a33c1a35f867dd
2016-08-10 23:18:49 +02:00

98 lines
3.2 KiB
C++

// Copyright (C) 2015 Jérôme Leclercq
// This file is part of the "Nazara Engine - Graphics module"
// For conditions of distribution and use, see copyright notice in Config.hpp
#pragma once
#ifndef NAZARA_PARTICLEGROUP_HPP
#define NAZARA_PARTICLEGROUP_HPP
#include <Nazara/Prerequesites.hpp>
#include <Nazara/Core/Signal.hpp>
#include <Nazara/Graphics/ParticleController.hpp>
#include <Nazara/Graphics/ParticleDeclaration.hpp>
#include <Nazara/Graphics/ParticleEmitter.hpp>
#include <Nazara/Graphics/ParticleGenerator.hpp>
#include <Nazara/Graphics/ParticleRenderer.hpp>
#include <Nazara/Graphics/Renderable.hpp>
#include <Nazara/Math/BoundingVolume.hpp>
#include <functional>
#include <memory>
#include <set>
#include <vector>
namespace Nz
{
class NAZARA_GRAPHICS_API ParticleGroup : public Renderable
{
public:
ParticleGroup(unsigned int maxParticleCount, ParticleLayout layout);
ParticleGroup(unsigned int maxParticleCount, ParticleDeclarationConstRef declaration);
ParticleGroup(const ParticleGroup& emitter);
~ParticleGroup();
void AddController(ParticleControllerRef controller);
void AddEmitter(ParticleEmitter* emitter);
void AddGenerator(ParticleGeneratorRef generator);
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const Matrix4f& transformMatrix) const override;
void ApplyControllers(ParticleMapper& mapper, unsigned int particleCount, float elapsedTime);
void* CreateParticle();
void* CreateParticles(unsigned int count);
void* GenerateParticle();
void* GenerateParticles(unsigned int count);
const ParticleDeclarationConstRef& GetDeclaration() const;
unsigned int GetMaxParticleCount() const;
unsigned int GetParticleCount() const;
unsigned int GetParticleSize() const;
void KillParticle(unsigned int index);
void KillParticles();
void RemoveController(ParticleController* controller);
void RemoveEmitter(ParticleEmitter* emitter);
void RemoveGenerator(ParticleGenerator* generator);
void SetRenderer(ParticleRenderer* renderer);
void Update(float elapsedTime);
void UpdateBoundingVolume(const Matrix4f& transformMatrix) override;
ParticleGroup& operator=(const ParticleGroup& emitter);
// Signals:
NazaraSignal(OnParticleGroupRelease, const ParticleGroup* /*particleGroup*/);
private:
void MakeBoundingVolume() const override;
void OnEmitterMove(ParticleEmitter* oldEmitter, ParticleEmitter* newEmitter);
void OnEmitterRelease(const ParticleEmitter* emitter);
void ResizeBuffer();
struct EmitterEntry
{
NazaraSlot(ParticleEmitter, OnParticleEmitterMove, moveSlot);
NazaraSlot(ParticleEmitter, OnParticleEmitterRelease, releaseSlot);
ParticleEmitter* emitter;
};
std::set<unsigned int, std::greater<unsigned int>> m_dyingParticles;
mutable std::vector<UInt8> m_buffer;
std::vector<ParticleControllerRef> m_controllers;
std::vector<EmitterEntry> m_emitters;
std::vector<ParticleGeneratorRef> m_generators;
ParticleDeclarationConstRef m_declaration;
ParticleRendererRef m_renderer;
bool m_processing;
unsigned int m_maxParticleCount;
unsigned int m_particleCount;
unsigned int m_particleSize;
};
}
#endif // NAZARA_PARTICLEGROUP_HPP