diff options
author | PilzAdam <pilzadam@minetest.net> | 2013-03-25 19:13:25 +0100 |
---|---|---|
committer | PilzAdam <pilzadam@minetest.net> | 2013-04-05 02:31:58 +0200 |
commit | b0e68060777dfb7daefc81c169e1ed4d95c4a2d6 (patch) | |
tree | 7ea5797cc99b7dfb3c989669c3f97d88e6628d59 | |
parent | 76b86c036876faabe49e274e9ada4fb9d8bd6aea (diff) | |
download | minetest-b0e68060777dfb7daefc81c169e1ed4d95c4a2d6.tar.gz minetest-b0e68060777dfb7daefc81c169e1ed4d95c4a2d6.tar.bz2 minetest-b0e68060777dfb7daefc81c169e1ed4d95c4a2d6.zip |
Fix nick completion
-rw-r--r-- | src/chat.cpp | 8 | ||||
-rw-r--r-- | src/chat.h | 2 | ||||
-rw-r--r-- | src/client.cpp | 13 | ||||
-rw-r--r-- | src/client.h | 2 | ||||
-rw-r--r-- | src/content_cao.cpp | 4 | ||||
-rw-r--r-- | src/environment.h | 8 | ||||
-rw-r--r-- | src/guiChatConsole.cpp | 2 |
7 files changed, 21 insertions, 18 deletions
diff --git a/src/chat.cpp b/src/chat.cpp index 1135ccdf7..3102e194a 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -464,7 +464,7 @@ void ChatPrompt::historyNext() } } -void ChatPrompt::nickCompletion(const std::list<std::wstring>& names, bool backwards) +void ChatPrompt::nickCompletion(const std::list<std::string>& names, bool backwards) { // Two cases: // (a) m_nick_completion_start == m_nick_completion_end == 0 @@ -493,13 +493,13 @@ void ChatPrompt::nickCompletion(const std::list<std::wstring>& names, bool backw // find all names that start with the selected prefix std::vector<std::wstring> completions; - for (std::list<std::wstring>::const_iterator + for (std::list<std::string>::const_iterator i = names.begin(); i != names.end(); ++i) { - if (str_starts_with(*i, prefix, true)) + if (str_starts_with(narrow_to_wide(*i), prefix, true)) { - std::wstring completion = *i; + std::wstring completion = narrow_to_wide(*i); if (prefix_start == 0) completion += L":"; completions.push_back(completion); diff --git a/src/chat.h b/src/chat.h index 8a40c7ccf..19b48456e 100644 --- a/src/chat.h +++ b/src/chat.h @@ -160,7 +160,7 @@ public: void historyNext(); // Nick completion - void nickCompletion(const std::list<std::wstring>& names, bool backwards); + void nickCompletion(const std::list<std::string>& names, bool backwards); // Update console size and reformat the visible portion of the prompt void reformat(u32 cols); diff --git a/src/client.cpp b/src/client.cpp index f27f95d98..1d5f8f472 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -2501,18 +2501,9 @@ void Client::printDebugInfo(std::ostream &os) <<std::endl;*/ } -std::list<std::wstring> Client::getConnectedPlayerNames() +std::list<std::string> Client::getConnectedPlayerNames() { - std::list<Player*> players = m_env.getPlayers(true); - std::list<std::wstring> playerNames; - for(std::list<Player*>::iterator - i = players.begin(); - i != players.end(); ++i) - { - Player *player = *i; - playerNames.push_back(narrow_to_wide(player->getName())); - } - return playerNames; + return m_env.getPlayerNames(); } float Client::getAnimationTime() diff --git a/src/client.h b/src/client.h index d476a1d51..16cdc237f 100644 --- a/src/client.h +++ b/src/client.h @@ -315,7 +315,7 @@ public: // Prints a line or two of info void printDebugInfo(std::ostream &os); - std::list<std::wstring> getConnectedPlayerNames(); + std::list<std::string> getConnectedPlayerNames(); float getAnimationTime(); diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 0a1a92271..8bec67c8c 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -708,11 +708,15 @@ public: if(player && player->isLocal()){ m_is_local_player = true; } + m_env->addPlayerName(m_name.c_str()); } } ~GenericCAO() { + if(m_is_player){ + m_env->removePlayerName(m_name.c_str()); + } } static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env) diff --git a/src/environment.h b/src/environment.h index 02301e5d3..7f73a5461 100644 --- a/src/environment.h +++ b/src/environment.h @@ -470,6 +470,13 @@ public: ClientEnvEvent getClientEvent(); std::vector<core::vector2d<int> > attachment_list; // X is child ID, Y is parent ID + + std::list<std::string> getPlayerNames() + { return m_player_names; } + void addPlayerName(std::string name) + { m_player_names.push_back(name); } + void removePlayerName(std::string name) + { m_player_names.remove(name); } private: ClientMap *m_map; @@ -482,6 +489,7 @@ private: Queue<ClientEnvEvent> m_client_event_queue; IntervalLimiter m_active_object_light_update_interval; IntervalLimiter m_lava_hurt_interval; + std::list<std::string> m_player_names; }; #endif diff --git a/src/guiChatConsole.cpp b/src/guiChatConsole.cpp index 5fc576cf8..ec23648f8 100644 --- a/src/guiChatConsole.cpp +++ b/src/guiChatConsole.cpp @@ -535,7 +535,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event) { // Tab or Shift-Tab pressed // Nick completion - std::list<std::wstring> names = m_client->getConnectedPlayerNames(); + std::list<std::string> names = m_client->getConnectedPlayerNames(); bool backwards = event.KeyInput.Shift; m_chat_backend->getPrompt().nickCompletion(names, backwards); return true; |