]> git.lizzy.rs Git - minetest.git/commitdiff
Allow to set maximum star opacity at daytime (#11663)
authorWuzzy <Wuzzy@disroot.org>
Sat, 2 Jul 2022 18:57:48 +0000 (18:57 +0000)
committerGitHub <noreply@github.com>
Sat, 2 Jul 2022 18:57:48 +0000 (19:57 +0100)
doc/lua_api.txt
src/client/game.cpp
src/client/sky.cpp
src/client/sky.h
src/network/clientpackethandler.cpp
src/network/networkprotocol.h
src/script/lua_api/l_object.cpp
src/server.cpp
src/skyparams.h

index b5f58d7f21caf58925bd6b01d18eac5f8875c409..994a30981c35c743e7c1b38bea5dc5ccc41c1f8d 100644 (file)
@@ -7200,6 +7200,9 @@ object you are working with still exists.
     * `star_parameters` is a table with the following optional fields:
         * `visible`: Boolean for whether the stars are visible.
             (default: `true`)
+        * `day_opacity`: Float for maximum opacity of stars at day.
+            No effect if `visible` is false.
+            (default: 0.0; maximum: 1.0; minimum: 0.0)
         * `count`: Integer number to set the number of stars in
             the skybox. Only applies to `"skybox"` and `"regular"` sky types.
             (default: `1000`)
index 81a996c0801b31f4ccdfc49d579af222fcfef630..e6308c3b63399ce3f45fc09ce36436e481c6aa5f 100644 (file)
@@ -2876,6 +2876,7 @@ void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam
        sky->setStarCount(event->star_params->count);
        sky->setStarColor(event->star_params->starcolor);
        sky->setStarScale(event->star_params->scale);
+       sky->setStarDayOpacity(event->star_params->day_opacity);
        delete event->star_params;
 }
 
index 0ab710eee1d138bcc415e22c2c7c574b310cf783..ca56889b410ab9b3fe3d82aaffabd09a9a2cce85 100644 (file)
@@ -660,9 +660,12 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day)
        // to time 4000.
 
        float tod = wicked_time_of_day < 0.5f ? wicked_time_of_day : (1.0f - wicked_time_of_day);
-       float starbrightness = (0.25f - fabsf(tod)) * 20.0f;
+       float day_opacity = clamp(m_star_params.day_opacity, 0.0f, 1.0f);
+       float starbrightness = (0.25f - fabs(tod)) * 20.0f;
+       float alpha = clamp(starbrightness, day_opacity, 1.0f);
+
        m_star_color = m_star_params.starcolor;
-       m_star_color.a *= clamp(starbrightness, 0.0f, 1.0f);
+       m_star_color.a *= alpha;
        if (m_star_color.a <= 0.0f) // Stars are only drawn when not fully transparent
                return;
        m_materials[0].DiffuseColor = m_materials[0].EmissiveColor = m_star_color.toSColor();
index e03683f121a40a03c41689e12e3ac1ff50425df1..cbb1186aac05528d4bcfac78dcaac755882e9e14 100644 (file)
@@ -82,6 +82,7 @@ class Sky : public scene::ISceneNode
        void setStarCount(u16 star_count);
        void setStarColor(video::SColor star_color) { m_star_params.starcolor = star_color; }
        void setStarScale(f32 star_scale) { m_star_params.scale = star_scale; updateStars(); }
+       void setStarDayOpacity(f32 day_opacity) { m_star_params.day_opacity = day_opacity; }
 
        bool getCloudsVisible() const { return m_clouds_visible && m_clouds_enabled; }
        const video::SColorf &getCloudColor() const { return m_cloudcolor_f; }
index 764f6569f7e9b73af4d278d42af973b191e5e512..fba0fe72d91028419b441a62532000f45ef87a58 100644 (file)
@@ -1340,10 +1340,13 @@ void Client::handleCommand_HudSetMoon(NetworkPacket *pkt)
 
 void Client::handleCommand_HudSetStars(NetworkPacket *pkt)
 {
-       StarParams stars;
+       StarParams stars = SkyboxDefaults::getStarDefaults();
 
        *pkt >> stars.visible >> stars.count
                >> stars.starcolor >> stars.scale;
+       try {
+               *pkt >> stars.day_opacity;
+       } catch (PacketError &e) {};
 
        ClientEvent *event = new ClientEvent();
        event->type        = CE_SET_STARS;
index 3923cb85812e61dfc31d9a3e2ace8ff2522095c6..7c5b2e3fe735732b0fc2a4fc7d9e945ec0cf7e06 100644 (file)
@@ -735,6 +735,7 @@ enum ToClientCommand
                u32 count
                u8[4] starcolor (ARGB)
                f32 scale
+               f32 day_opacity
        */
 
        TOCLIENT_SRP_BYTES_S_B = 0x60,
index 37ba1521a1d56026019b0b6406bac6d8e56dcbf4..6bd07a4c1d15bcec166e4b5096b91fc6858e5ee1 100644 (file)
@@ -2084,6 +2084,9 @@ int ObjectRef::l_set_stars(lua_State *L)
                        "scale", star_params.scale);
        }
 
+       star_params.day_opacity = getfloatfield_default(L, 2,
+               "day_opacity", star_params.day_opacity);
+
        getServer(L)->setStars(player, star_params);
        return 0;
 }
@@ -2108,6 +2111,8 @@ int ObjectRef::l_get_stars(lua_State *L)
        lua_setfield(L, -2, "star_color");
        lua_pushnumber(L, star_params.scale);
        lua_setfield(L, -2, "scale");
+       lua_pushnumber(L, star_params.day_opacity);
+       lua_setfield(L, -2, "day_opacity");
        return 1;
 }
 
index a47062a4d6adaf46ad9c8953e1c03bbd4d846dc4..d94271143546119a02645dbc2f5c154f1b9dc603 100644 (file)
@@ -1775,7 +1775,8 @@ void Server::SendSetStars(session_t peer_id, const StarParams &params)
        NetworkPacket pkt(TOCLIENT_SET_STARS, 0, peer_id);
 
        pkt << params.visible << params.count
-               << params.starcolor << params.scale;
+               << params.starcolor << params.scale
+               << params.day_opacity;
 
        Send(&pkt);
 }
index f7f69442787319fefd9e647e65bd4ce508ccf39c..07068634bbc16554c62fa4535e1d21957345809f 100644 (file)
@@ -66,6 +66,7 @@ struct StarParams
        u32 count;
        video::SColor starcolor;
        f32 scale;
+       f32 day_opacity;
 };
 
 struct CloudParams
@@ -141,6 +142,7 @@ class SkyboxDefaults
                stars.count = 1000;
                stars.starcolor = video::SColor(105, 235, 235, 255);
                stars.scale = 1;
+               stars.day_opacity = 0;
                return stars;
        }