Decoration: Change divlen to sidelen
authorkwolekr <kwolekr@minetest.net>
Mon, 17 Jun 2013 22:23:31 +0000 (18:23 -0400)
committerkwolekr <kwolekr@minetest.net>
Mon, 17 Jun 2013 22:23:31 +0000 (18:23 -0400)
doc/lua_api.txt
src/mapgen.cpp
src/mapgen.h
src/script/lua_api/luaapi.cpp

index b6981582e7071ca8b9d4590d0a3059524a3a23a5..85f6ca5a6afa012b8c16f2e14f2a8632c8fb68b0 100644 (file)
@@ -1875,8 +1875,9 @@ Decoration definition (register_decoration)
     deco_type = "simple", -- See "Decoration types"
     place_on = "default:dirt_with_grass",
     ^ Node that decoration can be placed on
-    divlen = 8,
-    ^ Number of divisions made in the chunk being generated
+    sidelen = 8,
+    ^ Size of divisions made in the chunk being generated.
+    ^ If the chunk size is not evenly divisible by sidelen, sidelen is made equal to the chunk size.
     fill_ratio = 0.02,
     ^ Ratio of the area to be uniformly filled by the decoration.
     ^ Used only if noise_params is not specified.
index 49ac827e1d171de7804bf97717dd5f52def0b3ca..17afcf350f4f9597ca57e507fa1d23c5a15e88c3 100644 (file)
@@ -232,8 +232,14 @@ void Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) {
        int carea_size = nmax.X - nmin.X + 1;
 
        // Divide area into parts
-       s16 sidelen = carea_size / divlen;
-       float area = sidelen * sidelen;
+       if (carea_size % sidelen) {
+               errorstream << "Decoration::placeDeco: chunk size is not divisible by "
+                       "sidelen; setting sidelen to " << carea_size << std::endl;
+               sidelen = carea_size;
+       }
+       
+       s16 divlen = carea_size / sidelen;
+       int area = sidelen * sidelen;
 
        for (s16 z0 = 0; z0 < divlen; z0++)
        for (s16 x0 = 0; x0 < divlen; x0++) {
index e8252cbbf542b027be72574111314458c45b443f..f3d90a14eb7fa0b31391d353e4b2eecedfc542c1 100644 (file)
@@ -199,7 +199,7 @@ public:
        int mapseed;
        std::string place_on_name;
        content_t c_place_on;
-       s16 divlen;
+       s16 sidelen;
        float fill_ratio;
        NoiseParams *np;
        
index 75139861b80a7a198b4c9d6fce0522d1d236dfd9..667a3afcfc684c353d68bc279a4e437befa7dd1e 100644 (file)
@@ -683,7 +683,7 @@ int ModApiBasic::l_register_decoration(lua_State *L)
 
        deco->c_place_on    = CONTENT_IGNORE;
        deco->place_on_name = getstringfield_default(L, index, "place_on", "ignore");
-       deco->divlen        = getintfield_default(L, index, "divlen", 8);
+       deco->sidelen       = getintfield_default(L, index, "sidelen", 8);
        deco->fill_ratio    = getfloatfield_default(L, index, "fill_ratio", 0.02);
        
        lua_getfield(L, index, "noise_params");
@@ -749,8 +749,8 @@ int ModApiBasic::l_register_decoration(lua_State *L)
                        break; }
        }
        
-       if (deco->divlen <= 0) {
-               errorstream << "register_decoration: divlen must be "
+       if (deco->sidelen <= 0) {
+               errorstream << "register_decoration: sidelen must be "
                        "greater than 0" << std::endl;
                delete deco;
                return 0;