summaryrefslogtreecommitdiff
path: root/src/nodedef.cpp
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2015-01-04 16:32:31 -0500
committerkwolekr <kwolekr@minetest.net>2015-01-04 16:32:31 -0500
commitcd4d213ae07724b698d8a37f4dfe83f82f0fc6e8 (patch)
treebdc80a0be02528bb8ea45a6bd84148cbfcbdca83 /src/nodedef.cpp
parent663e42ca3f451ad9df33968f0c94b080a7e16591 (diff)
downloadminetest-cd4d213ae07724b698d8a37f4dfe83f82f0fc6e8.tar.gz
minetest-cd4d213ae07724b698d8a37f4dfe83f82f0fc6e8.tar.bz2
minetest-cd4d213ae07724b698d8a37f4dfe83f82f0fc6e8.zip
NodeResolver: Perform callback immediately if node registration phase finished
Also add NodeResolver callbacks on the client
Diffstat (limited to 'src/nodedef.cpp')
-rw-r--r--src/nodedef.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index f7bb5aba3..686b71604 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -402,6 +402,9 @@ public:
void serialize(std::ostream &os, u16 protocol_version);
void deSerialize(std::istream &is);
+ inline virtual bool getNodeRegistrationStatus() const;
+ inline virtual void setNodeRegistrationStatus(bool completed);
+
virtual void pendNodeResolve(NodeResolveInfo *nri);
virtual void cancelNodeResolve(NodeResolver *resolver);
virtual void runNodeResolverCallbacks();
@@ -441,6 +444,9 @@ private:
// List of node strings and node resolver callbacks to perform
std::list<NodeResolveInfo *> m_pending_node_lookups;
+
+ // True when all nodes have been registered
+ bool m_node_registration_complete;
};
@@ -1268,10 +1274,28 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version)
}
+inline bool CNodeDefManager::getNodeRegistrationStatus() const
+{
+ return m_node_registration_complete;
+}
+
+
+inline void CNodeDefManager::setNodeRegistrationStatus(bool completed)
+{
+ m_node_registration_complete = completed;
+}
+
+
void CNodeDefManager::pendNodeResolve(NodeResolveInfo *nri)
{
nri->resolver->m_ndef = this;
- m_pending_node_lookups.push_back(nri);
+ if (m_node_registration_complete) {
+ nri->resolver->resolveNodeNames(nri);
+ nri->resolver->m_lookup_done = true;
+ delete nri;
+ } else {
+ m_pending_node_lookups.push_back(nri);
+ }
}