Mgfractal: Add 3D and 4D fractals
[oweals/minetest.git] / src / mapnode.h
index d0b949e6ff60b257f838e107a4fd56db8383fbfc..7cc25c60cfabde4b70036e1b80667ad67f69ebad 100644 (file)
@@ -62,11 +62,11 @@ typedef u16 content_t;
 
 /*
        Ignored node.
 
 /*
        Ignored node.
-       
+
        Unloaded chunks are considered to consist of this. Several other
        methods return this when an error occurs. Also, during
        map generation this means the node has not been set yet.
        Unloaded chunks are considered to consist of this. Several other
        methods return this when an error occurs. Also, during
        map generation this means the node has not been set yet.
-       
+
        Doesn't create faces with anything and is considered being
        out-of-map in the game map.
 */
        Doesn't create faces with anything and is considered being
        out-of-map in the game map.
 */
@@ -108,6 +108,9 @@ enum Rotation {
 #define LEVELED_MASK 0x3F
 #define LEVELED_MAX LEVELED_MASK
 
 #define LEVELED_MASK 0x3F
 #define LEVELED_MAX LEVELED_MASK
 
+
+struct ContentFeatures;
+
 /*
        This is the stuff what the whole world consists of.
 */
 /*
        This is the stuff what the whole world consists of.
 */
@@ -129,25 +132,27 @@ struct MapNode
                - Uhh... well, most blocks have light or nothing in here.
        */
        u8 param1;
                - Uhh... well, most blocks have light or nothing in here.
        */
        u8 param1;
-       
+
        /*
                The second parameter. Initialized to 0.
                E.g. direction for torches and flowing water.
        */
        u8 param2;
 
        /*
                The second parameter. Initialized to 0.
                E.g. direction for torches and flowing water.
        */
        u8 param2;
 
+       MapNode()
+       { }
+
        MapNode(const MapNode & n)
        {
                *this = n;
        }
        MapNode(const MapNode & n)
        {
                *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, 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,
        // Create directly from a nodename
        // If name is unknown, sets CONTENT_IGNORE
        MapNode(INodeDefManager *ndef, const std::string &name,
@@ -159,7 +164,7 @@ struct MapNode
                                && param1 == other.param1
                                && param2 == other.param2);
        }
                                && param1 == other.param1
                                && param2 == other.param2);
        }
-       
+
        // To be used everywhere
        content_t getContent() const
        {
        // To be used everywhere
        content_t getContent() const
        {
@@ -185,11 +190,37 @@ struct MapNode
        {
                param2 = p;
        }
        {
                param2 = p;
        }
-       
+
        void setLight(enum LightBank bank, u8 a_light, INodeDefManager *nodemgr);
        void setLight(enum LightBank bank, u8 a_light, INodeDefManager *nodemgr);
+
+       /**
+        * Check if the light value for night differs from the light value for day.
+        *
+        * @return If the light values are equal, returns true; otherwise false
+        */
+       bool isLightDayNightEq(INodeDefManager *nodemgr) const;
+
        u8 getLight(enum LightBank bank, INodeDefManager *nodemgr) const;
        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) const;
+
        bool getLightBanks(u8 &lightday, u8 &lightnight, INodeDefManager *nodemgr) const;
        bool getLightBanks(u8 &lightday, u8 &lightnight, INodeDefManager *nodemgr) const;
-       
+
        // 0 <= daylight_factor <= 1000
        // 0 <= return value <= LIGHT_SUN
        u8 getLightBlend(u32 daylight_factor, INodeDefManager *nodemgr) const
        // 0 <= daylight_factor <= 1000
        // 0 <= return value <= LIGHT_SUN
        u8 getLightBlend(u32 daylight_factor, INodeDefManager *nodemgr) const
@@ -200,20 +231,10 @@ struct MapNode
                return blend_light(daylight_factor, lightday, lightnight);
        }
 
                return blend_light(daylight_factor, lightday, lightnight);
        }
 
-       // 0.0 <= daylight_factor <= 1.0
-       // 0 <= return value <= LIGHT_SUN
-       u8 getLightBlendF1(float daylight_factor, INodeDefManager *nodemgr) const
-       {
-               u8 lightday = 0;
-               u8 lightnight = 0;
-               getLightBanks(lightday, lightnight, nodemgr);
-               return blend_light_f1(daylight_factor, lightday, lightnight);
-       }
-
        u8 getFaceDir(INodeDefManager *nodemgr) const;
        u8 getWallMounted(INodeDefManager *nodemgr) const;
        v3s16 getWallMountedDir(INodeDefManager *nodemgr) const;
        u8 getFaceDir(INodeDefManager *nodemgr) const;
        u8 getWallMounted(INodeDefManager *nodemgr) const;
        v3s16 getWallMountedDir(INodeDefManager *nodemgr) const;
-       
+
        void rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot);
 
        /*
        void rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot);
 
        /*
@@ -231,12 +252,13 @@ struct MapNode
        */
        std::vector<aabb3f> getCollisionBoxes(INodeDefManager *nodemgr) const;
 
        */
        std::vector<aabb3f> getCollisionBoxes(INodeDefManager *nodemgr) const;
 
-       /* Liquid helpers */
+       /*
+               Liquid helpers
+       */
        u8 getMaxLevel(INodeDefManager *nodemgr) const;
        u8 getLevel(INodeDefManager *nodemgr) const;
        u8 setLevel(INodeDefManager *nodemgr, s8 level = 1);
        u8 addLevel(INodeDefManager *nodemgr, s8 add = 1);
        u8 getMaxLevel(INodeDefManager *nodemgr) const;
        u8 getLevel(INodeDefManager *nodemgr) const;
        u8 setLevel(INodeDefManager *nodemgr, s8 level = 1);
        u8 addLevel(INodeDefManager *nodemgr, s8 add = 1);
-       void freezeMelt(INodeDefManager *nodemgr);
 
        /*
                Serialization functions
 
        /*
                Serialization functions
@@ -245,7 +267,7 @@ struct MapNode
        static u32 serializedLength(u8 version);
        void serialize(u8 *dest, u8 version);
        void deSerialize(u8 *source, u8 version);
        static u32 serializedLength(u8 version);
        void serialize(u8 *dest, u8 version);
        void deSerialize(u8 *source, u8 version);
-       
+
        // Serializes or deserializes a list of nodes in bulk format (first the
        // content of all nodes, then the param1 of all nodes, then the param2
        // of all nodes).
        // Serializes or deserializes a list of nodes in bulk format (first the
        // content of all nodes, then the param1 of all nodes, then the param2
        // of all nodes).