Fix star visilibity and documentation (since 946c03c6)
authorJordan Snelling <jordach.snelling@gmail.com>
Sun, 8 Mar 2020 15:13:36 +0000 (15:13 +0000)
committerGitHub <noreply@github.com>
Sun, 8 Mar 2020 15:13:36 +0000 (16:13 +0100)
Fix memory leak (unused allocation)
Fix star rendering
Rename sky color struct
Fix stars on android
Remove extraneous .data() from android star draw

doc/lua_api.txt
src/client/sky.cpp
src/script/lua_api/l_object.cpp
src/skyparams.h

index a603a5a37e7db23e99fbfc6cde661a0d218e1ee1..5a3e37292c07f365e93630108f411f82cfeaa763 100644 (file)
@@ -6044,7 +6044,7 @@ object you are working with still exists.
         * `star_color`: ColorSpec, sets the colors of the stars,
             alpha channel is used to set overall star brightness.
             (default: `#ebebff69`)
-        * `size`: Float controlling the overall size of the stars (default: `1`)
+        * `scale`: Float controlling the overall size of the stars (default: `1`)
 * `get_stars()`: returns a table with the current stars parameters as in
     `set_stars`.
 * `set_clouds(parameters)`: set cloud parameters
index f2cab2f0f2536154b576ca35e2c6147787074877..7a7b188ce15788ceb73b3e46a34983598a508f32 100644 (file)
@@ -724,10 +724,10 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day)
        if (m_star_params.starcolor.getAlpha() < 1)
                return;
 #if ENABLE_GLES
-       u16 *indices = new u16[m_star_count * 3];
+       u16 *indices = new u16[m_star_params.count * 3];
        video::S3DVertex *vertices =
-                       new video::S3DVertex[m_star_count * 3];
-       for (u32 i = 0; i < m_star_count; i++) {
+                       new video::S3DVertex[m_star_params.count * 3];
+       for (u32 i = 0; i < m_star_params.count; i++) {
                indices[i * 3 + 0] = i * 3 + 0;
                indices[i * 3 + 1] = i * 3 + 1;
                indices[i * 3 + 2] = i * 3 + 2;
@@ -750,8 +750,8 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day)
                vertices[i * 3 + 2].Pos = p2;
                vertices[i * 3 + 2].Color = starcolor;
        }
-       driver->drawIndexedTriangleList(vertices.data(), m_star_count * 3,
-                       indices.data(), m_star_count);
+       driver->drawIndexedTriangleList(vertices, m_star_params.count * 3,
+                       indices, m_star_params.count);
        delete[] indices;
        delete[] vertices;
 #else
@@ -864,7 +864,7 @@ void Sky::setSunTexture(std::string sun_texture,
        }
 }
 
-void Sky::setSunriseTexture(std::string sunglow_texture, 
+void Sky::setSunriseTexture(std::string sunglow_texture,
                ITextureSource* tsrc)
 {
        // Ignore matching textures (with modifiers) entirely.
@@ -876,7 +876,7 @@ void Sky::setSunriseTexture(std::string sunglow_texture,
        );
 }
 
-void Sky::setMoonTexture(std::string moon_texture, 
+void Sky::setMoonTexture(std::string moon_texture,
                std::string moon_tonemap, ITextureSource *tsrc)
 {
        // Ignore matching textures (with modifiers) entirely,
@@ -914,25 +914,8 @@ void Sky::setMoonTexture(std::string moon_texture,
 
 void Sky::setStarCount(u16 star_count, bool force_update)
 {
-       // Force updating star count at game init.
-       if (force_update) {
-               m_star_params.count = star_count;
-               m_stars.clear();
-               // Rebuild the stars surrounding the camera
-               for (u16 i = 0; i < star_count; i++) {
-                       v3f star = v3f(
-                               myrand_range(-10000, 10000),
-                               myrand_range(-10000, 10000),
-                               myrand_range(-10000, 10000)
-                       );
-
-                       star.normalize();
-                       m_stars.emplace_back(star);
-               }
-       // Ignore changing star count if the new value is identical
-       } else if (m_star_params.count == star_count)
-               return;
-       else {
+       // Allow force updating star count at game init.
+       if (m_star_params.count != star_count || force_update) {
                m_star_params.count = star_count;
                m_stars.clear();
                // Rebuild the stars surrounding the camera
index 70e21f0881268aef22db676c7e7ab62a27491985..23ed1ffe005f81fed662fe3be849fb937574df89 100644 (file)
@@ -2059,7 +2059,7 @@ int ObjectRef::l_set_stars(lua_State *L)
        lua_pop(L, 1);
 
        star_params.scale = getfloatfield_default(L, 2,
-               "size", star_params.scale);
+               "scale", star_params.scale);
 
        getServer(L)->setStars(player, star_params);
        lua_pushboolean(L, true);
index 877907e318a54d22a73f6ea8c1d4269c9b84b278..9fdfd89dab16012d582f6b3a676df85bba38d78f 100644 (file)
@@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #pragma once
 
-struct skycolor
+struct SkyColor
 {
        video::SColor day_sky;
        video::SColor day_horizon;
@@ -36,7 +36,7 @@ struct SkyboxParams
        std::string type;
        std::vector<std::string> textures;
        bool clouds;
-       skycolor sky_color;
+       SkyColor sky_color;
        video::SColor sun_tint;
        video::SColor moon_tint;
        std::string tint_type;
@@ -72,9 +72,9 @@ struct StarParams
 class SkyboxDefaults
 {
 public:
-       const skycolor getSkyColorDefaults()
+       const SkyColor getSkyColorDefaults()
        {
-               skycolor sky;
+               SkyColor sky;
                // Horizon colors
                sky.day_horizon = video::SColor(255, 155, 193, 240);
                sky.indoors = video::SColor(255, 100, 100, 100);
@@ -112,6 +112,7 @@ public:
        const StarParams getStarDefaults()
        {
                StarParams stars;
+               stars.visible = true;
                stars.count = 1000;
                stars.starcolor = video::SColor(105, 235, 235, 255);
                stars.scale = 1;