Update set_mapgen_params and set_gen_notify Lua API to use new flag format
authorkwolekr <kwolekr@minetest.net>
Sat, 8 Mar 2014 16:34:46 +0000 (11:34 -0500)
committerkwolekr <kwolekr@minetest.net>
Sat, 8 Mar 2014 16:35:04 +0000 (11:35 -0500)
src/script/common/c_content.cpp
src/script/common/c_content.h
src/script/lua_api/l_mapgen.cpp

index 74e1b09567044b241db3934a18e6407976ed6eb5..899e1c53668c6c331e19ddd00ecec78e4db8c09f 100644 (file)
@@ -840,23 +840,32 @@ void push_hit_params(lua_State *L,const HitParams &params)
 }
 
 /******************************************************************************/
-u32 getflagsfield(lua_State *L, int table, const char *fieldname,
-       FlagDesc *flagdesc, u32 *flagmask)
+
+bool getflagsfield(lua_State *L, int table, const char *fieldname,
+       FlagDesc *flagdesc, u32 *flags, u32 *flagmask)
 {
-       u32 flags = 0;
-       
        lua_getfield(L, table, fieldname);
 
-       if (lua_isstring(L, -1)) {
-               std::string flagstr = lua_tostring(L, -1);
-               flags = readFlagString(flagstr, flagdesc, flagmask);
-       } else if (lua_istable(L, -1)) {
-               flags = read_flags_table(L, -1, flagdesc, flagmask);
-       }
+       bool success = read_flags(L, -1, flagdesc, flags, flagmask);
 
        lua_pop(L, 1);
 
-       return flags;
+       return success;
+}
+
+bool read_flags(lua_State *L, int index, FlagDesc *flagdesc,
+       u32 *flags, u32 *flagmask)
+{
+       if (lua_isstring(L, index)) {
+               std::string flagstr = lua_tostring(L, index);
+               *flags = readFlagString(flagstr, flagdesc, flagmask);
+       } else if (lua_istable(L, index)) {
+               *flags = read_flags_table(L, index, flagdesc, flagmask);
+       } else {
+               return false;
+       }
+
+       return true;
 }
 
 u32 read_flags_table(lua_State *L, int table, FlagDesc *flagdesc, u32 *flagmask)
index 9aed5ccfaebccfa348fc5cd3604dc8b844ba55f6..f48c673bd84bb51738275ef35d262bc525f2dba1 100644 (file)
@@ -119,9 +119,14 @@ int                getenumfield              (lua_State *L,
                                               const EnumString *spec,
                                               int default_);
 
-u32                getflagsfield             (lua_State *L, int table,
+bool               getflagsfield             (lua_State *L, int table,
                                               const char *fieldname,
-                                              FlagDesc *flagdesc, u32 *flagmask);
+                                              FlagDesc *flagdesc,
+                                              u32 *flags, u32 *flagmask);
+
+bool               read_flags                (lua_State *L, int index,
+                                              FlagDesc *flagdesc,
+                                              u32 *flags, u32 *flagmask);
 
 u32                read_flags_table          (lua_State *L, int table,
                                               FlagDesc *flagdesc, u32 *flagmask);
index f357d3f440e17bf6f1289fb2b1e6e58b3703e197..56109a9dd6091d177cb3cea610e9ae5ce8eca245 100644 (file)
@@ -189,9 +189,10 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L)
                return 0;
 
        EmergeManager *emerge = getServer(L)->getEmergeManager();
-       ASSERT(emerge);
+       assert(emerge);
 
        std::string flagstr;
+       u32 flags = 0, flagmask = 0;
 
        lua_getfield(L, 1, "mgname");
        if (lua_isstring(L, -1)) {
@@ -216,13 +217,7 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L)
                        "see lua_api.txt" << std::endl;
        }
 
-       lua_getfield(L, 1, "flags");
-       if (lua_isstring(L, -1)) {
-               u32 flags, flagmask;
-
-               flagstr = lua_tostring(L, -1);
-               flags   = readFlagString(flagstr, flagdesc_mapgen, &flagmask);
-
+       if (getflagsfield(L, 1, "flags", flagdesc_mapgen, &flags, &flagmask)) {
                emerge->params.flags &= ~flagmask;
                emerge->params.flags |= flags;
        }
@@ -260,11 +255,13 @@ int ModApiMapgen::l_set_noiseparam_defaults(lua_State *L)
 // set_gen_notify(string)
 int ModApiMapgen::l_set_gen_notify(lua_State *L)
 {
-       if (lua_isstring(L, 1)) {
+       u32 flags = 0, flagmask = 0;
+
+       if (read_flags(L, 1, flagdesc_gennotify, &flags, &flagmask)) {
                EmergeManager *emerge = getServer(L)->getEmergeManager();
-               emerge->gennotify = readFlagString(lua_tostring(L, 1),
-                       flagdesc_gennotify, NULL);
+               emerge->gennotify = flags;
        }
+
        return 0;
 }
 
@@ -407,8 +404,11 @@ int ModApiMapgen::l_register_decoration(lua_State *L)
                        break; }
                case DECO_SCHEMATIC: {
                        DecoSchematic *dschem = (DecoSchematic *)deco;
-                       dschem->flags = getflagsfield(L, index, "flags",
-                               flagdesc_deco_schematic, NULL);
+
+                       dschem->flags = 0;
+                       getflagsfield(L, index, "flags", flagdesc_deco_schematic,
+                               &dschem->flags, NULL);
+
                        dschem->rotation = (Rotation)getenumfield(L, index,
                                "rotation", es_Rotation, ROTATE_0);
 
@@ -482,8 +482,10 @@ int ModApiMapgen::l_register_ore(lua_State *L)
        ore->clust_size     = getintfield_default(L, index, "clust_size", 0);
        ore->height_min     = getintfield_default(L, index, "height_min", 0);
        ore->height_max     = getintfield_default(L, index, "height_max", 0);
-       ore->flags          = getflagsfield(L, index, "flags", flagdesc_ore, NULL);
        ore->nthresh        = getfloatfield_default(L, index, "noise_threshhold", 0.);
+       ore->flags          = 0;
+       getflagsfield(L, index, "flags", flagdesc_ore, &ore->flags, NULL);
+
        lua_getfield(L, index, "wherein");
        if (lua_istable(L, -1)) {
                int  i = lua_gettop(L);