aboutsummaryrefslogtreecommitdiff
ModeNameSize
-rw-r--r--.build.yml1187logplain
-rw-r--r--.dir-locals.el177logplain
-rw-r--r--.gitignore58logplain
-rw-r--r--README.md2770logplain
d---------advtrains1481logplain
d---------advtrains_interlocking704logplain
d---------advtrains_itrainmap107logplain
d---------advtrains_line_automation313logplain
d---------advtrains_luaautomation574logplain
d---------advtrains_signals_ks222logplain
d---------advtrains_train_track184logplain
d---------assets1900logplain
-rw-r--r--atc_command.txt3489logplain
-rw-r--r--description.txt145logplain
-rw-r--r--license.txt32367logplain
-rw-r--r--license_media.txt20744logplain
-rw-r--r--modpack.conf214logplain
-rw-r--r--privilege_guide.txt2273logplain
-rw-r--r--screenshot.png809738logplain
d---------serialize_lib336logplain
eU8(os, 2 + 4 + 4); // length of the data for a single timer writeU16(os, m_timers.size()); } for (std::multimap<double, NodeTimer>::const_iterator i = m_timers.begin(); i != m_timers.end(); ++i) { NodeTimer t = i->second; NodeTimer nt = NodeTimer(t.timeout, t.timeout - (f32)(i->first - m_time), t.position); v3s16 p = t.position; u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X; writeU16(os, p16); nt.serialize(os); } } void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version) { 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"); } 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); for (u16 i = 0; i < count; i++) { u16 p16 = readU16(is); v3s16 p; p.Z = p16 / MAP_BLOCKSIZE / MAP_BLOCKSIZE; p16 &= MAP_BLOCKSIZE * MAP_BLOCKSIZE - 1; p.Y = p16 / MAP_BLOCKSIZE; p16 &= MAP_BLOCKSIZE - 1; p.X = p16; NodeTimer t(p); t.deSerialize(is); if (t.timeout <= 0) { warningstream<<"NodeTimerList::deSerialize(): " <<"invalid data at position" <<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring." <<std::endl; continue; } if (m_iterators.find(p) != m_iterators.end()) { warningstream<<"NodeTimerList::deSerialize(): " <<"already set data at position" <<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring." <<std::endl; continue; } insert(t); } } std::vector<NodeTimer> NodeTimerList::step(float dtime) { std::vector<NodeTimer> elapsed_timers; m_time += dtime; if (m_next_trigger_time == -1. || m_time < m_next_trigger_time) { return elapsed_timers; } std::multimap<double, NodeTimer>::iterator i = m_timers.begin(); // Process timers for (; i != m_timers.end() && i->first <= m_time; ++i) { NodeTimer t = i->second; t.elapsed = t.timeout + (f32)(m_time - i->first); elapsed_timers.push_back(t); m_iterators.erase(t.position); } // Delete elapsed timers m_timers.erase(m_timers.begin(), i); if (m_timers.empty()) m_next_trigger_time = -1.; else m_next_trigger_time = m_timers.begin()->first; return elapsed_timers; }