Allow group:groupname in ABM definition and implement minetest.hash_node_position()
[oweals/minetest.git] / src / nodedef.h
index 9524385cf075d6e8618b0ac65f6f83863fff7fc4..753bea0ed1ff0550ce5e2c8429b0c3bb50827f1c 100644 (file)
@@ -20,15 +20,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef NODEDEF_HEADER
 #define NODEDEF_HEADER
 
-#include "common_irrlicht.h"
+#include "irrlichttypes.h"
 #include <string>
 #include <iostream>
-#include <set>
+#include <map>
 #include "mapnode.h"
 #ifndef SERVER
 #include "tile.h"
 #endif
-#include "materials.h" // MaterialProperties
+#include "itemgroup.h"
+#include "sound.h" // SimpleSoundSpec
 class IItemDefManager;
 class ITextureSource;
 class IGameDef;
@@ -135,10 +136,9 @@ struct ContentFeatures
        // 0     1     2     3     4     5
        // up    down  right left  back  front 
        TileSpec tiles[6];
-       // Special material/texture
+       // Special tiles
        // - Currently used for flowing liquids
-       video::SMaterial *special_materials[CF_SPECIAL_COUNT];
-       AtlasPointer *special_aps[CF_SPECIAL_COUNT];
+       TileSpec special_tiles[CF_SPECIAL_COUNT];
        u8 solidness; // Used when choosing which face is drawn
        u8 visual_solidness; // When solidness=0, this tells how it looks like
        bool backface_culling;
@@ -149,6 +149,7 @@ struct ContentFeatures
        */
 
        std::string name; // "" = undefined node
+       ItemGroupList groups; // Same as in itemdef
 
        // Visual definition
        enum NodeDrawType drawtype;
@@ -194,13 +195,17 @@ struct ContentFeatures
        u8 light_source;
        u32 damage_per_second;
        NodeBox selection_box;
-       MaterialProperties material;
        // Compatibility with old maps
        // Set to true if paramtype used to be 'facedir_simple'
        bool legacy_facedir_simple;
        // Set to true if wall_mounted used to be set to true
        bool legacy_wallmounted;
 
+       // Sound properties
+       SimpleSoundSpec sound_footstep;
+       SimpleSoundSpec sound_dig;
+       SimpleSoundSpec sound_dug;
+
        /*
                Methods
        */
@@ -233,6 +238,9 @@ public:
        virtual const ContentFeatures& get(const MapNode &n) const=0;
        virtual bool getId(const std::string &name, content_t &result) const=0;
        virtual content_t getId(const std::string &name) const=0;
+       // Allows "group:name" in addition to regular node names
+       virtual void getIds(const std::string &name, std::set<content_t> &result)
+                       const=0;
        virtual const ContentFeatures& get(const std::string &name) const=0;
        
        virtual void serialize(std::ostream &os)=0;
@@ -249,6 +257,9 @@ public:
        virtual const ContentFeatures& get(const MapNode &n) const=0;
        virtual bool getId(const std::string &name, content_t &result) const=0;
        virtual content_t getId(const std::string &name) const=0;
+       // Allows "group:name" in addition to regular node names
+       virtual void getIds(const std::string &name, std::set<content_t> &result)
+                       const=0;
        // If not found, returns the features of CONTENT_IGNORE
        virtual const ContentFeatures& get(const std::string &name) const=0;