X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Finventorymanager.h;h=35fcf4b99dbf6f40d4b08cc975521360ba2f45a2;hb=cf77e0333d1ba0aa81fdce80cd0fa32f137b0a47;hp=55e8f840215b9345e3b5e87f5aaecef28b139d32;hpb=b4dd5d3bd7d2152fdf02e0e7422b1305caf151f2;p=minetest.git diff --git a/src/inventorymanager.h b/src/inventorymanager.h index 55e8f8402..35fcf4b99 100644 --- a/src/inventorymanager.h +++ b/src/inventorymanager.h @@ -1,18 +1,18 @@ /* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola 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. */ @@ -32,9 +32,10 @@ struct InventoryLocation CURRENT_PLAYER, PLAYER, NODEMETA, + DETACHED, } type; - std::string name; // PLAYER + std::string name; // PLAYER, DETACHED v3s16 p; // NODEMETA InventoryLocation() @@ -59,6 +60,34 @@ struct InventoryLocation type = NODEMETA; p = p_; } + void setDetached(const std::string &name_) + { + type = DETACHED; + name = name_; + } + + bool operator==(const InventoryLocation &other) const + { + if(type != other.type) + return false; + switch(type){ + case UNDEFINED: + return false; + case CURRENT_PLAYER: + return true; + case PLAYER: + return (name == other.name); + case NODEMETA: + return (p == other.p); + case DETACHED: + return (name == other.name); + } + return false; + } + bool operator!=(const InventoryLocation &other) const + { + return !(*this == other); + } void applyCurrentPlayer(const std::string &name_) { @@ -79,14 +108,12 @@ class InventoryManager public: InventoryManager(){} virtual ~InventoryManager(){} - - // Get an inventory or set it modified (so it will be updated over - // network or so) - virtual Inventory* getInventory(const InventoryLocation &loc){return NULL;} - virtual std::string getInventoryOwner(const InventoryLocation &loc){return "";} - virtual void setInventoryModified(const InventoryLocation &loc){} - // Used on the client to send an action to the server + // Get an inventory (server and client) + virtual Inventory* getInventory(const InventoryLocation &loc){return NULL;} + // Set modified (will be saved and sent over network; only on server) + virtual void setInventoryModified(const InventoryLocation &loc, bool playerSend = true){} + // Send inventory action to server (only on client) virtual void inventoryAction(InventoryAction *a){} }; @@ -97,12 +124,13 @@ class InventoryManager struct InventoryAction { static InventoryAction * deSerialize(std::istream &is); - + virtual u16 getType() const = 0; virtual void serialize(std::ostream &os) const = 0; virtual void apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) = 0; virtual void clientApply(InventoryManager *mgr, IGameDef *gamedef) = 0; + virtual ~InventoryAction() {}; }; struct IMoveAction : public InventoryAction @@ -115,15 +143,24 @@ struct IMoveAction : public InventoryAction InventoryLocation to_inv; std::string to_list; s16 to_i; - + bool move_somewhere; + + // treat these as private + // related to movement to somewhere + bool caused_by_move_somewhere; + u32 move_count; + IMoveAction() { count = 0; from_i = -1; to_i = -1; + move_somewhere = false; + caused_by_move_somewhere = false; + move_count = 0; } - - IMoveAction(std::istream &is); + + IMoveAction(std::istream &is, bool somewhere); u16 getType() const { @@ -132,14 +169,18 @@ struct IMoveAction : public InventoryAction void serialize(std::ostream &os) const { - os<<"Move "; - os< &output_replacements, bool decrementInput, IGameDef *gamedef); #endif