From 2e90ed07acd295387c0da6c0689d14665b6c125d Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Fri, 16 Mar 2012 16:34:30 +0200 Subject: Dynamic sky, fog and cloud colors; sun and moon --- src/sky.h | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/sky.h (limited to 'src/sky.h') diff --git a/src/sky.h b/src/sky.h new file mode 100644 index 000000000..39e592393 --- /dev/null +++ b/src/sky.h @@ -0,0 +1,84 @@ +/* +Minetest-c55 +Copyright (C) 2012 celeron55, Perttu Ahola + +This program 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 2 of the License, or +(at your option) any later version. + +This program 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 this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "common_irrlicht.h" +#include + +#ifndef SKY_HEADER +#define SKY_HEADER + +#define SKY_MATERIAL_COUNT 3 +#define SKY_STAR_COUNT 200 + +// Skybox, rendered with zbuffer turned off, before all other nodes. +class Sky : public scene::ISceneNode +{ +public: + //! constructor + Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id); + + virtual void OnRegisterSceneNode(); + + //! renders the node. + virtual void render(); + + virtual const core::aabbox3d& getBoundingBox() const; + + // Used by Irrlicht for optimizing rendering + virtual video::SMaterial& getMaterial(u32 i) + { return m_materials[i]; } + + // Used by Irrlicht for optimizing rendering + virtual u32 getMaterialCount() const + { return SKY_MATERIAL_COUNT; } + + void update(float m_time_of_day, float time_brightness, + float direct_brightness, bool sunlight_seen); + + float getBrightness(){ return m_brightness; } + video::SColor getBgColor(){ return m_bgcolor; } + video::SColor getSkyColor(){ return m_skycolor; } + + bool getCloudsVisible(){ return m_clouds_visible; } + video::SColorf getCloudColor(){ return m_cloudcolor_f; } + +private: + core::aabbox3d Box; + video::SMaterial m_materials[SKY_MATERIAL_COUNT]; + + bool m_first_update; + float m_time_of_day; + float m_time_brightness; + bool m_sunlight_seen; + float m_brightness; + float m_cloud_brightness; + bool m_clouds_visible; + video::SColorf m_bgcolor_bright_f; + video::SColorf m_skycolor_bright_f; + video::SColorf m_cloudcolor_bright_f; + video::SColor m_bgcolor; + video::SColor m_skycolor; + video::SColorf m_cloudcolor_f; + v3f m_stars[SKY_STAR_COUNT]; + u16 m_star_indices[SKY_STAR_COUNT*4]; + video::S3DVertex m_star_vertices[SKY_STAR_COUNT*4]; +}; + +#endif + -- cgit v1.2.3