1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-27 17:28:41 +00:00

Add NodeResolver and clean up node name -> content ID resolution system

This commit is contained in:
kwolekr 2014-10-08 15:28:14 -04:00
parent b49e5cfc70
commit d274cbfce6
11 changed files with 445 additions and 342 deletions

View file

@ -282,6 +282,40 @@ struct ContentFeatures
}
};
struct NodeResolveInfo {
std::string n_wanted;
std::string n_alt;
content_t c_fallback;
content_t *output;
};
#define NR_STATUS_FAILURE 0
#define NR_STATUS_PENDING 1
#define NR_STATUS_SUCCESS 2
class NodeResolver {
public:
NodeResolver(INodeDefManager *ndef);
~NodeResolver();
int addNode(std::string n_wanted, std::string n_alt,
content_t c_fallback, content_t *content);
int addNodeList(const char *nodename, std::vector<content_t> *content_vec);
bool cancelNode(content_t *content);
int cancelNodeList(std::vector<content_t> *content_vec);
int resolveNodes();
bool isNodeRegFinished() { return m_is_node_registration_complete; }
private:
INodeDefManager *m_ndef;
bool m_is_node_registration_complete;
std::list<NodeResolveInfo *> m_pending_contents;
std::list<std::pair<std::string, std::vector<content_t> *> > m_pending_content_vecs;
};
class INodeDefManager
{
public:
@ -298,6 +332,8 @@ public:
virtual const ContentFeatures& get(const std::string &name) const=0;
virtual void serialize(std::ostream &os, u16 protocol_version)=0;
virtual NodeResolver *getResolver()=0;
};
class IWritableNodeDefManager : public INodeDefManager
@ -338,9 +374,11 @@ public:
virtual void serialize(std::ostream &os, u16 protocol_version)=0;
virtual void deSerialize(std::istream &is)=0;
virtual NodeResolver *getResolver()=0;
};
IWritableNodeDefManager* createNodeDefManager();
IWritableNodeDefManager *createNodeDefManager();
#endif