#ifndef __ENVIRONMENT_H__ #define __ENVIRONMENT_H__ #include "util/Common.h" #include "util/Singleton.h" #include "Shader.h" #define MAX_LIGHTS 4 struct Light { Light (glm::vec3 position, glm::vec3 color, glm::vec3 attenuation = glm::vec3(1.0, 0.0, 0.0)) : position(position), color(color), attenuation(attenuation) {} glm::vec3 position; glm::vec3 color; glm::vec3 attenuation; }; struct SpotLight : public Light { SpotLight (glm::vec3 position, glm::vec3 dir, glm::vec3 color, glm::vec3 attenuation) : Light(position, color, attenuation), direction(dir) {} glm::vec3 direction; }; struct DirectionalLight : public SpotLight { DirectionalLight (glm::vec3 position, glm::vec3 dir, glm::vec3 color) : SpotLight(position, dir, color, glm::vec3(1.0, 0.0, 0.0)) {} }; class Environment : public Singleton { public: void draw (Shader* shader); inline void setAmbientColor (glm::vec3 color) { m_ambient = color; } inline void setSun (Light light) { m_sun = light; } friend class Singleton; private: Light m_sun; // Ambient color glm::vec3 m_ambient; // Fog glm::vec3 m_fogColor; float m_fogStart; float m_fogEnd; // All lights std::vector m_lights; }; #endif // __ENVIRONMENT_H__