diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-06-03 18:30:34 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-06-03 22:31:02 +0300 |
commit | a09d86dd3cc3fd31404e6403cfc5d9c7020f944f (patch) | |
tree | da48d36fbfc83eaba81fb8cf2ec4a74a56d33c51 /src/game.cpp | |
parent | 3ccb0f691b1ec45a2fb5b7f4a5fc0ae2db776d36 (diff) | |
download | minetest-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.cpp | 24 |
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 |