NodeResolver: Fix cancelNode and cancelNodeList

This commit is contained in:
kwolekr 2014-12-11 00:41:54 -05:00
parent 16baed0467
commit c07f15e910
2 changed files with 21 additions and 16 deletions

View File

@ -699,7 +699,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef)
#ifndef SERVER #ifndef SERVER
infostream << "CNodeDefManager::updateTextures(): Updating " infostream << "CNodeDefManager::updateTextures(): Updating "
"textures in node definitions" << std::endl; "textures in node definitions" << std::endl;
ITextureSource *tsrc = gamedef->tsrc(); ITextureSource *tsrc = gamedef->tsrc();
IShaderSource *shdsrc = gamedef->getShaderSource(); IShaderSource *shdsrc = gamedef->getShaderSource();
scene::ISceneManager* smgr = gamedef->getSceneManager(); scene::ISceneManager* smgr = gamedef->getSceneManager();
@ -856,7 +856,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef)
recalculateBoundingBox(f->mesh_ptr[0]); recalculateBoundingBox(f->mesh_ptr[0]);
meshmanip->recalculateNormals(f->mesh_ptr[0], true, false); meshmanip->recalculateNormals(f->mesh_ptr[0], true, false);
} }
} else if ((f->drawtype == NDT_NODEBOX) && } else if ((f->drawtype == NDT_NODEBOX) &&
((f->node_box.type == NODEBOX_REGULAR) || ((f->node_box.type == NODEBOX_REGULAR) ||
(f->node_box.type == NODEBOX_FIXED)) && (f->node_box.type == NODEBOX_FIXED)) &&
(!f->node_box.fixed.empty())) { (!f->node_box.fixed.empty())) {
@ -888,7 +888,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef)
} }
rotateMeshBy6dFacedir(f->mesh_ptr[0], wm_to_6d[0]); rotateMeshBy6dFacedir(f->mesh_ptr[0], wm_to_6d[0]);
recalculateBoundingBox(f->mesh_ptr[0]); recalculateBoundingBox(f->mesh_ptr[0]);
meshmanip->recalculateNormals(f->mesh_ptr[0], true, false); meshmanip->recalculateNormals(f->mesh_ptr[0], true, false);
} }
} }
#endif #endif
@ -1148,7 +1148,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version)
writeU8(os, drowning); writeU8(os, drowning);
writeU8(os, leveled); writeU8(os, leveled);
writeU8(os, liquid_range); writeU8(os, liquid_range);
} else } else
throw SerializationError("ContentFeatures::serialize(): " throw SerializationError("ContentFeatures::serialize(): "
"Unsupported version requested"); "Unsupported version requested");
} }
@ -1336,8 +1336,10 @@ bool NodeResolver::cancelNode(content_t *content)
{ {
bool found = false; bool found = false;
std::list<NodeResolveInfo *>::iterator it = m_pending_contents.begin(); for (std::list<NodeResolveInfo *>::iterator
while (it != m_pending_contents.end()) { it = m_pending_contents.begin();
it != m_pending_contents.end();
++it) {
NodeResolveInfo *nfi = *it; NodeResolveInfo *nfi = *it;
if (nfi->output == content) { if (nfi->output == content) {
it = m_pending_contents.erase(it); it = m_pending_contents.erase(it);
@ -1354,9 +1356,10 @@ int NodeResolver::cancelNodeList(std::vector<content_t> *content_vec)
{ {
int num_canceled = 0; int num_canceled = 0;
std::list<std::pair<std::string, std::vector<content_t> *> >::iterator it; for (ContentVectorResolveList::iterator
it = m_pending_content_vecs.begin(); it = m_pending_content_vecs.begin();
while (it != m_pending_content_vecs.end()) { it != m_pending_content_vecs.end();
++it) {
if (it->second == content_vec) { if (it->second == content_vec) {
it = m_pending_content_vecs.erase(it); it = m_pending_content_vecs.erase(it);
num_canceled++; num_canceled++;
@ -1373,7 +1376,7 @@ int NodeResolver::resolveNodes()
//// Resolve pending single node name -> content ID mappings //// Resolve pending single node name -> content ID mappings
while (!m_pending_contents.empty()) { while (!m_pending_contents.empty()) {
NodeResolveInfo *nri = m_pending_contents.front(); NodeResolveInfo *nri = m_pending_contents.front();
m_pending_contents.pop_front(); m_pending_contents.pop_front();
bool success = true; bool success = true;
@ -1403,7 +1406,7 @@ int NodeResolver::resolveNodes()
std::string &name = item.first; std::string &name = item.first;
std::vector<content_t> *output = item.second; std::vector<content_t> *output = item.second;
std::set<content_t> idset; std::set<content_t> idset;
std::set<content_t>::iterator it; std::set<content_t>::iterator it;

View File

@ -40,6 +40,8 @@ class IShaderSource;
class IGameDef; class IGameDef;
typedef std::list<std::pair<content_t, int> > GroupItems; typedef std::list<std::pair<content_t, int> > GroupItems;
typedef std::list<std::pair<std::string, std::vector<content_t> *> >
ContentVectorResolveList;
enum ContentParamType enum ContentParamType
{ {
@ -164,7 +166,7 @@ struct ContentFeatures
*/ */
#ifndef SERVER #ifndef SERVER
// 0 1 2 3 4 5 // 0 1 2 3 4 5
// up down right left back front // up down right left back front
TileSpec tiles[6]; TileSpec tiles[6];
// Special tiles // Special tiles
// - Currently used for flowing liquids // - Currently used for flowing liquids
@ -191,7 +193,7 @@ struct ContentFeatures
std::string mesh; std::string mesh;
#ifndef SERVER #ifndef SERVER
scene::IMesh *mesh_ptr[24]; scene::IMesh *mesh_ptr[24];
#endif #endif
float visual_scale; // Misc. scale parameter float visual_scale; // Misc. scale parameter
TileDef tiledef[6]; TileDef tiledef[6];
TileDef tiledef_special[CF_SPECIAL_COUNT]; // eg. flowing liquid TileDef tiledef_special[CF_SPECIAL_COUNT]; // eg. flowing liquid
@ -261,7 +263,7 @@ struct ContentFeatures
/* /*
Methods Methods
*/ */
ContentFeatures(); ContentFeatures();
~ContentFeatures(); ~ContentFeatures();
void reset(); void reset();
@ -399,7 +401,7 @@ private:
INodeDefManager *m_ndef; INodeDefManager *m_ndef;
bool m_is_node_registration_complete; bool m_is_node_registration_complete;
std::list<NodeResolveInfo *> m_pending_contents; std::list<NodeResolveInfo *> m_pending_contents;
std::list<std::pair<std::string, std::vector<content_t> *> > m_pending_content_vecs; ContentVectorResolveList m_pending_content_vecs;
}; };
class INodeDefManager class INodeDefManager
@ -416,7 +418,7 @@ public:
virtual void getIds(const std::string &name, std::set<content_t> &result) virtual void getIds(const std::string &name, std::set<content_t> &result)
const=0; const=0;
virtual const ContentFeatures& get(const std::string &name) const=0; virtual const ContentFeatures& get(const std::string &name) const=0;
virtual void serialize(std::ostream &os, u16 protocol_version)=0; virtual void serialize(std::ostream &os, u16 protocol_version)=0;
virtual NodeResolver *getResolver()=0; virtual NodeResolver *getResolver()=0;