#ifndef GAME_MWWORLD_CLASS_H #define GAME_MWWORLD_CLASS_H #include #include #include #include "action.hpp" namespace MWMechanics { struct CreatureStats; } namespace MWWorld { class Ptr; /// \brief Base class for referenceable esm records class Class { static std::map > sClasses; // not implemented Class (const Class&); Class& operator= (const Class&); protected: Class(); public: virtual ~Class(); virtual std::string getName (const Ptr& ptr) const = 0; ///< \return name (the one that is to be presented to the user; not the internal one); /// can return an empty string. virtual MWMechanics::CreatureStats& getCreatureStats (const Ptr& ptr) const; ///< Return creature stats or throw an exception, if class does not have creature stats /// (default implementation: throw an exceoption) virtual bool hasItemHealth (const Ptr& ptr) const; ///< \return Item health data available? (default implementation: false) virtual int getItemMaxHealth (const Ptr& ptr) const; ///< Return item max health or throw an exception, if class does not have item health /// (default implementation: throw an exceoption) virtual boost::shared_ptr activate (const Ptr& ptr, const Ptr& actor, const Environment& environment) const; ///< Generate action for activation (default implementation: return a null action). virtual boost::shared_ptr use (const Ptr& ptr, const Environment& environment) const; ///< Generate action for using via inventory menu (default implementation: return a /// null action). static const Class& get (const std::string& key); ///< If there is no class for this \a key, an exception is thrown. static const Class& get (const Ptr& ptr); ///< If there is no class for this pointer, an exception is thrown. static void registerClass (const std::string& key, boost::shared_ptr instance); }; } #endif