// Copyright (C) 2013 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_LIGHT_HPP #define NAZARA_LIGHT_HPP #include #include #include #include class NzShader; class NAZARA_API NzLight : public NzSceneNode { public: NzLight(nzLightType type); NzLight(const NzLight& light); ~NzLight() = default; void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override; void Enable(const NzShader* shader, unsigned int lightUnit) const; NzColor GetAmbientColor() const; float GetAttenuation() const; const NzBoundingVolumef& GetBoundingVolume() const; NzColor GetDiffuseColor() const; float GetInnerAngle() const; nzLightType GetLightType() const; float GetOuterAngle() const; float GetRadius() const; nzSceneNodeType GetSceneNodeType() const; NzColor GetSpecularColor() const; void SetAmbientColor(const NzColor& ambient); void SetAttenuation(float attenuation); void SetDiffuseColor(const NzColor& diffuse); void SetInnerAngle(float innerAngle); void SetOuterAngle(float outerAngle); void SetRadius(float radius); void SetSpecularColor(const NzColor& specular); NzLight& operator=(const NzLight& light); static void Disable(const NzShader* shader, unsigned int lightUnit); private: void Invalidate(); void Register(); void Unregister(); void UpdateBoundingVolume() const; bool VisibilityTest(const NzFrustumf& frustum); nzLightType m_type; mutable NzBoundingVolumef m_boundingVolume; NzColor m_ambientColor; NzColor m_diffuseColor; NzColor m_specularColor; mutable bool m_boundingVolumeUpdated; float m_attenuation; float m_innerAngle; float m_outerAngle; float m_radius; }; #endif // NAZARA_LIGHT_HPP