diff --git a/src/clientmap.cpp b/src/clientmap.cpp index b9516fcbea85b2b60c80dbe4c5ec8e5d106a93b3..1c420b5f9adbe348f7ae2054371a83f526659ba0 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -391,12 +391,12 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) struct MeshBufList { video::SMaterial m; - std::list<scene::IMeshBuffer*> bufs; + std::vector<scene::IMeshBuffer*> bufs; }; struct MeshBufListList { - std::list<MeshBufList> lists; + std::vector<MeshBufList> lists; void clear() { @@ -405,7 +405,7 @@ struct MeshBufListList void add(scene::IMeshBuffer *buf) { - for(std::list<MeshBufList>::iterator i = lists.begin(); + for(std::vector<MeshBufList>::iterator i = lists.begin(); i != lists.end(); ++i){ MeshBufList &l = *i; video::SMaterial &m = buf->getMaterial(); @@ -595,25 +595,20 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) } } - std::list<MeshBufList> &lists = drawbufs.lists; + std::vector<MeshBufList> &lists = drawbufs.lists; int timecheck_counter = 0; - for(std::list<MeshBufList>::iterator i = lists.begin(); - i != lists.end(); ++i) - { - { - timecheck_counter++; - if(timecheck_counter > 50) - { - timecheck_counter = 0; - int time2 = time(0); - if(time2 > time1 + 4) - { - infostream<<"ClientMap::renderMap(): " - "Rendering takes ages, returning." - <<std::endl; - return; - } + for(std::vector<MeshBufList>::iterator i = lists.begin(); + i != lists.end(); ++i) { + timecheck_counter++; + if(timecheck_counter > 50) { + timecheck_counter = 0; + int time2 = time(0); + if(time2 > time1 + 4) { + infostream << "ClientMap::renderMap(): " + "Rendering takes ages, returning." + << std::endl; + return; } } @@ -621,60 +616,14 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) driver->setMaterial(list.m); - for(std::list<scene::IMeshBuffer*>::iterator j = list.bufs.begin(); - j != list.bufs.end(); ++j) - { + for(std::vector<scene::IMeshBuffer*>::iterator j = list.bufs.begin(); + j != list.bufs.end(); ++j) { scene::IMeshBuffer *buf = *j; driver->drawMeshBuffer(buf); vertex_count += buf->getVertexCount(); meshbuffer_count++; } -#if 0 - /* - Draw the faces of the block - */ - { - //JMutexAutoLock lock(block->mesh_mutex); - - MapBlockMesh *mapBlockMesh = block->mesh; - assert(mapBlockMesh); - - scene::SMesh *mesh = mapBlockMesh->getMesh(); - assert(mesh); - u32 c = mesh->getMeshBufferCount(); - bool stuff_actually_drawn = false; - for(u32 i=0; i<c; i++) - { - scene::IMeshBuffer *buf = mesh->getMeshBuffer(i); - const video::SMaterial& material = buf->getMaterial(); - video::IMaterialRenderer* rnd = - driver->getMaterialRenderer(material.MaterialType); - bool transparent = (rnd && rnd->isTransparent()); - // Render transparent on transparent pass and likewise. - if(transparent == is_transparent_pass) - { - if(buf->getVertexCount() == 0) - errorstream<<"Block ["<<analyze_block(block) - <<"] contains an empty meshbuf"<<std::endl; - /* - This *shouldn't* hurt too much because Irrlicht - doesn't change opengl textures if the old - material has the same texture. - */ - driver->setMaterial(buf->getMaterial()); - driver->drawMeshBuffer(buf); - vertex_count += buf->getVertexCount(); - meshbuffer_count++; - stuff_actually_drawn = true; - } - } - if(stuff_actually_drawn) - blocks_had_pass_meshbuf++; - else - blocks_without_stuff++; - } -#endif } } // ScopeProfiler diff --git a/src/environment.cpp b/src/environment.cpp index b1372431f958da32769a68a0de7e1e109199c6d3..60a26e65fe10e2a08fa4eb7f7173a1df014eaea5 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -2383,13 +2383,16 @@ void ClientEnvironment::step(float dtime) g_profiler->avg("CEnv: num of simple objects", m_simple_objects.size()); for(std::vector<ClientSimpleObject*>::iterator i = m_simple_objects.begin(); i != m_simple_objects.end();) { - ClientSimpleObject *simple = *i; std::vector<ClientSimpleObject*>::iterator cur = i; - ++i; + ClientSimpleObject *simple = *cur; + simple->step(dtime); - if(simple->m_to_be_removed){ + if(simple->m_to_be_removed) { delete simple; - m_simple_objects.erase(cur); + i = m_simple_objects.erase(cur); + } + else { + ++i; } } } diff --git a/src/mapgen.cpp b/src/mapgen.cpp index ba1b16d6a6438665f20fbbd357d0a4655f6ef075..071c60138876e3fe11f39cb93c663fb0a8dba59c 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -417,9 +417,8 @@ void GenerateNotifier::getEvents( std::map<std::string, std::vector<v3s16> > &event_map, bool peek_events) { - std::list<GenNotifyEvent>::iterator it; - - for (it = m_notify_events.begin(); it != m_notify_events.end(); ++it) { + for (std::vector<GenNotifyEvent>::iterator it = m_notify_events.begin(); + it != m_notify_events.end(); ++it) { GenNotifyEvent &gn = *it; std::string name = (gn.type == GENNOTIFY_DECORATION) ? "decoration#"+ itos(gn.id) : diff --git a/src/mapgen.h b/src/mapgen.h index 5bbdd724dd139fbb6c4934575c34adcce19970d9..f2e63e53300752ea7fa4542fc3ea140dc5fe5142 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -91,7 +91,7 @@ class GenerateNotifier { private: u32 m_notify_on; std::set<u32> *m_notify_on_deco_ids; - std::list<GenNotifyEvent> m_notify_events; + std::vector<GenNotifyEvent> m_notify_events; }; struct MapgenSpecificParams { diff --git a/src/nodedef.cpp b/src/nodedef.cpp index ac49b4f3cfad295342b9a31e48e52c6c07a70434..6cf456e4de241dafee70dea87144f0344b30c2b0 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -443,7 +443,7 @@ class CNodeDefManager: public IWritableNodeDefManager { content_t m_next_id; // List of node strings and node resolver callbacks to perform - std::list<NodeResolveInfo *> m_pending_node_lookups; + std::vector<NodeResolveInfo *> m_pending_node_lookups; // True when all nodes have been registered bool m_node_registration_complete; @@ -479,7 +479,7 @@ void CNodeDefManager::clear() m_next_id = 0; m_node_registration_complete = false; - for (std::list<NodeResolveInfo *>::iterator + for (std::vector<NodeResolveInfo *>::iterator it = m_pending_node_lookups.begin(); it != m_pending_node_lookups.end(); ++it) @@ -1309,7 +1309,7 @@ void CNodeDefManager::pendNodeResolve(NodeResolveInfo *nri) void CNodeDefManager::cancelNodeResolve(NodeResolver *resolver) { - for (std::list<NodeResolveInfo *>::iterator + for (std::vector<NodeResolveInfo *>::iterator it = m_pending_node_lookups.begin(); it != m_pending_node_lookups.end(); ++it) { @@ -1326,7 +1326,7 @@ void CNodeDefManager::runNodeResolverCallbacks() { while (!m_pending_node_lookups.empty()) { NodeResolveInfo *nri = m_pending_node_lookups.front(); - m_pending_node_lookups.pop_front(); + m_pending_node_lookups.erase(m_pending_node_lookups.begin()); nri->resolver->resolveNodeNames(nri); nri->resolver->m_lookup_done = true; delete nri; @@ -1345,7 +1345,7 @@ bool CNodeDefManager::getIdFromResolveInfo(NodeResolveInfo *nri, content_t c; std::string name = nri->nodenames.front(); - nri->nodenames.pop_front(); + nri->nodenames.erase(nri->nodenames.begin()); bool success = getId(name, c); if (!success && node_alt != "") { @@ -1385,7 +1385,7 @@ bool CNodeDefManager::getIdsFromResolveInfo(NodeResolveInfo *nri, content_t c; std::string name = nri->nodenames.front(); - nri->nodenames.pop_front(); + nri->nodenames.erase(nri->nodenames.begin()); if (name.substr(0,6) != "group:") { if (getId(name, c)) { diff --git a/src/nodedef.h b/src/nodedef.h index 52ef29e50ec15e6f9e78c0f43c2a3d3277095ade..a1c2e1b53df9227e0aac888e7140ff337c585068 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -309,7 +309,7 @@ struct NodeResolveInfo { resolver = nr; } - std::list<std::string> nodenames; + std::vector<std::string> nodenames; std::list<NodeListInfo> nodelistinfo; NodeResolver *resolver; }; diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index f14b0dfcba0e60c70dfc7107606dbfee8b06d5f1..54ec6901071c098f048323ef9762c37c88da3c2e 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -459,7 +459,7 @@ int ModApiMapgen::l_register_biome(lua_State *L) } NodeResolveInfo *nri = new NodeResolveInfo(b); - std::list<std::string> &nnames = nri->nodenames; + std::vector<std::string> &nnames = nri->nodenames; nnames.push_back(getstringfield_default(L, index, "node_top", "")); nnames.push_back(getstringfield_default(L, index, "node_filler", "")); nnames.push_back(getstringfield_default(L, index, "node_stone", ""));