X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsky.cpp;h=02e882592b9ef35df75467a28b0b86eb2c0f9802;hb=089f594582862d041a5bf3fa0f41d637248e31de;hp=3176ea936f0d0dfedcf8cd12e58bd977d65d16c9;hpb=1425c6def156840b359b90b4f32b9c7b8f005731;p=oweals%2Fminetest.git diff --git a/src/sky.cpp b/src/sky.cpp index 3176ea936..02e882592 100644 --- a/src/sky.cpp +++ b/src/sky.cpp @@ -8,13 +8,14 @@ #include "profiler.h" #include "util/numeric.h" #include +#include "client/renderingengine.h" #include "settings.h" #include "camera.h" // CameraModes -Sky::Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id, - ITextureSource *tsrc): - scene::ISceneNode(parent, mgr, id) +Sky::Sky(s32 id, ITextureSource *tsrc): + scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(), + RenderingEngine::get_scene_manager(), id) { setAutomaticCulling(scene::EAC_OFF); m_box.MaxEdge.set(0, 0, 0); @@ -67,13 +68,13 @@ Sky::Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id, m_materials[4].Lighting = true; } - for (u32 i = 0; i < SKY_STAR_COUNT; i++) { - m_stars[i] = v3f( + for (v3f &star : m_stars) { + star = v3f( myrand_range(-10000, 10000), myrand_range(-10000, 10000), myrand_range(-10000, 10000) ); - m_stars[i].normalize(); + star.normalize(); } m_directional_colored_fog = g_settings->getBool("directional_colored_fog"); @@ -183,19 +184,19 @@ void Sky::render() vertices[1] = video::S3DVertex( 1, 0.08, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( 1, 0.12, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-1, 0.12, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { if (j == 0) // Don't switch {} else if (j == 1) // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); + vertex.Pos.rotateXZBy(90); else if (j == 2) // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); + vertex.Pos.rotateXZBy(-90); else // Switch from -Z (south) to +Z (north) - vertices[i].Pos.rotateXZBy(-180); + vertex.Pos.rotateXZBy(-180); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } @@ -207,19 +208,19 @@ void Sky::render() vertices[1] = video::S3DVertex( 1, -1.0, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( 1, 0.08, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-1, 0.08, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { if (j == 0) // Don't switch {} else if (j == 1) // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); + vertex.Pos.rotateXZBy(90); else if (j == 2) // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); + vertex.Pos.rotateXZBy(-90); else // Switch from -Z (south) to +Z (north) - vertices[i].Pos.rotateXZBy(-180); + vertex.Pos.rotateXZBy(-180); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } @@ -232,6 +233,10 @@ void Sky::render() vertices[3] = video::S3DVertex(-1, -1.0, 1, 0, 1, 0, c, t, o); driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); + // If sun, moon and stars are (temporarily) disabled, abort here + if (!m_bodies_visible) + return; + driver->setMaterial(m_materials[2]); // Draw sunrise/sunset horizon glow texture (textures/base/pack/sunrisebg.png) @@ -247,13 +252,13 @@ void Sky::render() vertices[1] = video::S3DVertex( 1, -0.05 + y, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( 1, 0.2 + y, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-1, 0.2 + y, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { if (wicked_time_of_day < 0.5) // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); + vertex.Pos.rotateXZBy(90); else // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); + vertex.Pos.rotateXZBy(-90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } @@ -269,10 +274,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); @@ -283,10 +288,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); @@ -295,10 +300,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, suncolor, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, suncolor, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, suncolor, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); @@ -307,10 +312,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, suncolor2, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, suncolor2, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, suncolor2, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } else { @@ -325,10 +330,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, c, t, o); - for(u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } @@ -345,10 +350,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(-90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); @@ -359,10 +364,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(-90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); @@ -371,10 +376,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, mooncolor, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, mooncolor, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, mooncolor, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(-90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); @@ -383,10 +388,10 @@ void Sky::render() vertices[1] = video::S3DVertex( d2,-d, -1, 0, 0, 1, mooncolor2, o, t); vertices[2] = video::S3DVertex( d2, d2, -1, 0, 0, 1, mooncolor2, o, o); vertices[3] = video::S3DVertex(-d, d2, -1, 0, 0, 1, mooncolor2, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(-90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } else { @@ -401,18 +406,18 @@ void Sky::render() vertices[1] = video::S3DVertex( d, -d, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( d, d, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-d, d, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); - vertices[i].Pos.rotateXYBy(wicked_time_of_day * 360 - 90); + vertex.Pos.rotateXZBy(-90); + vertex.Pos.rotateXYBy(wicked_time_of_day * 360 - 90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } } // Draw stars - driver->setMaterial(m_materials[1]); do { + driver->setMaterial(m_materials[1]); float starbrightness = MYMAX(0, MYMIN(1, (0.285 - fabs(wicked_time_of_day < 0.5 ? wicked_time_of_day : (1.0 - wicked_time_of_day))) * 10)); @@ -455,7 +460,7 @@ void Sky::render() driver->drawVertexPrimitiveList(vertices, SKY_STAR_COUNT * 4, indices, SKY_STAR_COUNT, video::EVT_STANDARD, scene::EPT_QUADS, video::EIT_16BIT); - } while(0); + } while(false); // Draw far cloudy fog thing below east and west horizons for (u32 j = 0; j < 2; j++) { @@ -464,14 +469,14 @@ void Sky::render() vertices[1] = video::S3DVertex( 1, -1.0, -1, 0, 0, 1, c, o, t); vertices[2] = video::S3DVertex( 1, -0.02, -1, 0, 0, 1, c, o, o); vertices[3] = video::S3DVertex(-1, -0.02, -1, 0, 0, 1, c, t, o); - for (u32 i = 0; i < 4; i++) { + for (video::S3DVertex &vertex : vertices) { //if (wicked_time_of_day < 0.5) if (j == 0) // Switch from -Z (south) to +X (east) - vertices[i].Pos.rotateXZBy(90); + vertex.Pos.rotateXZBy(90); else // Switch from -Z (south) to -X (west) - vertices[i].Pos.rotateXZBy(-90); + vertex.Pos.rotateXZBy(-90); } driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); } @@ -500,6 +505,7 @@ void Sky::update(float time_of_day, float time_brightness, m_time_of_day = time_of_day; m_time_brightness = time_brightness; m_sunlight_seen = sunlight_seen; + m_bodies_visible = true; bool is_dawn = (time_brightness >= 0.20 && time_brightness < 0.35);