X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Finventorymanager.h;h=69bf3016905862ac8bf29399ef45ab1b20bdff9d;hb=30d795b4b260291377e22e59a774e0f9278742e6;hp=009db48367ef82f4db07c348553b30566b5e716a;hpb=037b2591971d752e67fa7d47095b996b3f56da5a;p=dragonfireclient.git diff --git a/src/inventorymanager.h b/src/inventorymanager.h index 009db4836..69bf30169 100644 --- a/src/inventorymanager.h +++ b/src/inventorymanager.h @@ -1,6 +1,6 @@ /* -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 Lesser General Public License as published by @@ -17,8 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef INVENTORYMANAGER_HEADER -#define INVENTORYMANAGER_HEADER +#pragma once #include "inventory.h" #include @@ -32,9 +31,10 @@ struct InventoryLocation CURRENT_PLAYER, PLAYER, NODEMETA, + DETACHED, } type; - std::string name; // PLAYER + std::string name; // PLAYER, DETACHED v3s16 p; // NODEMETA InventoryLocation() @@ -54,11 +54,39 @@ struct InventoryLocation type = PLAYER; name = name_; } - void setNodeMeta(v3s16 p_) + void setNodeMeta(const v3s16 &p_) { 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_) { @@ -69,7 +97,7 @@ struct InventoryLocation std::string dump() const; void serialize(std::ostream &os) const; void deSerialize(std::istream &is); - void deSerialize(std::string s); + void deSerialize(const std::string &s); }; struct InventoryAction; @@ -77,70 +105,79 @@ struct InventoryAction; 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){} + InventoryManager() = default; + virtual ~InventoryManager() = default; - // 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) {} + // Send inventory action to server (only on client) virtual void inventoryAction(InventoryAction *a){} }; -#define IACTION_MOVE 0 -#define IACTION_DROP 1 -#define IACTION_CRAFT 2 +enum class IAction : u16 { + Move, + Drop, + Craft +}; struct InventoryAction { - static InventoryAction * deSerialize(std::istream &is); - - virtual u16 getType() const = 0; + static InventoryAction *deSerialize(std::istream &is); + + virtual IAction 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() {}; + virtual ~InventoryAction() = default;; }; -struct IMoveAction : public InventoryAction +struct MoveAction { - // count=0 means "everything" - u16 count; InventoryLocation from_inv; std::string from_list; - s16 from_i; + s16 from_i = -1; InventoryLocation to_inv; std::string to_list; - s16 to_i; - - IMoveAction() - { - count = 0; - from_i = -1; - to_i = -1; - } - - IMoveAction(std::istream &is); + s16 to_i = -1; +}; + +struct IMoveAction : public InventoryAction, public MoveAction +{ + // count=0 means "everything" + u16 count = 0; + bool move_somewhere = false; - u16 getType() const + // treat these as private + // related to movement to somewhere + bool caused_by_move_somewhere = false; + u32 move_count = 0; + + IMoveAction() = default; + + IMoveAction(std::istream &is, bool somewhere); + + IAction getType() const { - return IACTION_MOVE; + return IAction::Move; } void serialize(std::ostream &os) const { - os<<"Move "; - os< &output_replacements, bool decrementInput, IGameDef *gamedef); - -#endif -