diff --git a/src/craftitemdef.cpp b/src/craftitemdef.cpp new file mode 100644 index 00000000..b8f9d1d7 --- /dev/null +++ b/src/craftitemdef.cpp @@ -0,0 +1,170 @@ +/* +Minetest-c55 +Copyright (C) 2011 celeron55, Perttu Ahola +Copyright (C) 2011 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 +(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. + +You should have received a copy of the GNU 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. +*/ + +#include "craftitemdef.h" +#include "irrlichttypes.h" +#include "log.h" +#include +#include "utility.h" + +CraftItemDefinition::CraftItemDefinition(): + imagename(""), + cookresult_item(""), + furnace_cooktime(3.0), + furnace_burntime(-1.0), + usable(false), + liquids_pointable(false), + dropcount(-1), + stack_max(99) +{} + +std::string CraftItemDefinition::dump() +{ + std::ostringstream os(std::ios::binary); + os<<"imagename="<::Node *n; + n = m_item_definitions.find(itemname); + if(n == NULL) + return NULL; + return n->getValue(); + } + virtual std::string getImagename(const std::string &itemname) const + { + const CraftItemDefinition *def = getCraftItemDefinition(itemname); + if(def == NULL) + return ""; + return def->imagename; + } + virtual bool registerCraftItem(std::string itemname, const CraftItemDefinition &def) + { + infostream<<"registerCraftItem: registering CraftItem \""<::Node *n; + n = m_item_definitions.find(itemname); + if(n != NULL){ + errorstream<<"registerCraftItem: registering item \""<::Iterator + i = m_item_definitions.getIterator(); + i.atEnd() == false; i++){ + delete i.getNode()->getValue(); + } + m_item_definitions.clear(); + } + virtual void serialize(std::ostream &os) + { + writeU8(os, 0); // version + u16 count = m_item_definitions.size(); + writeU16(os, count); + for(core::map::Iterator + i = m_item_definitions.getIterator(); + i.atEnd() == false; i++){ + std::string name = i.getNode()->getKey(); + CraftItemDefinition *def = i.getNode()->getValue(); + // Serialize name + os<serialize(tmp_os); + os< m_item_definitions; +}; + +IWritableCraftItemDefManager* createCraftItemDefManager() +{ + return new CCraftItemDefManager(); +} diff --git a/src/craftitemdef.h b/src/craftitemdef.h new file mode 100644 index 00000000..2f1a5bf8 --- /dev/null +++ b/src/craftitemdef.h @@ -0,0 +1,73 @@ +/* +Minetest-c55 +Copyright (C) 2011 celeron55, Perttu Ahola +Copyright (C) 2011 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 +(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. + +You should have received a copy of the GNU 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. +*/ + +#ifndef CRAFTITEMDEF_HEADER +#define CRAFTITEMDEF_HEADER + +#include "common_irrlicht.h" +#include +#include + +struct CraftItemDefinition +{ + std::string imagename; + std::string cookresult_item; + float furnace_cooktime; + float furnace_burntime; + bool usable; + bool liquids_pointable; + s16 dropcount; + s16 stack_max; + + CraftItemDefinition(); + std::string dump(); + void serialize(std::ostream &os); + void deSerialize(std::istream &is); +}; + +class ICraftItemDefManager +{ +public: + ICraftItemDefManager(){} + virtual ~ICraftItemDefManager(){} + virtual const CraftItemDefinition* getCraftItemDefinition(const std::string &itemname) const=0; + virtual std::string getImagename(const std::string &itemname) const =0; + + virtual void serialize(std::ostream &os)=0; +}; + +class IWritableCraftItemDefManager : public ICraftItemDefManager +{ +public: + IWritableCraftItemDefManager(){} + virtual ~IWritableCraftItemDefManager(){} + virtual const CraftItemDefinition* getCraftItemDefinition(const std::string &itemname) const=0; + virtual std::string getImagename(const std::string &itemname) const =0; + + virtual bool registerCraftItem(std::string itemname, const CraftItemDefinition &def)=0; + virtual void clear()=0; + + virtual void serialize(std::ostream &os)=0; + virtual void deSerialize(std::istream &is)=0; +}; + +IWritableCraftItemDefManager* createCraftItemDefManager(); + +#endif