#include "ISceneManager.h"
#include "ICameraSceneNode.h"
#include "S3DVertex.h"
-#include "tile.h" // getTexturePath
+#include "tile.h"
#include "noise.h" // easeCurve
#include "main.h" // g_profiler
#include "profiler.h"
#include "camera.h" // CameraModes
//! constructor
-Sky::Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id):
+Sky::Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id,
+ ITextureSource *tsrc):
scene::ISceneNode(parent, mgr, id),
m_visible(true),
m_fallback_bg_color(255,255,255,255),
m_materials[1].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
m_materials[2] = mat;
- m_materials[2].setTexture(0, mgr->getVideoDriver()->getTexture(
- getTexturePath("sunrisebg.png").c_str()));
+ m_materials[2].setTexture(0, tsrc->getTexture("sunrisebg.png"));
m_materials[2].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
//m_materials[2].MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
- m_sun_texture = mgr->getVideoDriver()->getTexture(
- getTexturePath("sun.png").c_str());
- m_moon_texture = mgr->getVideoDriver()->getTexture(
- getTexturePath("moon.png").c_str());
- m_sun_tonemap = mgr->getVideoDriver()->getTexture(
- getTexturePath("sun_tonemap.png").c_str());
- m_moon_tonemap = mgr->getVideoDriver()->getTexture(
- getTexturePath("moon_tonemap.png").c_str());
+ m_sun_texture = tsrc->isKnownSourceImage("sun.png") ?
+ tsrc->getTexture("sun.png") : NULL;
+ m_moon_texture = tsrc->isKnownSourceImage("moon.png") ?
+ tsrc->getTexture("moon.png") : NULL;
+ m_sun_tonemap = tsrc->isKnownSourceImage("sun_tonemap.png") ?
+ tsrc->getTexture("sun_tonemap.png") : NULL;
+ m_moon_tonemap = tsrc->isKnownSourceImage("moon_tonemap.png") ?
+ tsrc->getTexture("moon_tonemap.png") : NULL;
if (m_sun_texture){
m_materials[3] = mat;
// invert direction to match where the sun and moon are rising
if (m_time_of_day > 0.5)
pointcolor_blend = 1 - pointcolor_blend;
-
// horizon colors of sun and moon
f32 pointcolor_light = rangelim(m_time_brightness * 3, 0.2, 1);
+
video::SColorf pointcolor_sun_f(1, 1, 1, 1);
- pointcolor_sun_f.r = pointcolor_light * 1;
- pointcolor_sun_f.b = pointcolor_light * (0.25 + (rangelim(m_time_brightness, 0.25, 0.75) - 0.25) * 2 * 0.75);
- pointcolor_sun_f.g = pointcolor_light * (pointcolor_sun_f.b * 0.375 + (rangelim(m_time_brightness, 0.05, 0.15) - 0.05) * 10 * 0.625);
+ if (m_sun_tonemap)
+ {
+ pointcolor_sun_f.r = pointcolor_light * (float)m_materials[3].EmissiveColor.getRed() / 255;
+ pointcolor_sun_f.b = pointcolor_light * (float)m_materials[3].EmissiveColor.getBlue() / 255;
+ pointcolor_sun_f.g = pointcolor_light * (float)m_materials[3].EmissiveColor.getGreen() / 255;
+ }
+ else
+ {
+ pointcolor_sun_f.r = pointcolor_light * 1;
+ pointcolor_sun_f.b = pointcolor_light * (0.25 + (rangelim(m_time_brightness, 0.25, 0.75) - 0.25) * 2 * 0.75);
+ pointcolor_sun_f.g = pointcolor_light * (pointcolor_sun_f.b * 0.375 + (rangelim(m_time_brightness, 0.05, 0.15) - 0.05) * 10 * 0.625);
+ }
+
video::SColorf pointcolor_moon_f(0.5 * pointcolor_light, 0.6 * pointcolor_light, 0.8 * pointcolor_light, 1);
+ if (m_moon_tonemap)
+ {
+ pointcolor_moon_f.r = pointcolor_light * (float)m_materials[4].EmissiveColor.getRed() / 255;
+ pointcolor_moon_f.b = pointcolor_light * (float)m_materials[4].EmissiveColor.getBlue() / 255;
+ pointcolor_moon_f.g = pointcolor_light * (float)m_materials[4].EmissiveColor.getGreen() / 255;
+ }
+
video::SColor pointcolor_sun = pointcolor_sun_f.toSColor();
video::SColor pointcolor_moon = pointcolor_moon_f.toSColor();
// calculate the blend color