diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-11-13 12:48:05 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-11-29 19:13:41 +0200 |
commit | 64fa59e24f7b3e046b7dfeba930e44c86e32668e (patch) | |
tree | 1509c79dde0ddd007df19d9647a2c5c9e968386d | |
parent | 79c9f14aec52c0fa1b3c2b1850ab3c6a9124a313 (diff) | |
download | minetest-64fa59e24f7b3e046b7dfeba930e44c86e32668e.tar.gz minetest-64fa59e24f7b3e046b7dfeba930e44c86e32668e.tar.bz2 minetest-64fa59e24f7b3e046b7dfeba930e44c86e32668e.zip |
Generic NodeMetadata text input
-rw-r--r-- | src/content_nodemeta.h | 5 | ||||
-rw-r--r-- | src/game.cpp | 23 | ||||
-rw-r--r-- | src/nodemetadata.h | 20 |
3 files changed, 20 insertions, 28 deletions
diff --git a/src/content_nodemeta.h b/src/content_nodemeta.h index e20334312..da5639e72 100644 --- a/src/content_nodemeta.h +++ b/src/content_nodemeta.h @@ -36,8 +36,9 @@ public: virtual void serializeBody(std::ostream &os); virtual std::string infoText(); - std::string getText(){ return m_text; } - void setText(std::string t){ m_text = t; } + virtual bool allowsTextInput(){ return true; } + virtual std::string getText(){ return m_text; } + virtual void setText(const std::string &t){ m_text = t; } private: std::string m_text; diff --git a/src/game.cpp b/src/game.cpp index 30bd1bcf7..638ad9155 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -43,12 +43,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gettext.h" #include "log.h" #include "filesys.h" -// Needed for writing to signs (CONTENT_SIGN_WALL) -// TODO: A generic way for handling such should be created -#include "content_mapnode.h" -// Needed for sign text input -// TODO: A generic way for handling such should be created -#include "content_nodemeta.h" // Needed for determining pointing to nodes #include "mapnode_contentfeatures.h" @@ -115,9 +109,9 @@ struct TextDestChat : public TextDest Client *m_client; }; -struct TextDestSignNode : public TextDest +struct TextDestNodeMetadata : public TextDest { - TextDestSignNode(v3s16 p, Client *client) + TextDestNodeMetadata(v3s16 p, Client *client) { m_p = p; m_client = client; @@ -1784,23 +1778,22 @@ void the_game( menu->setDrawSpec(draw_spec); menu->drop(); } - else if(meta && meta->typeId() == CONTENT_SIGN_WALL && !random_input) + // If metadata provides text input, activate text input + else if(meta && meta->allowsTextInput() && !random_input) { - infostream<<"Sign node right-clicked"<<std::endl; - - SignNodeMetadata *signmeta = (SignNodeMetadata*)meta; + infostream<<"Launching metadata text input"<<std::endl; // Get a new text for it - TextDest *dest = new TextDestSignNode(nodepos, &client); + TextDest *dest = new TextDestNodeMetadata(nodepos, &client); - std::wstring wtext = - narrow_to_wide(signmeta->getText()); + std::wstring wtext = narrow_to_wide(meta->getText()); (new GUITextInputMenu(guienv, guiroot, -1, &g_menumgr, dest, wtext))->drop(); } + // Otherwise report right click to server else { client.groundAction(1, nodepos, neighbourpos, g_selected_item); diff --git a/src/nodemetadata.h b/src/nodemetadata.h index d81ade96c..5b2f129a1 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -25,16 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include <iostream> /* - Used for storing: + NodeMetadata stores arbitary amounts of data for special blocks. + Used for furnaces, chests and signs. - Oven: - - Item that is being burned - - Burning time - - Item stack that is being heated - - Result item stack - - Sign: - - Text + There are two interaction methods: inventory menu and text input. + Only one can be used for a single metadata, thus only inventory OR + text input should exist in a metadata. */ class Inventory; @@ -67,8 +63,10 @@ public: virtual std::string getInventoryDrawSpecString(){return "";} // primarily used for locking chests, but others can play too virtual std::string getOwner(){ return std::string(""); } - virtual void setOwner(std::string t){ } - + virtual void setOwner(std::string t){} + virtual bool allowsTextInput(){ return false; } + virtual std::string getText(){ return ""; } + virtual void setText(const std::string &t){} protected: static void registerType(u16 id, Factory f); private: |