X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fitemdef.h;h=2ade6116a03fa0a8efbbc4aa7f999f9c4692a2d2;hb=13f94ecad5d4fcda08663ee91e45b4a205a1dadb;hp=5a432591d7154bccd7072c75591fc6b789920513;hpb=6a76c226e10e92c3e3339096f07f8ab065e2098b;p=dragonfireclient.git diff --git a/src/itemdef.h b/src/itemdef.h index 5a432591d..2ade6116a 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -1,19 +1,19 @@ /* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola -Copyright (C) 2011 Kahrl +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2013 Kahrl This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ @@ -21,12 +21,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef ITEMDEF_HEADER #define ITEMDEF_HEADER -#include "common_irrlicht.h" +#include "irrlichttypes_extrabloated.h" #include #include #include +#include "itemgroup.h" +#include "sound.h" class IGameDef; -struct ToolDiggingProperties; +class Client; +struct ToolCapabilities; /* Base item definition @@ -59,19 +62,20 @@ struct ItemDefinition /* Item stack and interaction properties */ - s16 stack_max; + u16 stack_max; bool usable; bool liquids_pointable; // May be NULL. If non-NULL, deleted by destructor - ToolDiggingProperties *tool_digging_properties; + ToolCapabilities *tool_capabilities; + ItemGroupList groups; + SimpleSoundSpec sound_place; + SimpleSoundSpec sound_place_failed; + f32 range; - /* - Cached stuff - */ -#ifndef SERVER - video::ITexture *inventory_texture; - scene::IMesh *wield_mesh; -#endif + // Client shall immediately place this node when player places the item. + // Server will update the precise end result a moment later. + // "" = no prediction + std::string node_placement_prediction; /* Some helpful methods @@ -81,7 +85,7 @@ struct ItemDefinition ItemDefinition& operator=(const ItemDefinition &def); ~ItemDefinition(); void reset(); - void serialize(std::ostream &os) const; + void serialize(std::ostream &os, u16 protocol_version) const; void deSerialize(std::istream &is); private: void resetInitial(); @@ -101,8 +105,16 @@ class IItemDefManager virtual std::set getAll() const=0; // Check if item is known virtual bool isKnown(const std::string &name) const=0; +#ifndef SERVER + // Get item inventory texture + virtual video::ITexture* getInventoryTexture(const std::string &name, + Client *client) const=0; + // Get item wield mesh + virtual scene::IMesh* getWieldMesh(const std::string &name, + Client *client) const=0; +#endif - virtual void serialize(std::ostream &os)=0; + virtual void serialize(std::ostream &os, u16 protocol_version)=0; }; class IWritableItemDefManager : public IItemDefManager @@ -119,27 +131,32 @@ class IWritableItemDefManager : public IItemDefManager virtual std::set getAll() const=0; // Check if item is known virtual bool isKnown(const std::string &name) const=0; +#ifndef SERVER + // Get item inventory texture + virtual video::ITexture* getInventoryTexture(const std::string &name, + Client *client) const=0; + // Get item wield mesh + virtual scene::IMesh* getWieldMesh(const std::string &name, + Client *client) const=0; +#endif // Remove all registered item and node definitions and aliases // Then re-add the builtin item definitions virtual void clear()=0; // Register item definition virtual void registerItem(const ItemDefinition &def)=0; + virtual void unregisterItem(const std::string &name)=0; // Set an alias so that items named will load as . // Alias is not set if has already been defined. // Alias will be removed if is defined at a later point of time. virtual void registerAlias(const std::string &name, const std::string &convert_to)=0; - /* - Update inventory textures and wield meshes to latest - return values of ITextureSource and INodeDefManager. - Call after updating the texture atlas of a texture source. - */ - virtual void updateTexturesAndMeshes(IGameDef *gamedef)=0; - - virtual void serialize(std::ostream &os)=0; + virtual void serialize(std::ostream &os, u16 protocol_version)=0; virtual void deSerialize(std::istream &is)=0; + + // Do stuff asked by threads that can only be done in the main thread + virtual void processQueue(IGameDef *gamedef)=0; }; IWritableItemDefManager* createItemDefManager();