// 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_PARTICLEDECLARATION_HPP #define NAZARA_PARTICLEDECLARATION_HPP #include #include #include #include #include #include #include #include class NzParticleDeclaration; using NzParticleDeclarationConstRef = NzObjectRef; using NzParticleDeclarationLibrary = NzObjectLibrary; using NzParticleDeclarationRef = NzObjectRef; class NAZARA_GRAPHICS_API NzParticleDeclaration : public NzRefCounted { friend NzParticleDeclarationLibrary; friend class NzGraphics; public: NzParticleDeclaration(); NzParticleDeclaration(const NzParticleDeclaration& declaration); ~NzParticleDeclaration(); void DisableComponent(nzParticleComponent component); void EnableComponent(nzParticleComponent component, nzComponentType type, unsigned int offset); void GetComponent(nzParticleComponent component, bool* enabled, nzComponentType* type, unsigned int* offset) const; unsigned int GetStride() const; void SetStride(unsigned int stride); NzParticleDeclaration& operator=(const NzParticleDeclaration& declaration); static NzParticleDeclaration* Get(nzParticleLayout layout); static bool IsTypeSupported(nzComponentType type); // Signals: NazaraSignal(OnParticleDeclarationRelease, const NzParticleDeclaration* /*particleDeclaration*/); private: static bool Initialize(); static void Uninitialize(); struct Component { nzComponentType type; bool enabled = false; unsigned int offset; /* ** -Lynix: ** Il serait aussi possible de préciser le stride de façon indépendante, ce que je ne permets pas ** pour décomplexifier l'interface en enlevant quelque chose que je juge inutile. ** Si vous pensez que ça peut être utile, n'hésitez pas à me le faire savoir ! */ }; Component m_components[nzParticleComponent_Max+1]; unsigned int m_stride; static NzParticleDeclaration s_declarations[nzParticleLayout_Max+1]; static NzParticleDeclarationLibrary::LibraryMap s_library; }; #endif // NAZARA_PARTICLEDECLARATION_HPP