mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-15 18:57:08 +00:00
Improve node timer format (map format version 25) and update mapformat.txt
This commit is contained in:
parent
717ae67995
commit
5c31445117
5 changed files with 98 additions and 41 deletions
|
@ -612,8 +612,10 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk)
|
|||
*/
|
||||
if(disk)
|
||||
{
|
||||
// Node timers
|
||||
m_node_timers.serialize(os);
|
||||
if(version <= 24){
|
||||
// Node timers
|
||||
m_node_timers.serialize(os, version);
|
||||
}
|
||||
|
||||
// Static objects
|
||||
m_static_objects.serialize(os);
|
||||
|
@ -623,6 +625,11 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk)
|
|||
|
||||
// Write block-specific node definition id mapping
|
||||
nimap.serialize(os);
|
||||
|
||||
if(version >= 25){
|
||||
// Node timers
|
||||
m_node_timers.serialize(os, version);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -696,10 +703,10 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
|
|||
// Read unused zero
|
||||
readU8(is);
|
||||
}
|
||||
else if(version >= 24){
|
||||
if(version == 24){
|
||||
TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
|
||||
<<": Node timers"<<std::endl);
|
||||
m_node_timers.deSerialize(is);
|
||||
<<": Node timers (ver==24)"<<std::endl);
|
||||
m_node_timers.deSerialize(is, version);
|
||||
}
|
||||
|
||||
// Static objects
|
||||
|
@ -719,6 +726,12 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
|
|||
NameIdMapping nimap;
|
||||
nimap.deSerialize(is);
|
||||
correctBlockNodeIds(&nimap, data, m_gamedef);
|
||||
|
||||
if(version >= 25){
|
||||
TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
|
||||
<<": Node timers (ver>=25)"<<std::endl);
|
||||
m_node_timers.deSerialize(is, version);
|
||||
}
|
||||
}
|
||||
|
||||
TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
|
||||
|
|
|
@ -42,19 +42,22 @@ void NodeTimer::deSerialize(std::istream &is)
|
|||
NodeTimerList
|
||||
*/
|
||||
|
||||
void NodeTimerList::serialize(std::ostream &os) const
|
||||
void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const
|
||||
{
|
||||
/*
|
||||
Version 0 is a placeholder for "nothing to see here; go away."
|
||||
*/
|
||||
|
||||
if(m_data.size() == 0){
|
||||
writeU8(os, 0); // version
|
||||
return;
|
||||
if(map_format_version == 24){
|
||||
// Version 0 is a placeholder for "nothing to see here; go away."
|
||||
if(m_data.size() == 0){
|
||||
writeU8(os, 0); // version
|
||||
return;
|
||||
}
|
||||
writeU8(os, 1); // version
|
||||
writeU16(os, m_data.size());
|
||||
}
|
||||
|
||||
writeU8(os, 1); // version
|
||||
writeU16(os, m_data.size());
|
||||
if(map_format_version >= 25){
|
||||
writeU8(os, 2+4+4);
|
||||
writeU16(os, m_data.size());
|
||||
}
|
||||
|
||||
for(std::map<v3s16, NodeTimer>::const_iterator
|
||||
i = m_data.begin();
|
||||
|
@ -68,15 +71,23 @@ void NodeTimerList::serialize(std::ostream &os) const
|
|||
}
|
||||
}
|
||||
|
||||
void NodeTimerList::deSerialize(std::istream &is)
|
||||
void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version)
|
||||
{
|
||||
m_data.clear();
|
||||
|
||||
if(map_format_version == 24){
|
||||
u8 timer_version = readU8(is);
|
||||
if(timer_version == 0)
|
||||
return;
|
||||
if(timer_version != 1)
|
||||
throw SerializationError("unsupported NodeTimerList version");
|
||||
}
|
||||
|
||||
u8 version = readU8(is);
|
||||
if(version == 0)
|
||||
return;
|
||||
if(version != 1)
|
||||
throw SerializationError("unsupported NodeTimerList version");
|
||||
if(map_format_version >= 25){
|
||||
u8 timer_data_len = readU8(is);
|
||||
if(timer_data_len != 2+4+4)
|
||||
throw SerializationError("unsupported NodeTimer data length");
|
||||
}
|
||||
|
||||
u16 count = readU16(is);
|
||||
|
||||
|
|
|
@ -57,8 +57,8 @@ public:
|
|||
NodeTimerList() {}
|
||||
~NodeTimerList() {}
|
||||
|
||||
void serialize(std::ostream &os) const;
|
||||
void deSerialize(std::istream &is);
|
||||
void serialize(std::ostream &os, u8 map_format_version) const;
|
||||
void deSerialize(std::istream &is, u8 map_format_version);
|
||||
|
||||
// Get timer
|
||||
NodeTimer get(v3s16 p){
|
||||
|
|
|
@ -59,12 +59,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
21: dynamic content type allocation
|
||||
22: minerals removed, facedir & wallmounted changed
|
||||
23: new node metadata format
|
||||
24: 16-bit node ids and node timers
|
||||
24: 16-bit node ids and node timers (never released as stable)
|
||||
25: Improved node timer format
|
||||
*/
|
||||
// This represents an uninitialized or invalid format
|
||||
#define SER_FMT_VER_INVALID 255
|
||||
// Highest supported serialization version
|
||||
#define SER_FMT_VER_HIGHEST 24
|
||||
#define SER_FMT_VER_HIGHEST 25
|
||||
// Lowest supported serialization version
|
||||
#define SER_FMT_VER_LOWEST 0
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue