/* * Copyright (C) 2021 Christopher J. Howard * * This file is part of Antkeeper source code. * * Antkeeper source code is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Antkeeper source code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Antkeeper source code. If not, see . */ #ifndef ANTKEEPER_SCENE_DIRECTIONAL_LIGHT_HPP #define ANTKEEPER_SCENE_DIRECTIONAL_LIGHT_HPP #include "scene/light.hpp" #include "gl/texture-2d.hpp" #include "utility/fundamental-types.hpp" namespace scene { /** * Light source with parallel rays and constant intensity. */ class directional_light: public light { public: /// Creates a directional light. directional_light(); /** * Sets the light texture, also known as a gobo, cucoloris, or cookie. * * @param texture Light texture. */ void set_light_texture(const gl::texture_2d* texture); void set_light_texture_opacity(float opacity); void set_light_texture_translation(const float2& translation); void set_light_texture_rotation(float rotation); void set_light_texture_scale(const float2& scale); /// Returns light_type::directional. virtual light_type get_light_type() const; /// Returns the normalized direction vector of the light. const float3& get_direction() const; /// Returns the light texture for this light, or `nullptr` if no light texture is set. const gl::texture_2d* get_light_texture() const; const tween& get_direction_tween() const; /// @copydoc object_base::update_tweens(); virtual void update_tweens(); private: virtual void transformed(); tween direction; const gl::texture_2d* light_texture; tween light_texture_opacity; tween light_texture_translation; tween light_texture_rotation; tween light_texture_scale; }; inline light_type directional_light::get_light_type() const { return light_type::directional; } inline const float3& directional_light::get_direction() const { return direction[1]; } inline const tween& directional_light::get_direction_tween() const { return direction; } inline const gl::texture_2d* directional_light::get_light_texture() const { return light_texture; } } // namespace scene #endif // ANTKEEPER_SCENE_DIRECTIONAL_LIGHT_HPP