mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-02 16:38:41 +00:00
Refactoring and code style fixes in preparation of adding mesh typed items
This commit is contained in:
parent
e2d54c9f92
commit
f14e7bac54
2 changed files with 477 additions and 394 deletions
|
@ -25,9 +25,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include <string>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include "itemgroup.h"
|
||||
#include "sound.h"
|
||||
#include "util/container.h"
|
||||
#include "util/thread.h"
|
||||
|
||||
#ifndef SERVER
|
||||
#include "client/tile.h"
|
||||
#endif
|
||||
|
||||
class IGameDef;
|
||||
class INodeDefManager;
|
||||
struct ToolCapabilities;
|
||||
|
||||
/*
|
||||
|
@ -39,7 +48,7 @@ enum ItemType
|
|||
ITEM_NONE,
|
||||
ITEM_NODE,
|
||||
ITEM_CRAFT,
|
||||
ITEM_TOOL,
|
||||
ITEM_TOOL
|
||||
};
|
||||
|
||||
struct ItemDefinition
|
||||
|
@ -157,6 +166,77 @@ public:
|
|||
virtual void processQueue(IGameDef *gamedef)=0;
|
||||
};
|
||||
|
||||
|
||||
class CItemDefManager: public IWritableItemDefManager
|
||||
{
|
||||
public:
|
||||
CItemDefManager();
|
||||
virtual ~CItemDefManager();
|
||||
virtual const ItemDefinition& get(const std::string &name_) const;
|
||||
virtual std::string getAlias(const std::string &name) const;
|
||||
virtual std::set<std::string> getAll() const;
|
||||
virtual bool isKnown(const std::string &name_) const;
|
||||
|
||||
#ifndef SERVER
|
||||
// Get item inventory texture
|
||||
virtual video::ITexture* getInventoryTexture(const std::string &name,
|
||||
IGameDef *gamedef) const;
|
||||
|
||||
// Get item wield mesh
|
||||
virtual scene::IMesh* getWieldMesh(const std::string &name,
|
||||
IGameDef *gamedef) const;
|
||||
#endif
|
||||
void clear();
|
||||
|
||||
virtual void registerItem(const ItemDefinition &def);
|
||||
virtual void registerAlias(const std::string &name,
|
||||
const std::string &convert_to);
|
||||
void serialize(std::ostream &os, u16 protocol_version);
|
||||
void deSerialize(std::istream &is);
|
||||
|
||||
void processQueue(IGameDef *gamedef);
|
||||
|
||||
private:
|
||||
|
||||
#ifndef SERVER
|
||||
struct ClientCached
|
||||
{
|
||||
video::ITexture *inventory_texture;
|
||||
scene::IMesh *wield_mesh;
|
||||
|
||||
ClientCached();
|
||||
};
|
||||
|
||||
void createNodeItemTexture(const std::string& name,
|
||||
const ItemDefinition& def, INodeDefManager* nodedef,
|
||||
ClientCached* cc, IGameDef* gamedef, ITextureSource* tsrc) const;
|
||||
|
||||
ClientCached* createClientCachedDirect(const std::string &name,
|
||||
IGameDef *gamedef) const;
|
||||
|
||||
ClientCached* getClientCached(const std::string &name,
|
||||
IGameDef *gamedef) const;
|
||||
|
||||
// The id of the thread that is allowed to use irrlicht directly
|
||||
threadid_t m_main_thread;
|
||||
|
||||
// A reference to this can be returned when nothing is found, to avoid NULLs
|
||||
mutable ClientCached m_dummy_clientcached;
|
||||
|
||||
// Cached textures and meshes
|
||||
mutable MutexedMap<std::string, ClientCached*> m_clientcached;
|
||||
|
||||
// Queued clientcached fetches (to be processed by the main thread)
|
||||
mutable RequestQueue<std::string, ClientCached*, u8, u8> m_get_clientcached_queue;
|
||||
#endif
|
||||
|
||||
// Key is name
|
||||
std::map<std::string, ItemDefinition*> m_item_definitions;
|
||||
|
||||
// Aliases
|
||||
std::map<std::string, std::string> m_aliases;
|
||||
};
|
||||
|
||||
IWritableItemDefManager* createItemDefManager();
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue