mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-02 16:38:41 +00:00
Add InvRef and InvStack (currently untested and unusable)
This commit is contained in:
parent
70ed371d0c
commit
103173fc9b
13 changed files with 1328 additions and 744 deletions
228
src/inventorymanager.h
Normal file
228
src/inventorymanager.h
Normal file
|
@ -0,0 +1,228 @@
|
|||
/*
|
||||
Minetest-c55
|
||||
Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
|
||||
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 INVENTORYMANAGER_HEADER
|
||||
#define INVENTORYMANAGER_HEADER
|
||||
|
||||
#include "inventory.h"
|
||||
|
||||
// Should probably somehow replace InventoryContext over time
|
||||
struct InventoryLocation
|
||||
{
|
||||
enum Type{
|
||||
UNDEFINED,
|
||||
PLAYER,
|
||||
NODEMETA
|
||||
} type;
|
||||
|
||||
std::string name; // PLAYER
|
||||
v3s16 p; // NODEMETA
|
||||
|
||||
void setPlayer(const std::string &name_)
|
||||
{
|
||||
type = PLAYER;
|
||||
name = name_;
|
||||
}
|
||||
void setNodeMeta(v3s16 p_)
|
||||
{
|
||||
type = NODEMETA;
|
||||
p = p_;
|
||||
}
|
||||
};
|
||||
|
||||
class Player;
|
||||
|
||||
struct InventoryContext
|
||||
{
|
||||
Player *current_player;
|
||||
|
||||
InventoryContext():
|
||||
current_player(NULL)
|
||||
{}
|
||||
};
|
||||
|
||||
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 void setInventoryModified(const InventoryLocation &loc){}
|
||||
|
||||
// Used on the client to send an action to the server
|
||||
virtual void inventoryAction(InventoryAction *a){}
|
||||
|
||||
// (Deprecated; these wrap to the latter ones)
|
||||
// Get a pointer to an inventory specified by id. id can be:
|
||||
// - "current_player"
|
||||
// - "nodemeta:X,Y,Z"
|
||||
Inventory* getInventory(InventoryContext *c, std::string id);
|
||||
// Used on the server by InventoryAction::apply and other stuff
|
||||
void inventoryModified(InventoryContext *c, std::string id);
|
||||
};
|
||||
|
||||
#define IACTION_MOVE 0
|
||||
#define IACTION_DROP 1
|
||||
|
||||
struct InventoryAction
|
||||
{
|
||||
static InventoryAction * deSerialize(std::istream &is);
|
||||
|
||||
virtual u16 getType() const = 0;
|
||||
virtual void serialize(std::ostream &os) const = 0;
|
||||
virtual void apply(InventoryContext *c, InventoryManager *mgr,
|
||||
ServerEnvironment *env) = 0;
|
||||
};
|
||||
|
||||
struct IMoveAction : public InventoryAction
|
||||
{
|
||||
// count=0 means "everything"
|
||||
u16 count;
|
||||
std::string from_inv;
|
||||
std::string from_list;
|
||||
s16 from_i;
|
||||
std::string to_inv;
|
||||
std::string to_list;
|
||||
s16 to_i;
|
||||
|
||||
IMoveAction()
|
||||
{
|
||||
count = 0;
|
||||
from_i = -1;
|
||||
to_i = -1;
|
||||
}
|
||||
|
||||
IMoveAction(std::istream &is);
|
||||
|
||||
u16 getType() const
|
||||
{
|
||||
return IACTION_MOVE;
|
||||
}
|
||||
|
||||
void serialize(std::ostream &os) const
|
||||
{
|
||||
os<<"Move ";
|
||||
os<<count<<" ";
|
||||
os<<from_inv<<" ";
|
||||
os<<from_list<<" ";
|
||||
os<<from_i<<" ";
|
||||
os<<to_inv<<" ";
|
||||
os<<to_list<<" ";
|
||||
os<<to_i;
|
||||
}
|
||||
|
||||
void apply(InventoryContext *c, InventoryManager *mgr,
|
||||
ServerEnvironment *env);
|
||||
};
|
||||
|
||||
struct IDropAction : public InventoryAction
|
||||
{
|
||||
// count=0 means "everything"
|
||||
u16 count;
|
||||
std::string from_inv;
|
||||
std::string from_list;
|
||||
s16 from_i;
|
||||
|
||||
IDropAction()
|
||||
{
|
||||
count = 0;
|
||||
from_i = -1;
|
||||
}
|
||||
|
||||
IDropAction(std::istream &is);
|
||||
|
||||
u16 getType() const
|
||||
{
|
||||
return IACTION_DROP;
|
||||
}
|
||||
|
||||
void serialize(std::ostream &os) const
|
||||
{
|
||||
os<<"Drop ";
|
||||
os<<count<<" ";
|
||||
os<<from_inv<<" ";
|
||||
os<<from_list<<" ";
|
||||
os<<from_i;
|
||||
}
|
||||
|
||||
void apply(InventoryContext *c, InventoryManager *mgr,
|
||||
ServerEnvironment *env);
|
||||
};
|
||||
|
||||
/*
|
||||
Craft checking system
|
||||
*/
|
||||
|
||||
enum ItemSpecType
|
||||
{
|
||||
ITEM_NONE,
|
||||
ITEM_MATERIAL,
|
||||
ITEM_CRAFT,
|
||||
ITEM_TOOL,
|
||||
ITEM_MBO
|
||||
};
|
||||
|
||||
struct ItemSpec
|
||||
{
|
||||
enum ItemSpecType type;
|
||||
// Only other one of these is used
|
||||
std::string name;
|
||||
u16 num;
|
||||
|
||||
ItemSpec():
|
||||
type(ITEM_NONE)
|
||||
{
|
||||
}
|
||||
ItemSpec(enum ItemSpecType a_type, std::string a_name):
|
||||
type(a_type),
|
||||
name(a_name),
|
||||
num(65535)
|
||||
{
|
||||
}
|
||||
ItemSpec(enum ItemSpecType a_type, u16 a_num):
|
||||
type(a_type),
|
||||
name(""),
|
||||
num(a_num)
|
||||
{
|
||||
}
|
||||
|
||||
bool checkItem(const InventoryItem *item) const;
|
||||
};
|
||||
|
||||
/*
|
||||
items: a pointer to an array of 9 pointers to items
|
||||
specs: a pointer to an array of 9 ItemSpecs
|
||||
*/
|
||||
bool checkItemCombination(const InventoryItem * const*items, const ItemSpec *specs);
|
||||
|
||||
/*
|
||||
items: a pointer to an array of 9 pointers to items
|
||||
specs: a pointer to an array of 9 pointers to items
|
||||
*/
|
||||
bool checkItemCombination(const InventoryItem * const * items,
|
||||
const InventoryItem * const * specs);
|
||||
|
||||
|
||||
#endif
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue