OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
class.hpp
Go to the documentation of this file.
1 #ifndef GAME_MWWORLD_CLASS_H
2 #define GAME_MWWORLD_CLASS_H
3 
4 #include <map>
5 #include <memory>
6 #include <string>
7 #include <vector>
8 
9 #include "ptr.hpp"
10 
11 namespace ESM
12 {
13  struct ObjectState;
14 }
15 
16 namespace MWRender
17 {
18  class RenderingInterface;
19 }
20 
21 namespace MWPhysics
22 {
23  class PhysicsSystem;
24 }
25 
26 namespace MWMechanics
27 {
28  class CreatureStats;
29  class NpcStats;
30  struct Movement;
31 }
32 
33 namespace MWGui
34 {
35  struct ToolTipInfo;
36 }
37 
38 namespace ESM
39 {
40  struct Position;
41 }
42 
43 namespace MWWorld
44 {
45  class ContainerStore;
46  class InventoryStore;
47  class CellStore;
48  class Action;
49 
51  class Class
52  {
53  static std::map<std::string, std::shared_ptr<Class> > sClasses;
54 
55  std::string mTypeName;
56 
57  // not implemented
58  Class (const Class&);
59  Class& operator= (const Class&);
60 
61  protected:
62 
63  Class();
64 
65  std::shared_ptr<Action> defaultItemActivate(const Ptr &ptr, const Ptr &actor) const;
67 
68  virtual Ptr copyToCellImpl(const ConstPtr &ptr, CellStore &cell) const;
69 
70  public:
71 
72  virtual ~Class();
73 
74  const std::string& getTypeName() const {
75  return mTypeName;
76  }
77 
78  virtual void insertObjectRendering (const Ptr& ptr, const std::string& mesh, MWRender::RenderingInterface& renderingInterface) const;
79  virtual void insertObject(const Ptr& ptr, const std::string& mesh, MWPhysics::PhysicsSystem& physics) const;
81 
82  virtual std::string getName (const ConstPtr& ptr) const = 0;
85 
86  virtual void adjustPosition(const MWWorld::Ptr& ptr, bool force) const;
89 
90  virtual MWMechanics::CreatureStats& getCreatureStats (const Ptr& ptr) const;
93 
94  virtual bool hasToolTip (const ConstPtr& ptr) const;
96 
97  virtual MWGui::ToolTipInfo getToolTipInfo (const ConstPtr& ptr, int count) const;
99 
100  virtual bool showsInInventory (const ConstPtr& ptr) const;
104 
105  virtual MWMechanics::NpcStats& getNpcStats (const Ptr& ptr) const;
108 
109  virtual bool hasItemHealth (const ConstPtr& ptr) const;
111 
112  virtual int getItemHealth (const ConstPtr& ptr) const;
114 
115  virtual int getItemMaxHealth (const ConstPtr& ptr) const;
118 
119  virtual void hit(const Ptr& ptr, float attackStrength, int type=-1) const;
126 
127  virtual void onHit(const MWWorld::Ptr &ptr, float damage, bool ishealth, const MWWorld::Ptr &object, const MWWorld::Ptr &attacker, const osg::Vec3f &hitPosition, bool successful) const;
132 
133  virtual void block (const Ptr& ptr) const;
136 
137  virtual bool canBeActivated(const Ptr& ptr) const;
140 
141  virtual std::shared_ptr<Action> activate (const Ptr& ptr, const Ptr& actor) const;
143 
144  virtual std::shared_ptr<Action> use (const Ptr& ptr, bool force=false)
145  const;
148 
149  virtual ContainerStore& getContainerStore (const Ptr& ptr) const;
152 
153  virtual InventoryStore& getInventoryStore (const Ptr& ptr) const;
156 
157  virtual bool hasInventoryStore (const Ptr& ptr) const;
159 
160  virtual void lock (const Ptr& ptr, int lockLevel) const;
162 
163  virtual void unlock (const Ptr& ptr) const;
165 
166  virtual bool canLock (const ConstPtr& ptr) const;
167 
168  virtual void setRemainingUsageTime (const Ptr& ptr, float duration) const;
171 
172  virtual float getRemainingUsageTime (const ConstPtr& ptr) const;
175 
176  virtual std::string getScript (const ConstPtr& ptr) const;
179 
180  virtual float getSpeed (const Ptr& ptr) const;
182 
183  virtual float getJump(const MWWorld::Ptr &ptr) const;
185 
186  virtual MWMechanics::Movement& getMovementSettings (const Ptr& ptr) const;
188 
189  virtual osg::Vec3f getRotationVector (const Ptr& ptr) const;
191 
192  virtual std::pair<std::vector<int>, bool> getEquipmentSlots (const ConstPtr& ptr) const;
197 
198  virtual int getEquipmentSkill (const ConstPtr& ptr)
199  const;
203 
204  virtual int getValue (const ConstPtr& ptr) const;
207 
208  virtual float getCapacity (const MWWorld::Ptr& ptr) const;
212 
213  virtual float getEncumbrance (const MWWorld::Ptr& ptr) const;
217 
218  virtual float getNormalizedEncumbrance (const MWWorld::Ptr& ptr) const;
220 
221  virtual bool apply (const MWWorld::Ptr& ptr, const std::string& id,
222  const MWWorld::Ptr& actor) const;
228 
229  virtual void skillUsageSucceeded (const MWWorld::Ptr& ptr, int skill, int usageType, float extraFactor=1.f) const;
233 
234  virtual bool isEssential (const MWWorld::ConstPtr& ptr) const;
238 
239  virtual std::string getUpSoundId (const ConstPtr& ptr) const;
242 
243  virtual std::string getDownSoundId (const ConstPtr& ptr) const;
246 
247  virtual std::string getSoundIdFromSndGen(const Ptr &ptr, const std::string &type) const;
249 
250  virtual float getArmorRating (const MWWorld::Ptr& ptr) const;
252 
253  virtual std::string getInventoryIcon (const MWWorld::ConstPtr& ptr) const;
255 
256  virtual std::string getEnchantment (const MWWorld::ConstPtr& ptr) const;
259 
260  virtual int getEnchantmentPoints (const MWWorld::ConstPtr& ptr) const;
262 
263  virtual void adjustScale(const MWWorld::ConstPtr& ptr, osg::Vec3f& scale, bool rendering) const;
265 
266  virtual bool canSell (const MWWorld::ConstPtr& item, int npcServices) const;
268 
269  virtual int getServices (const MWWorld::ConstPtr& actor) const;
270 
271  virtual std::string getModel(const MWWorld::ConstPtr &ptr) const;
272 
273  virtual bool useAnim() const;
275 
276  virtual void getModelsToPreload(const MWWorld::Ptr& ptr, std::vector<std::string>& models) const;
278 
279  virtual std::string applyEnchantment(const MWWorld::ConstPtr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
281 
282  virtual std::pair<int, std::string> canBeEquipped(const MWWorld::ConstPtr &ptr, const MWWorld::Ptr &npc) const;
285 
286  virtual float getWeight (const MWWorld::ConstPtr& ptr) const;
287 
288  virtual bool isPersistent (const MWWorld::ConstPtr& ptr) const;
289 
290  virtual bool isKey (const MWWorld::ConstPtr& ptr) const { return false; }
291 
292  virtual bool isGold(const MWWorld::ConstPtr& ptr) const { return false; }
293 
294  virtual bool allowTelekinesis(const MWWorld::ConstPtr& ptr) const { return true; }
296 
298  virtual int getBloodTexture (const MWWorld::ConstPtr& ptr) const;
299 
300  virtual Ptr copyToCell(const ConstPtr &ptr, CellStore &cell, int count) const;
301 
302  virtual Ptr copyToCell(const ConstPtr &ptr, CellStore &cell, const ESM::Position &pos, int count) const;
303 
304  virtual bool isActivator() const {
305  return false;
306  }
307 
308  virtual bool isActor() const {
309  return false;
310  }
311 
312  virtual bool isNpc() const {
313  return false;
314  }
315 
316  virtual bool isDoor() const {
317  return false;
318  }
319 
320  virtual bool isBipedal(const MWWorld::ConstPtr& ptr) const;
321  virtual bool canFly(const MWWorld::ConstPtr& ptr) const;
322  virtual bool canSwim(const MWWorld::ConstPtr& ptr) const;
323  virtual bool canWalk(const MWWorld::ConstPtr& ptr) const;
324  bool isPureWaterCreature(const MWWorld::Ptr& ptr) const;
325  bool isPureFlyingCreature(const MWWorld::Ptr& ptr) const;
326  bool isPureLandCreature(const MWWorld::Ptr& ptr) const;
327  bool isMobile(const MWWorld::Ptr& ptr) const;
328 
329  virtual int getSkill(const MWWorld::Ptr& ptr, int skill) const;
330 
331  virtual void readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state)
332  const;
334 
335  virtual void writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
336  const;
338 
339  static const Class& get (const std::string& key);
341 
342  static void registerClass (const std::string& key, std::shared_ptr<Class> instance);
343 
344  virtual int getBaseGold(const MWWorld::ConstPtr& ptr) const;
345 
346  virtual bool isClass(const MWWorld::ConstPtr& ptr, const std::string &className) const;
347 
349  virtual int getDoorState (const MWWorld::ConstPtr &ptr) const;
351  virtual void setDoorState (const MWWorld::Ptr &ptr, int state) const;
352 
353  virtual void respawn (const MWWorld::Ptr& ptr) const {}
354 
355  virtual void restock (const MWWorld::Ptr& ptr) const {}
356 
358  virtual std::string getSound(const MWWorld::ConstPtr& ptr) const;
359 
360  virtual int getBaseFightRating (const MWWorld::ConstPtr& ptr) const;
361 
362  virtual std::string getPrimaryFaction (const MWWorld::ConstPtr& ptr) const;
363  virtual int getPrimaryFactionRank (const MWWorld::ConstPtr& ptr) const;
364 
366  virtual float getEffectiveArmorRating(const MWWorld::ConstPtr& armor, const MWWorld::Ptr& actor) const;
367  };
368 }
369 
370 #endif
virtual bool canSell(const MWWorld::ConstPtr &item, int npcServices) const
Determine whether or not item can be sold to an npc with the given npcServices.
Definition: class.cpp:53
virtual std::string getDownSoundId(const ConstPtr &ptr) const
Definition: class.cpp:260
Definition: tooltips.hpp:18
virtual MWMechanics::CreatureStats & getCreatureStats(const Ptr &ptr) const
Definition: class.cpp:63
virtual int getSkill(const MWWorld::Ptr &ptr, int skill) const
Definition: class.cpp:428
virtual bool isEssential(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:221
static std::map< std::string, std::shared_ptr< Class > > sClasses
Definition: class.hpp:53
virtual std::shared_ptr< Action > use(const Ptr &ptr, bool force=false) const
Definition: class.cpp:116
virtual int getItemMaxHealth(const ConstPtr &ptr) const
Definition: class.cpp:86
virtual bool isBipedal(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:379
virtual void restock(const MWWorld::Ptr &ptr) const
Definition: class.hpp:355
virtual void adjustScale(const MWWorld::ConstPtr &ptr, osg::Vec3f &scale, bool rendering) const
Definition: class.cpp:298
virtual bool canWalk(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:394
virtual bool apply(const MWWorld::Ptr &ptr, const std::string &id, const MWWorld::Ptr &actor) const
Definition: class.cpp:43
Common creature stats.
Definition: creaturestats.hpp:25
virtual bool showsInInventory(const ConstPtr &ptr) const
Definition: class.cpp:280
virtual void readAdditionalState(const MWWorld::Ptr &ptr, const ESM::ObjectState &state) const
Read additional state from state into ptr.
Definition: class.cpp:438
virtual MWMechanics::NpcStats & getNpcStats(const Ptr &ptr) const
Definition: class.cpp:68
std::shared_ptr< Action > defaultItemActivate(const Ptr &ptr, const Ptr &actor) const
Generate default action for activating inventory items.
Definition: class.cpp:333
virtual void unlock(const Ptr &ptr) const
Unlock object (default implementation: throw an exception)
Definition: class.cpp:141
Definition: inventorystore.hpp:40
virtual bool canSwim(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:389
virtual int getItemHealth(const ConstPtr &ptr) const
Return current item health or throw an exception if class does not have item health.
Definition: class.cpp:78
virtual bool useAnim() const
Whether or not to use animated variant of model (default false)
Definition: class.cpp:307
virtual bool isKey(const MWWorld::ConstPtr &ptr) const
Definition: class.hpp:290
virtual void setDoorState(const MWWorld::Ptr &ptr, int state) const
This does not actually cause the door to move. Use World::activateDoor instead.
Definition: class.cpp:457
Definition: renderinginterface.hpp:9
std::string mTypeName
Definition: class.hpp:55
virtual float getEffectiveArmorRating(const MWWorld::ConstPtr &armor, const MWWorld::Ptr &actor) const
Get the effective armor rating, factoring in the actor's skills, for the given armor.
Definition: class.cpp:495
virtual void getModelsToPreload(const MWWorld::Ptr &ptr, std::vector< std::string > &models) const
Get a list of models to preload that this object may use (directly or indirectly). default implementation: list getModel().
Definition: class.cpp:312
bool isPureFlyingCreature(const MWWorld::Ptr &ptr) const
Definition: class.cpp:407
virtual std::string applyEnchantment(const MWWorld::ConstPtr &ptr, const std::string &enchId, int enchCharge, const std::string &newName) const
Creates a new record using ptr as template, with the given name and the given enchantment applied to ...
Definition: class.cpp:319
Definition: physicssystem.hpp:52
virtual int getEquipmentSkill(const ConstPtr &ptr) const
Definition: class.cpp:196
virtual bool canLock(const ConstPtr &ptr) const
Definition: class.cpp:146
virtual std::string getName(const ConstPtr &ptr) const =0
static void registerClass(const std::string &key, std::shared_ptr< Class > instance)
Definition: class.cpp:249
Base class for referenceable esm records.
Definition: class.hpp:51
virtual bool isDoor() const
Definition: class.hpp:316
virtual bool isNpc() const
Definition: class.hpp:312
Class & operator=(const Class &)
virtual int getDoorState(const MWWorld::ConstPtr &ptr) const
0 = nothing, 1 = opening, 2 = closing
Definition: class.cpp:452
virtual osg::Vec3f getRotationVector(const Ptr &ptr) const
Return desired rotations, as euler angles.
Definition: class.cpp:186
virtual std::string getModel(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:302
virtual void hit(const Ptr &ptr, float attackStrength, int type=-1) const
Definition: class.cpp:91
virtual float getSpeed(const Ptr &ptr) const
Return movement speed.
Definition: class.cpp:166
virtual std::pair< std::vector< int >, bool > getEquipmentSlots(const ConstPtr &ptr) const
Definition: class.cpp:191
virtual bool isClass(const MWWorld::ConstPtr &ptr, const std::string &className) const
Definition: class.cpp:447
virtual int getPrimaryFactionRank(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:490
virtual void onHit(const MWWorld::Ptr &ptr, float damage, bool ishealth, const MWWorld::Ptr &object, const MWWorld::Ptr &attacker, const osg::Vec3f &hitPosition, bool successful) const
Definition: class.cpp:106
virtual bool hasItemHealth(const ConstPtr &ptr) const
Definition: class.cpp:73
<
Definition: objectstate.hpp:19
virtual void insertObject(const Ptr &ptr, const std::string &mesh, MWPhysics::PhysicsSystem &physics) const
Add reference into a cell for rendering (default implementation: don't render anything).
Definition: class.cpp:38
Desired movement for an actor.
Definition: movement.hpp:9
virtual std::string getEnchantment(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:293
virtual float getArmorRating(const MWWorld::Ptr &ptr) const
Definition: class.cpp:226
bool isPureWaterCreature(const MWWorld::Ptr &ptr) const
Definition: class.cpp:399
virtual void lock(const Ptr &ptr, int lockLevel) const
Lock object (default implementation: throw an exception)
Definition: class.cpp:136
Mutable state of a cell.
Definition: cellstore.hpp:51
bool isMobile(const MWWorld::Ptr &ptr) const
Definition: class.cpp:423
virtual float getEncumbrance(const MWWorld::Ptr &ptr) const
Definition: class.cpp:216
virtual std::string getInventoryIcon(const MWWorld::ConstPtr &ptr) const
Return name of inventory icon.
Definition: class.cpp:270
virtual std::string getPrimaryFaction(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:486
virtual float getWeight(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:211
Pointer to a const LiveCellRef.
Definition: ptr.hpp:90
const std::string & getTypeName() const
Definition: class.hpp:74
virtual std::pair< int, std::string > canBeEquipped(const MWWorld::ConstPtr &ptr, const MWWorld::Ptr &npc) const
Definition: class.cpp:324
virtual void respawn(const MWWorld::Ptr &ptr) const
Definition: class.hpp:353
virtual bool isActor() const
Definition: class.hpp:308
virtual int getValue(const ConstPtr &ptr) const
Definition: class.cpp:201
Definition: containerstore.hpp:48
virtual bool isPersistent(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:244
virtual float getRemainingUsageTime(const ConstPtr &ptr) const
Definition: class.cpp:156
virtual ContainerStore & getContainerStore(const Ptr &ptr) const
Definition: class.cpp:121
virtual std::string getScript(const ConstPtr &ptr) const
Definition: class.cpp:161
virtual std::string getUpSoundId(const ConstPtr &ptr) const
Definition: class.cpp:255
virtual int getBaseFightRating(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:481
virtual void setRemainingUsageTime(const Ptr &ptr, float duration) const
Definition: class.cpp:151
virtual bool isGold(const MWWorld::ConstPtr &ptr) const
Definition: class.hpp:292
virtual bool hasToolTip(const ConstPtr &ptr) const
Definition: class.cpp:288
Definition: defs.hpp:38
Additional stats for NPCs.
Definition: npcstats.hpp:21
virtual float getCapacity(const MWWorld::Ptr &ptr) const
Definition: class.cpp:206
virtual bool allowTelekinesis(const MWWorld::ConstPtr &ptr) const
Return whether this class of object can be activated with telekinesis.
Definition: class.hpp:294
virtual std::shared_ptr< Action > activate(const Ptr &ptr, const Ptr &actor) const
Generate action for activation (default implementation: return a null action).
Definition: class.cpp:111
virtual bool hasInventoryStore(const Ptr &ptr) const
Does this object have an inventory store, i.e. equipment slots? (default implementation: false) ...
Definition: class.cpp:131
virtual MWGui::ToolTipInfo getToolTipInfo(const ConstPtr &ptr, int count) const
Definition: class.cpp:275
virtual void block(const Ptr &ptr) const
Definition: class.cpp:96
virtual bool canBeActivated(const Ptr &ptr) const
Definition: class.cpp:101
virtual void skillUsageSucceeded(const MWWorld::Ptr &ptr, int skill, int usageType, float extraFactor=1.f) const
Definition: class.cpp:48
virtual int getEnchantmentPoints(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:176
virtual float getNormalizedEncumbrance(const MWWorld::Ptr &ptr) const
Returns encumbrance re-scaled to capacity.
Definition: class.cpp:462
virtual MWMechanics::Movement & getMovementSettings(const Ptr &ptr) const
Return desired movement.
Definition: class.cpp:181
Class()
Definition: class.cpp:29
bool isPureLandCreature(const MWWorld::Ptr &ptr) const
Definition: class.cpp:415
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
virtual int getBaseGold(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:442
virtual void insertObjectRendering(const Ptr &ptr, const std::string &mesh, MWRender::RenderingInterface &renderingInterface) const
Definition: class.cpp:33
virtual std::string getSoundIdFromSndGen(const Ptr &ptr, const std::string &type) const
Returns the sound ID for ptr of the given soundgen type.
Definition: class.cpp:265
virtual Ptr copyToCellImpl(const ConstPtr &ptr, CellStore &cell) const
Definition: class.cpp:356
virtual int getBloodTexture(const MWWorld::ConstPtr &ptr) const
Get a blood texture suitable for ptr (see Blood Texture 0-2 in Morrowind.ini)
Definition: class.cpp:433
virtual std::string getSound(const MWWorld::ConstPtr &ptr) const
Returns sound id.
Definition: class.cpp:476
virtual void writeAdditionalState(const MWWorld::ConstPtr &ptr, ESM::ObjectState &state) const
Write additional state from ptr into state.
Definition: class.cpp:440
virtual bool isActivator() const
Definition: class.hpp:304
virtual Ptr copyToCell(const ConstPtr &ptr, CellStore &cell, int count) const
Definition: class.cpp:362
virtual InventoryStore & getInventoryStore(const Ptr &ptr) const
Definition: class.cpp:126
virtual bool canFly(const MWWorld::ConstPtr &ptr) const
Definition: class.cpp:384
virtual ~Class()
Definition: class.cpp:31
virtual float getJump(const MWWorld::Ptr &ptr) const
Return jump velocity (not accounting for movement)
Definition: class.cpp:171
virtual int getServices(const MWWorld::ConstPtr &actor) const
Definition: class.cpp:58
virtual void adjustPosition(const MWWorld::Ptr &ptr, bool force) const
Definition: class.cpp:329