X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnodetimer.cpp;h=5fc652bb76d386f78c82f04f17f18b1837230858;hb=56195dc2e45b85b7177cfa97aade77e92cff8805;hp=b081bf66e95bbd0c8d05d692dc65d11d41ad48ee;hpb=704782c95b8a4194a9383da55d93f37fd0f7278f;p=oweals%2Fminetest.git diff --git a/src/nodetimer.cpp b/src/nodetimer.cpp index b081bf66e..5fc652bb7 100644 --- a/src/nodetimer.cpp +++ b/src/nodetimer.cpp @@ -1,25 +1,27 @@ /* -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 General Public License as published by -the Free Software Foundation; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #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;