@@ -811,6 +811,9 @@ class Game {
811
811
void handleClientEvent_HudRemove (ClientEvent *event, CameraOrientation *cam);
812
812
void handleClientEvent_HudChange (ClientEvent *event, CameraOrientation *cam);
813
813
void handleClientEvent_SetSky (ClientEvent *event, CameraOrientation *cam);
814
+ void handleClientEvent_SetSun (ClientEvent *event, CameraOrientation *cam);
815
+ void handleClientEvent_SetMoon (ClientEvent *event, CameraOrientation *cam);
816
+ void handleClientEvent_SetStars (ClientEvent *event, CameraOrientation *cam);
814
817
void handleClientEvent_OverrideDayNigthRatio (ClientEvent *event,
815
818
CameraOrientation *cam);
816
819
void handleClientEvent_CloudParams (ClientEvent *event, CameraOrientation *cam);
@@ -2523,6 +2526,9 @@ const ClientEventHandler Game::clientEventHandler[CLIENTEVENT_MAX] = {
2523
2526
{&Game::handleClientEvent_HudRemove},
2524
2527
{&Game::handleClientEvent_HudChange},
2525
2528
{&Game::handleClientEvent_SetSky},
2529
+ {&Game::handleClientEvent_SetSun},
2530
+ {&Game::handleClientEvent_SetMoon},
2531
+ {&Game::handleClientEvent_SetStars},
2526
2532
{&Game::handleClientEvent_OverrideDayNigthRatio},
2527
2533
{&Game::handleClientEvent_CloudParams},
2528
2534
};
@@ -2744,41 +2750,85 @@ void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *ca
2744
2750
void Game::handleClientEvent_SetSky (ClientEvent *event, CameraOrientation *cam)
2745
2751
{
2746
2752
sky->setVisible (false );
2747
- // Whether clouds are visible in front of a custom skybox
2748
- sky->setCloudsEnabled (event->set_sky . clouds );
2753
+ // Whether clouds are visible in front of a custom skybox.
2754
+ sky->setCloudsEnabled (event->set_sky -> clouds );
2749
2755
2750
2756
if (skybox) {
2751
2757
skybox->remove ();
2752
2758
skybox = NULL ;
2753
2759
}
2754
-
2760
+ // Clear the old textures out in case we switch rendering type.
2761
+ sky->clearSkyboxTextures ();
2755
2762
// Handle according to type
2756
- if (*event->set_sky .type == " regular" ) {
2763
+ if (event->set_sky ->type == " regular" ) {
2764
+ // Shows the mesh skybox
2757
2765
sky->setVisible (true );
2758
- sky->setCloudsEnabled (true );
2759
- } else if (*event->set_sky .type == " skybox" &&
2760
- event->set_sky .params ->size () == 6 ) {
2761
- sky->setFallbackBgColor (*event->set_sky .bgcolor );
2762
- skybox = RenderingEngine::get_scene_manager ()->addSkyBoxSceneNode (
2763
- texture_src->getTextureForMesh ((*event->set_sky .params )[0 ]),
2764
- texture_src->getTextureForMesh ((*event->set_sky .params )[1 ]),
2765
- texture_src->getTextureForMesh ((*event->set_sky .params )[2 ]),
2766
- texture_src->getTextureForMesh ((*event->set_sky .params )[3 ]),
2767
- texture_src->getTextureForMesh ((*event->set_sky .params )[4 ]),
2768
- texture_src->getTextureForMesh ((*event->set_sky .params )[5 ]));
2769
- }
2770
- // Handle everything else as plain color
2771
- else {
2772
- if (*event->set_sky .type != " plain" )
2766
+ // Update mesh based skybox colours if applicable.
2767
+ sky->setSkyColors (*event->set_sky );
2768
+ sky->setHorizonTint (
2769
+ event->set_sky ->sun_tint ,
2770
+ event->set_sky ->moon_tint ,
2771
+ event->set_sky ->tint_type
2772
+ );
2773
+ } else if (event->set_sky ->type == " skybox" &&
2774
+ event->set_sky ->textures .size () == 6 ) {
2775
+ // Disable the dyanmic mesh skybox:
2776
+ sky->setVisible (false );
2777
+ // Set fog colors:
2778
+ sky->setFallbackBgColor (event->set_sky ->bgcolor );
2779
+ // Set sunrise and sunset fog tinting:
2780
+ sky->setHorizonTint (
2781
+ event->set_sky ->sun_tint ,
2782
+ event->set_sky ->moon_tint ,
2783
+ event->set_sky ->tint_type
2784
+ );
2785
+ // Add textures to skybox.
2786
+ for (int i = 0 ; i < 6 ; i++)
2787
+ sky->addTextureToSkybox (event->set_sky ->textures [i], i, texture_src);
2788
+ } else {
2789
+ // Handle everything else as plain color.
2790
+ if (event->set_sky ->type != " plain" )
2773
2791
infostream << " Unknown sky type: "
2774
- << (*event->set_sky .type ) << std::endl;
2775
-
2776
- sky->setFallbackBgColor (*event->set_sky .bgcolor );
2792
+ << (event->set_sky ->type ) << std::endl;
2793
+ sky->setVisible (false );
2794
+ sky->setFallbackBgColor (event->set_sky ->bgcolor );
2795
+ // Disable directional sun/moon tinting on plain or invalid skyboxes.
2796
+ sky->setHorizonTint (
2797
+ event->set_sky ->bgcolor ,
2798
+ event->set_sky ->bgcolor ,
2799
+ " custom"
2800
+ );
2777
2801
}
2802
+ delete event->set_sky ;
2803
+ }
2778
2804
2779
- delete event->set_sky .bgcolor ;
2780
- delete event->set_sky .type ;
2781
- delete event->set_sky .params ;
2805
+ void Game::handleClientEvent_SetSun (ClientEvent *event, CameraOrientation *cam)
2806
+ {
2807
+ sky->setSunVisible (event->sun_params ->visible );
2808
+ sky->setSunTexture (event->sun_params ->texture ,
2809
+ event->sun_params ->tonemap , texture_src);
2810
+ sky->setSunScale (event->sun_params ->scale );
2811
+ sky->setSunriseVisible (event->sun_params ->sunrise_visible );
2812
+ sky->setSunriseTexture (event->sun_params ->sunrise , texture_src);
2813
+ delete event->sun_params ;
2814
+ }
2815
+
2816
+ void Game::handleClientEvent_SetMoon (ClientEvent *event, CameraOrientation *cam)
2817
+ {
2818
+ sky->setMoonVisible (event->moon_params ->visible );
2819
+ sky->setMoonTexture (event->moon_params ->texture ,
2820
+ event->moon_params ->tonemap , texture_src);
2821
+ sky->setMoonScale (event->moon_params ->scale );
2822
+ delete event->moon_params ;
2823
+ }
2824
+
2825
+ void Game::handleClientEvent_SetStars (ClientEvent *event, CameraOrientation *cam)
2826
+ {
2827
+ sky->setStarsVisible (event->star_params ->visible );
2828
+ sky->setStarCount (event->star_params ->count , false );
2829
+ sky->setStarColor (event->star_params ->starcolor );
2830
+ sky->setStarScale (event->star_params ->scale );
2831
+ delete event->star_params ;
2782
2832
}
2783
2833
2784
2834
void Game::handleClientEvent_OverrideDayNigthRatio (ClientEvent *event,
@@ -3706,7 +3756,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
3706
3756
video::SColor clouds_dark = clouds->getColor ()
3707
3757
.getInterpolated (video::SColor (255 , 0 , 0 , 0 ), 0.9 );
3708
3758
sky->overrideColors (clouds_dark, clouds->getColor ());
3709
- sky->setBodiesVisible ( false );
3759
+ sky->setInClouds ( true );
3710
3760
runData.fog_range = std::fmin (runData.fog_range * 0 .5f , 32 .0f * BS);
3711
3761
// do not draw clouds after all
3712
3762
clouds->setVisible (false );
0 commit comments