X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fnodemetadata.h;h=ae02cfc3c2cbd8f294f1d7187c806af51a5b8f4c;hb=3b707b8a4a52a88da4398ec9b32109c073683a76;hp=aa2e0196cd7886a28b8f55806f319902f92ad1ff;hpb=3a58f8179f09ea90cefb4ef7ff18ed1d8e27d0f2;p=dragonfireclient.git diff --git a/src/nodemetadata.h b/src/nodemetadata.h index aa2e0196c..ae02cfc3c 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -37,6 +37,8 @@ with this program; if not, write to the Free Software Foundation, Inc., - Text */ +class Inventory; + class NodeMetadata { public: @@ -52,7 +54,14 @@ class NodeMetadata virtual u16 typeId() const = 0; virtual NodeMetadata* clone() = 0; virtual void serializeBody(std::ostream &os) = 0; - virtual std::string infoText() { return ""; } + virtual std::string infoText() {return "";} + virtual Inventory* getInventory() {return NULL;} + // This is called always after the inventory is modified, before + // the changes are copied elsewhere + virtual void inventoryModified(){} + // A step in time. Returns true if metadata changed. + virtual bool step(float dtime) {return false;} + virtual bool nodeRemovalDisabled(){return false;} protected: static void registerType(u16 id, Factory f); @@ -79,6 +88,55 @@ class SignNodeMetadata : public NodeMetadata std::string m_text; }; +class ChestNodeMetadata : public NodeMetadata +{ +public: + ChestNodeMetadata(); + ~ChestNodeMetadata(); + + virtual u16 typeId() const; + static NodeMetadata* create(std::istream &is); + virtual NodeMetadata* clone(); + virtual void serializeBody(std::ostream &os); + virtual std::string infoText(); + virtual Inventory* getInventory() {return m_inventory;} + + virtual bool nodeRemovalDisabled(); + +private: + Inventory *m_inventory; +}; + +class FurnaceNodeMetadata : public NodeMetadata +{ +public: + FurnaceNodeMetadata(); + ~FurnaceNodeMetadata(); + + virtual u16 typeId() const; + virtual NodeMetadata* clone(); + static NodeMetadata* create(std::istream &is); + virtual void serializeBody(std::ostream &os); + virtual std::string infoText(); + virtual Inventory* getInventory() {return m_inventory;} + virtual void inventoryModified(); + virtual bool step(float dtime); + +private: + Inventory *m_inventory; + float m_step_accumulator; + float m_fuel_totaltime; + float m_fuel_time; + float m_src_totaltime; + float m_src_time; +}; + +/* + List of metadata of all the nodes of a block +*/ + +class InventoryManager; + class NodeMetadataList { public: @@ -93,6 +151,10 @@ class NodeMetadataList void remove(v3s16 p); // Deletes old data and sets a new one void set(v3s16 p, NodeMetadata *d); + + // A step in time. Returns true if something changed. + bool step(float dtime); + private: core::map m_data; };