mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-21 14:09:39 +00:00
added containerstore
This commit is contained in:
parent
e0a3b1b1db
commit
ee7570f7e7
11 changed files with 106 additions and 0 deletions
|
@ -92,6 +92,7 @@ set(GAMEWORLD_HEADER
|
||||||
mwworld/action.hpp
|
mwworld/action.hpp
|
||||||
mwworld/nullaction.hpp
|
mwworld/nullaction.hpp
|
||||||
mwworld/actionteleport.hpp
|
mwworld/actionteleport.hpp
|
||||||
|
mwworld/containerstore.hpp
|
||||||
)
|
)
|
||||||
source_group(apps\\openmw\\mwworld FILES ${GAMEWORLD} ${GAMEWORLD_HEADER})
|
source_group(apps\\openmw\\mwworld FILES ${GAMEWORLD} ${GAMEWORLD_HEADER})
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,22 @@ namespace MWClass
|
||||||
return ref->base->name;
|
return ref->base->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWWorld::ContainerStore<MWWorld::RefData>& Container::getContainerStore (const MWWorld::Ptr& ptr)
|
||||||
|
const
|
||||||
|
{
|
||||||
|
if (!ptr.getRefData().getContainerStore().get())
|
||||||
|
{
|
||||||
|
boost::shared_ptr<MWWorld::ContainerStore<MWWorld::RefData> > store (
|
||||||
|
new MWWorld::ContainerStore<MWWorld::RefData>);
|
||||||
|
|
||||||
|
// TODO add initial content
|
||||||
|
|
||||||
|
ptr.getRefData().getContainerStore() = store;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *ptr.getRefData().getContainerStore();
|
||||||
|
}
|
||||||
|
|
||||||
void Container::registerSelf()
|
void Container::registerSelf()
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Class> instance (new Container);
|
boost::shared_ptr<Class> instance (new Container);
|
||||||
|
|
|
@ -13,6 +13,10 @@ namespace MWClass
|
||||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||||
/// can return an empty string.
|
/// can return an empty string.
|
||||||
|
|
||||||
|
virtual MWWorld::ContainerStore<MWWorld::RefData>& getContainerStore (
|
||||||
|
const MWWorld::Ptr& ptr) const;
|
||||||
|
///< Return container store
|
||||||
|
|
||||||
static void registerSelf();
|
static void registerSelf();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,22 @@ namespace MWClass
|
||||||
return *ptr.getRefData().getCreatureStats();
|
return *ptr.getRefData().getCreatureStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWWorld::ContainerStore<MWWorld::RefData>& Creature::getContainerStore (const MWWorld::Ptr& ptr)
|
||||||
|
const
|
||||||
|
{
|
||||||
|
if (!ptr.getRefData().getContainerStore().get())
|
||||||
|
{
|
||||||
|
boost::shared_ptr<MWWorld::ContainerStore<MWWorld::RefData> > store (
|
||||||
|
new MWWorld::ContainerStore<MWWorld::RefData>);
|
||||||
|
|
||||||
|
// TODO add initial content
|
||||||
|
|
||||||
|
ptr.getRefData().getContainerStore() = store;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *ptr.getRefData().getContainerStore();
|
||||||
|
}
|
||||||
|
|
||||||
void Creature::registerSelf()
|
void Creature::registerSelf()
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Class> instance (new Creature);
|
boost::shared_ptr<Class> instance (new Creature);
|
||||||
|
|
|
@ -16,6 +16,10 @@ namespace MWClass
|
||||||
virtual MWMechanics::CreatureStats& getCreatureStats (const MWWorld::Ptr& ptr) const;
|
virtual MWMechanics::CreatureStats& getCreatureStats (const MWWorld::Ptr& ptr) const;
|
||||||
///< Return creature stats
|
///< Return creature stats
|
||||||
|
|
||||||
|
virtual MWWorld::ContainerStore<MWWorld::RefData>& getContainerStore (
|
||||||
|
const MWWorld::Ptr& ptr) const;
|
||||||
|
///< Return container store
|
||||||
|
|
||||||
static void registerSelf();
|
static void registerSelf();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,21 @@ namespace MWClass
|
||||||
return *ptr.getRefData().getCreatureStats();
|
return *ptr.getRefData().getCreatureStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWWorld::ContainerStore<MWWorld::RefData>& Npc::getContainerStore (const MWWorld::Ptr& ptr) const
|
||||||
|
{
|
||||||
|
if (!ptr.getRefData().getContainerStore().get())
|
||||||
|
{
|
||||||
|
boost::shared_ptr<MWWorld::ContainerStore<MWWorld::RefData> > store (
|
||||||
|
new MWWorld::ContainerStore<MWWorld::RefData>);
|
||||||
|
|
||||||
|
// TODO add initial content
|
||||||
|
|
||||||
|
ptr.getRefData().getContainerStore() = store;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *ptr.getRefData().getContainerStore();
|
||||||
|
}
|
||||||
|
|
||||||
void Npc::registerSelf()
|
void Npc::registerSelf()
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Class> instance (new Npc);
|
boost::shared_ptr<Class> instance (new Npc);
|
||||||
|
|
|
@ -16,6 +16,10 @@ namespace MWClass
|
||||||
virtual MWMechanics::CreatureStats& getCreatureStats (const MWWorld::Ptr& ptr) const;
|
virtual MWMechanics::CreatureStats& getCreatureStats (const MWWorld::Ptr& ptr) const;
|
||||||
///< Return creature stats
|
///< Return creature stats
|
||||||
|
|
||||||
|
virtual MWWorld::ContainerStore<MWWorld::RefData>& getContainerStore (
|
||||||
|
const MWWorld::Ptr& ptr) const;
|
||||||
|
///< Return container store
|
||||||
|
|
||||||
static void registerSelf();
|
static void registerSelf();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,11 @@ namespace MWWorld
|
||||||
return boost::shared_ptr<Action> (new NullAction);
|
return boost::shared_ptr<Action> (new NullAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ContainerStore<RefData>& Class::getContainerStore (const Ptr& ptr) const
|
||||||
|
{
|
||||||
|
throw std::runtime_error ("class does not have a container store");
|
||||||
|
}
|
||||||
|
|
||||||
const Class& Class::get (const std::string& key)
|
const Class& Class::get (const std::string& key)
|
||||||
{
|
{
|
||||||
std::map<std::string, boost::shared_ptr<Class> >::const_iterator iter = sClasses.find (key);
|
std::map<std::string, boost::shared_ptr<Class> >::const_iterator iter = sClasses.find (key);
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
#include "action.hpp"
|
#include "action.hpp"
|
||||||
|
#include "containerstore.hpp"
|
||||||
|
#include "refdata.hpp"
|
||||||
|
|
||||||
namespace MWMechanics
|
namespace MWMechanics
|
||||||
{
|
{
|
||||||
|
@ -58,6 +60,10 @@ namespace MWWorld
|
||||||
///< Generate action for using via inventory menu (default implementation: return a
|
///< Generate action for using via inventory menu (default implementation: return a
|
||||||
/// null action).
|
/// null action).
|
||||||
|
|
||||||
|
virtual ContainerStore<RefData>& getContainerStore (const Ptr& ptr) const;
|
||||||
|
///< Return container store or throw an exception, if class does not have a
|
||||||
|
/// container store (default implementation: throw an exceoption)
|
||||||
|
|
||||||
static const Class& get (const std::string& key);
|
static const Class& get (const std::string& key);
|
||||||
///< If there is no class for this \a key, an exception is thrown.
|
///< If there is no class for this \a key, an exception is thrown.
|
||||||
|
|
||||||
|
|
26
apps/openmw/mwworld/containerstore.hpp
Normal file
26
apps/openmw/mwworld/containerstore.hpp
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#ifndef GAME_MWWORLD_CONTAINERSTORE_H
|
||||||
|
#define GAME_MWWORLD_CONTAINERSTORE_H
|
||||||
|
|
||||||
|
#include <components/esm_store/cell_store.hpp>
|
||||||
|
|
||||||
|
namespace MWWorld
|
||||||
|
{
|
||||||
|
template<typename D>
|
||||||
|
struct ContainerStore
|
||||||
|
{
|
||||||
|
ESMS::CellRefList<ESM::Potion, D> potions;
|
||||||
|
ESMS::CellRefList<ESM::Apparatus, D> appas;
|
||||||
|
ESMS::CellRefList<ESM::Armor, D> armors;
|
||||||
|
ESMS::CellRefList<ESM::Book, D> books;
|
||||||
|
ESMS::CellRefList<ESM::Clothing, D> clothes;
|
||||||
|
ESMS::CellRefList<ESM::Ingredient, D> ingreds;
|
||||||
|
ESMS::CellRefList<ESM::Light, D> lights;
|
||||||
|
ESMS::CellRefList<ESM::Tool, D> lockpicks;
|
||||||
|
ESMS::CellRefList<ESM::Misc, D> miscItems;
|
||||||
|
ESMS::CellRefList<ESM::Probe, D> probes;
|
||||||
|
ESMS::CellRefList<ESM::Repair, D> repairs;
|
||||||
|
ESMS::CellRefList<ESM::Weapon, D> weapons;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
#include "../mwscript/locals.hpp"
|
#include "../mwscript/locals.hpp"
|
||||||
|
|
||||||
|
#include "containerstore.hpp"
|
||||||
|
|
||||||
namespace ESM
|
namespace ESM
|
||||||
{
|
{
|
||||||
class Script;
|
class Script;
|
||||||
|
@ -36,6 +38,8 @@ namespace MWWorld
|
||||||
// are never copied outside of container operations.
|
// are never copied outside of container operations.
|
||||||
boost::shared_ptr<MWMechanics::CreatureStats> mCreatureStats;
|
boost::shared_ptr<MWMechanics::CreatureStats> mCreatureStats;
|
||||||
|
|
||||||
|
boost::shared_ptr<ContainerStore<RefData> > mContainerStore;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RefData() : mHasLocals (false), mEnabled (true), mCount (1) {}
|
RefData() : mHasLocals (false), mEnabled (true), mCount (1) {}
|
||||||
|
@ -93,6 +97,11 @@ namespace MWWorld
|
||||||
{
|
{
|
||||||
return mCreatureStats;
|
return mCreatureStats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<ContainerStore<RefData> >& getContainerStore()
|
||||||
|
{
|
||||||
|
return mContainerStore;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue