X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fclient.cpp;h=df792d116e616049bb8c4fc389c839b2c5583c24;hb=c0b35fa429c68b49b2d6a5124aff6dcc31400b63;hp=30bd101984fa7e6e3c62a8a434d1c075f90b01fc;hpb=b318e82356c185b54ef4cd404704422ea24fa277;p=oweals%2Fminetest.git diff --git a/src/client.cpp b/src/client.cpp index 30bd10198..df792d116 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -189,8 +189,6 @@ Client::Client( ), m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this), m_device(device), - camera_position(0,0,0), - camera_direction(0,0,1), m_server_ser_ver(SER_FMT_VER_INVALID), m_inventory_updated(false), m_time_of_day(0), @@ -1417,7 +1415,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) for all added objects { u16 id u8 type - u16 initialization data length + u32 initialization data length string initialization data } */ @@ -1549,6 +1547,47 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) // get damage from falling on ground m_ignore_damage_timer = 3.0; } + else if(command == TOCLIENT_PLAYERITEM) + { + std::string datastring((char*)&data[2], datasize-2); + std::istringstream is(datastring, std::ios_base::binary); + + u16 count = readU16(is); + + for (u16 i = 0; i < count; ++i) { + u16 peer_id = readU16(is); + Player *player = m_env.getPlayer(peer_id); + + if (player == NULL) + { + dout_client<isLocal()) { + dout_client<inventory.getList("main"); + std::string itemstring(deSerializeString(is)); + if (itemstring.empty()) { + inv->deleteItem(0); + dout_client<changeItem(0, InventoryItem::deSerialize(iss)); + dout_client<getWieldItem()->serialize(dout_client); + dout_client<peer_id == PEER_ID_INEXISTENT) + myplayer->peer_id = our_peer_id; + // Check that an existing peer_id is the same as the connection's + assert(myplayer->peer_id == our_peer_id); + + SharedBuffer data(2+2); + writeU16(&data[0], TOSERVER_PLAYERITEM); + writeU16(&data[2], item); + + // Send as reliable + Send(0, data, true); +} + void Client::removeNode(v3s16 p) { //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out @@ -1920,8 +1981,11 @@ void Client::addNode(v3s16 p, MapNode n) void Client::updateCamera(v3f pos, v3f dir) { m_env.getClientMap().updateCamera(pos, dir); - camera_position = pos; - camera_direction = dir; +} + +void Client::renderPostFx() +{ + m_env.getClientMap().renderPostFx(); } MapNode Client::getNode(v3s16 p) @@ -1935,6 +1999,11 @@ NodeMetadata* Client::getNodeMetadata(v3s16 p) return m_env.getMap().getNodeMetadata(p); } +LocalPlayer* Client::getLocalPlayer() +{ + return m_env.getLocalPlayer(); +} + v3f Client::getPlayerPosition(v3f *eye_position) { //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out @@ -1953,6 +2022,16 @@ void Client::setPlayerControl(PlayerControl &control) player->control = control; } +void Client::selectPlayerItem(u16 item) +{ + LocalPlayer *player = m_env.getLocalPlayer(); + assert(player != NULL); + + player->wieldItem(item); + + sendPlayerItem(item); +} + // Returns true if the inventory of the local player has been // updated from the server. If it is true, it is set to false. bool Client::getLocalInventoryUpdated()