1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Send only changed node metadata to clients instead of whole mapblock (#5268)

Includes newer style changes and fixes by est31

Improve the block position de-serialization
Add type NodeMetadataMap
This commit is contained in:
SmallJoker 2018-12-04 20:37:48 +01:00 committed by GitHub
parent ae8d14b009
commit 3d66622772
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 202 additions and 70 deletions

View file

@ -70,13 +70,21 @@ private:
List of metadata of all the nodes of a block
*/
typedef std::map<v3s16, NodeMetadata *> NodeMetadataMap;
class NodeMetadataList
{
public:
NodeMetadataList(bool is_metadata_owner = true) :
m_is_metadata_owner(is_metadata_owner)
{}
~NodeMetadataList();
void serialize(std::ostream &os, u8 blockver, bool disk=true) const;
void deSerialize(std::istream &is, IItemDefManager *item_def_mgr);
void serialize(std::ostream &os, u8 blockver, bool disk = true,
bool absolute_pos = false) const;
void deSerialize(std::istream &is, IItemDefManager *item_def_mgr,
bool absolute_pos = false);
// Add all keys in this list to the vector keys
std::vector<v3s16> getAllKeys();
@ -89,8 +97,21 @@ public:
// Deletes all
void clear();
size_t size() const { return m_data.size(); }
NodeMetadataMap::const_iterator begin()
{
return m_data.begin();
}
NodeMetadataMap::const_iterator end()
{
return m_data.end();
}
private:
int countNonEmpty() const;
std::map<v3s16, NodeMetadata *> m_data;
bool m_is_metadata_owner;
NodeMetadataMap m_data;
};