Line data Source code
1 : /*
2 : Minetest
3 : Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 :
5 : This program is free software; you can redistribute it and/or modify
6 : it under the terms of the GNU Lesser General Public License as published by
7 : the Free Software Foundation; either version 2.1 of the License, or
8 : (at your option) any later version.
9 :
10 : This program is distributed in the hope that it will be useful,
11 : but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 : GNU Lesser General Public License for more details.
14 :
15 : You should have received a copy of the GNU Lesser General Public License along
16 : with this program; if not, write to the Free Software Foundation, Inc.,
17 : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 : */
19 :
20 : #ifndef NODEMETADATA_HEADER
21 : #define NODEMETADATA_HEADER
22 :
23 : #include "irr_v3d.h"
24 : #include <iostream>
25 : #include <vector>
26 : #include "util/string.h"
27 :
28 : /*
29 : NodeMetadata stores arbitary amounts of data for special blocks.
30 : Used for furnaces, chests and signs.
31 :
32 : There are two interaction methods: inventory menu and text input.
33 : Only one can be used for a single metadata, thus only inventory OR
34 : text input should exist in a metadata.
35 : */
36 :
37 : class Inventory;
38 : class IGameDef;
39 :
40 : class NodeMetadata
41 : {
42 : public:
43 : NodeMetadata(IGameDef *gamedef);
44 : ~NodeMetadata();
45 :
46 : void serialize(std::ostream &os) const;
47 : void deSerialize(std::istream &is);
48 :
49 : void clear();
50 :
51 : // Generic key/value store
52 : std::string getString(const std::string &name, unsigned short recursion = 0) const;
53 : void setString(const std::string &name, const std::string &var);
54 : // Support variable names in values
55 : std::string resolveString(const std::string &str, unsigned short recursion = 0) const;
56 0 : StringMap getStrings() const
57 : {
58 0 : return m_stringvars;
59 : }
60 :
61 : // The inventory
62 0 : Inventory *getInventory()
63 : {
64 0 : return m_inventory;
65 : }
66 :
67 : private:
68 : StringMap m_stringvars;
69 : Inventory *m_inventory;
70 : };
71 :
72 :
73 : /*
74 : List of metadata of all the nodes of a block
75 : */
76 :
77 751 : class NodeMetadataList
78 : {
79 : public:
80 : ~NodeMetadataList();
81 :
82 : void serialize(std::ostream &os) const;
83 : void deSerialize(std::istream &is, IGameDef *gamedef);
84 :
85 : // Add all keys in this list to the vector keys
86 : std::vector<v3s16> getAllKeys();
87 : // Get pointer to data
88 : NodeMetadata *get(v3s16 p);
89 : // Deletes data
90 : void remove(v3s16 p);
91 : // Deletes old data and sets a new one
92 : void set(v3s16 p, NodeMetadata *d);
93 : // Deletes all
94 : void clear();
95 :
96 : private:
97 : std::map<v3s16, NodeMetadata *> m_data;
98 : };
99 :
100 : #endif
101 :
|