]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/nodedef.h
Fix trees growing into any type of node
[dragonfireclient.git] / src / nodedef.h
index 2f2bfe46eb17040febd839f7fc8d1ac9e0d8081e..4ff6c6b48a10b69811453575994300a71be1a418 100644 (file)
@@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef NODEDEF_HEADER
 #define NODEDEF_HEADER
 
-#include "irrlichttypes.h"
+#include "irrlichttypes_bloated.h"
 #include <string>
 #include <iostream>
 #include <map>
@@ -65,7 +65,7 @@ enum LiquidType
 enum NodeBoxType
 {
        NODEBOX_REGULAR, // Regular block; allows buildable_to
-       NODEBOX_FIXED, // Static separately defined box
+       NODEBOX_FIXED, // Static separately defined box(es)
        NODEBOX_WALLMOUNTED, // Box for wall mounted nodes; (top, bottom, side)
 };
 
@@ -74,22 +74,16 @@ struct NodeBox
        enum NodeBoxType type;
        // NODEBOX_REGULAR (no parameters)
        // NODEBOX_FIXED
-       core::aabbox3d<f32> fixed;
+       std::vector<aabb3f> fixed;
        // NODEBOX_WALLMOUNTED
-       core::aabbox3d<f32> wall_top;
-       core::aabbox3d<f32> wall_bottom;
-       core::aabbox3d<f32> wall_side; // being at the -X side
-
-       NodeBox():
-               type(NODEBOX_REGULAR),
-               // default is rail-like
-               fixed(-BS/2, -BS/2, -BS/2, BS/2, -BS/2+BS/16., BS/2),
-               // default is sign/ladder-like
-               wall_top(-BS/2, BS/2-BS/16., -BS/2, BS/2, BS/2, BS/2),
-               wall_bottom(-BS/2, -BS/2, -BS/2, BS/2, -BS/2+BS/16., BS/2),
-               wall_side(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2)
-       {}
+       aabb3f wall_top;
+       aabb3f wall_bottom;
+       aabb3f wall_side; // being at the -X side
 
+       NodeBox()
+       { reset(); }
+
+       void reset();
        void serialize(std::ostream &os) const;
        void deSerialize(std::istream &is);
 };
@@ -143,6 +137,7 @@ enum NodeDrawType
        NDT_PLANTLIKE,
        NDT_FENCELIKE,
        NDT_RAILLIKE,
+       NDT_NODEBOX,
 };
 
 #define CF_SPECIAL_COUNT 2
@@ -214,9 +209,12 @@ struct ContentFeatures
        // 1 giving almost instantaneous propagation and 7 being
        // the slowest possible
        u8 liquid_viscosity;
+       // Is liquid renewable (new liquid source will be created between 2 existing)
+       bool liquid_renewable;
        // Amount of light the node emits
        u8 light_source;
        u32 damage_per_second;
+       NodeBox node_box;
        NodeBox selection_box;
        // Compatibility with old maps
        // Set to true if paramtype used to be 'facedir_simple'