summaryrefslogtreecommitdiff
path: root/src/client.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-15 20:32:56 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-29 19:13:44 +0200
commit6da8cb00e27106221e013aa6d93965b95e630a18 (patch)
treec463f02b5ecced9e18672b6b8b9c923b1f2384d0 /src/client.cpp
parenteed727c61b51f46f6d172c56ecd26a3b1752d449 (diff)
downloadminetest-6da8cb00e27106221e013aa6d93965b95e630a18.tar.gz
minetest-6da8cb00e27106221e013aa6d93965b95e630a18.tar.bz2
minetest-6da8cb00e27106221e013aa6d93965b95e630a18.zip
Node definitions transfer
Diffstat (limited to 'src/client.cpp')
-rw-r--r--src/client.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 7093a5190..4d9233d66 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -1507,7 +1507,8 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
}
else if(command == TOCLIENT_TOOLDEF)
{
- infostream<<"Client: Received tool definitions"<<std::endl;
+ infostream<<"Client: Received tool definitions: packet size: "
+ <<datasize<<std::endl;
std::string datastring((char*)&data[2], datasize-2);
std::istringstream is(datastring, std::ios_base::binary);
@@ -1589,6 +1590,31 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
event.type = CE_TEXTURES_UPDATED;
m_client_event_queue.push_back(event);
}
+ else if(command == TOCLIENT_NODEDEF)
+ {
+ infostream<<"Client: Received node definitions: packet size: "
+ <<datasize<<std::endl;
+
+ std::string datastring((char*)&data[2], datasize-2);
+ std::istringstream is(datastring, std::ios_base::binary);
+
+ // Stop threads while updating content definitions
+ m_mesh_update_thread.stop();
+
+ std::istringstream tmp_is(deSerializeLongString(is), std::ios::binary);
+ m_nodedef->deSerialize(tmp_is, this);
+
+ // Update texture atlas
+ if(g_settings->getBool("enable_texture_atlas"))
+ m_tsrc->buildMainAtlas(this);
+
+ // Update node textures
+ m_nodedef->updateTextures(m_tsrc);
+
+ // Resume threads
+ m_mesh_update_thread.setRun(true);
+ m_mesh_update_thread.Start();
+ }
else
{
infostream<<"Client: Ignoring unknown command "