summaryrefslogtreecommitdiff
path: root/src/game.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-06-03 18:30:34 +0300
committerPerttu Ahola <celeron55@gmail.com>2012-06-03 22:31:02 +0300
commita09d86dd3cc3fd31404e6403cfc5d9c7020f944f (patch)
treeda48d36fbfc83eaba81fb8cf2ec4a74a56d33c51 /src/game.cpp
parent3ccb0f691b1ec45a2fb5b7f4a5fc0ae2db776d36 (diff)
downloadminetest-a09d86dd3cc3fd31404e6403cfc5d9c7020f944f.tar.gz
minetest-a09d86dd3cc3fd31404e6403cfc5d9c7020f944f.tar.bz2
minetest-a09d86dd3cc3fd31404e6403cfc5d9c7020f944f.zip
Update inventory menu from formspec on-the-fly
Diffstat (limited to 'src/game.cpp')
-rw-r--r--src/game.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/game.cpp b/src/game.cpp
index 768bb5602..69b3c321a 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -132,6 +132,28 @@ private:
Client *m_client;
};
+/* Form update callback */
+
+class NodeMetadataFormSource: public IFormSource
+{
+public:
+ NodeMetadataFormSource(ClientMap *map, v3s16 p):
+ m_map(map),
+ m_p(p)
+ {
+ }
+ std::string getForm()
+ {
+ NodeMetadata *meta = m_map->getNodeMetadata(m_p);
+ if(!meta)
+ return "";
+ return meta->getString("formspec");
+ }
+
+ ClientMap *m_map;
+ v3s16 m_p;
+};
+
/*
Hotbar draw routine
*/
@@ -2348,6 +2370,8 @@ void the_game(
&client, gamedef);
menu->setFormSpec(meta->getString("formspec"),
inventoryloc);
+ menu->setFormSource(new NodeMetadataFormSource(
+ &client.getEnv().getClientMap(), nodepos));
menu->drop();
}
// Otherwise report right click to server