X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnodetimer.cpp;h=5fc652bb76d386f78c82f04f17f18b1837230858;hb=55c646c5c2b40931d24be8541b3056ab3322a70f;hp=448f44eb0e272663b0e1072a3a739946a9f0b4fe;hpb=037b2591971d752e67fa7d47095b996b3f56da5a;p=oweals%2Fminetest.git diff --git a/src/nodetimer.cpp b/src/nodetimer.cpp index 448f44eb0..5fc652bb7 100644 --- a/src/nodetimer.cpp +++ b/src/nodetimer.cpp @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2010-2012 celeron55, Perttu Ahola +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -18,8 +18,10 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "nodetimer.h" -#include "utility.h" #include "log.h" +#include "serialization.h" +#include "util/serialize.h" +#include "constants.h" // MAP_BLOCKSIZE /* NodeTimer @@ -27,13 +29,13 @@ with this program; if not, write to the Free Software Foundation, Inc., void NodeTimer::serialize(std::ostream &os) const { - writeF1000(os, duration); + writeF1000(os, timeout); writeF1000(os, elapsed); } void NodeTimer::deSerialize(std::istream &is) { - duration = readF1000(is); + timeout = readF1000(is); elapsed = readF1000(is); } @@ -41,19 +43,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::const_iterator i = m_data.begin(); @@ -67,15 +72,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); @@ -93,7 +106,7 @@ void NodeTimerList::deSerialize(std::istream &is) NodeTimer t; t.deSerialize(is); - if(t.duration <= 0) + if(t.timeout <= 0) { infostream<<"WARNING: NodeTimerList::deSerialize(): " <<"invalid data at position" @@ -115,9 +128,9 @@ void NodeTimerList::deSerialize(std::istream &is) } } -std::map NodeTimerList::step(float dtime) +std::map NodeTimerList::step(float dtime) { - std::map elapsed_timers; + std::map elapsed_timers; // Increment timers for(std::map::iterator i = m_data.begin(); @@ -125,13 +138,13 @@ std::map NodeTimerList::step(float dtime) v3s16 p = i->first; NodeTimer t = i->second; t.elapsed += dtime; - if(t.elapsed >= t.duration) - elapsed_timers.insert(std::make_pair(p, t.elapsed)); + if(t.elapsed >= t.timeout) + elapsed_timers.insert(std::make_pair(p, t)); else i->second = t; } // Delete elapsed timers - for(std::map::const_iterator + for(std::map::const_iterator i = elapsed_timers.begin(); i != elapsed_timers.end(); i++){ v3s16 p = i->first;