LuaVoxelManip: Add option to allocate blank data
[oweals/minetest.git] / src / mapnode.h
index 785537759a4ea2ee0b12891b080fe9c759dd53de..e67724ec1b8af8699cda2bbab3bec8779de5f051 100644 (file)
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "irr_v3d.h"
 #include "irr_aabb3d.h"
 #include "light.h"
+#include <string>
 #include <vector>
 
 class INodeDefManager;
@@ -42,7 +43,7 @@ typedef u16 content_t;
        there is enough room for dummy node IDs, which are created when
        a MapBlock containing unknown node names is loaded from disk.
 */
-#define MAX_REGISTERED_CONTENT 0xfffU
+#define MAX_REGISTERED_CONTENT 0x7fffU
 
 /*
        A solid walkable node with the texture unknown_node.png.
@@ -107,6 +108,9 @@ enum Rotation {
 #define LEVELED_MASK 0x3F
 #define LEVELED_MAX LEVELED_MASK
 
+
+struct ContentFeatures;
+
 /*
        This is the stuff what the whole world consists of.
 */
@@ -139,14 +143,13 @@ struct MapNode
        {
                *this = n;
        }
-       
-       MapNode(content_t content=CONTENT_AIR, u8 a_param1=0, u8 a_param2=0)
-       {
-               param0 = content;
-               param1 = a_param1;
-               param2 = a_param2;
-       }
-       
+
+       MapNode(content_t content = CONTENT_AIR, u8 a_param1=0, u8 a_param2=0)
+               : param0(content),
+                 param1(a_param1),
+                 param2(a_param2)
+       { }
+
        // Create directly from a nodename
        // If name is unknown, sets CONTENT_IGNORE
        MapNode(INodeDefManager *ndef, const std::string &name,
@@ -187,6 +190,24 @@ struct MapNode
        
        void setLight(enum LightBank bank, u8 a_light, INodeDefManager *nodemgr);
        u8 getLight(enum LightBank bank, INodeDefManager *nodemgr) const;
+
+       /**
+        * This function differs from getLight(enum LightBank bank, INodeDefManager *nodemgr)
+        * in that the ContentFeatures of the node in question are not retrieved by
+        * the function itself.  Thus, if you have already called nodemgr->get() to
+        * get the ContentFeatures you pass it to this function instead of the
+        * function getting ContentFeatures itself.  Since INodeDefManager::get()
+        * is relatively expensive this can lead to significant performance
+        * improvements in some situations.  Call this function if (and only if)
+        * you have already retrieved the ContentFeatures by calling
+        * INodeDefManager::get() for the node you're working with and the
+        * pre-conditions listed are true.
+        *
+        * @pre f != NULL
+        * @pre f->param_type == CPT_LIGHT
+        */
+       u8 getLightNoChecks(LightBank bank, const ContentFeatures *f);
+
        bool getLightBanks(u8 &lightday, u8 &lightnight, INodeDefManager *nodemgr) const;
        
        // 0 <= daylight_factor <= 1000
@@ -216,8 +237,7 @@ struct MapNode
        void rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot);
 
        /*
-               Gets list of node boxes (used for rendering (NDT_NODEBOX)
-               and collision)
+               Gets list of node boxes (used for rendering (NDT_NODEBOX))
        */
        std::vector<aabb3f> getNodeBoxes(INodeDefManager *nodemgr) const;
 
@@ -226,6 +246,11 @@ struct MapNode
        */
        std::vector<aabb3f> getSelectionBoxes(INodeDefManager *nodemgr) const;
 
+       /*
+               Gets list of collision boxes
+       */
+       std::vector<aabb3f> getCollisionBoxes(INodeDefManager *nodemgr) const;
+
        /* Liquid helpers */
        u8 getMaxLevel(INodeDefManager *nodemgr) const;
        u8 getLevel(INodeDefManager *nodemgr) const;