OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
actors.hpp
Go to the documentation of this file.
1 #ifndef GAME_MWMECHANICS_ACTORS_H
2 #define GAME_MWMECHANICS_ACTORS_H
3 
4 #include <set>
5 #include <vector>
6 #include <string>
7 #include <list>
8 
9 #include "../mwbase/world.hpp"
10 
11 #include "movement.hpp"
12 
13 namespace MWWorld
14 {
15  class Ptr;
16  class CellStore;
17 }
18 
19 namespace MWMechanics
20 {
21  class Actor;
22  class CreatureStats;
23 
24  class Actors
25  {
26  std::map<std::string, int> mDeathCount;
27 
28  void addBoundItem (const std::string& itemId, const MWWorld::Ptr& actor);
29  void removeBoundItem (const std::string& itemId, const MWWorld::Ptr& actor);
30 
31  void adjustMagicEffects (const MWWorld::Ptr& creature);
32 
33  void calculateDynamicStats (const MWWorld::Ptr& ptr);
34 
35  void calculateCreatureStatModifiers (const MWWorld::Ptr& ptr, float duration);
36  void calculateNpcStatModifiers (const MWWorld::Ptr& ptr, float duration);
37 
38  void calculateRestoration (const MWWorld::Ptr& ptr, float duration);
39 
40  void updateDrowning (const MWWorld::Ptr& ptr, float duration, bool isKnockedOut, bool isPlayer);
41 
42  void updateEquippedLight (const MWWorld::Ptr& ptr, float duration, bool mayEquip);
43 
44  void updateCrimePursuit (const MWWorld::Ptr& ptr, float duration);
45 
46  void killDeadActors ();
47 
48  void purgeSpellEffects (int casterActorId);
49 
50  public:
51 
52  Actors();
53  ~Actors();
54 
55  typedef std::map<MWWorld::Ptr,Actor*> PtrActorMap;
56 
57  PtrActorMap::const_iterator begin() { return mActors.begin(); }
58  PtrActorMap::const_iterator end() { return mActors.end(); }
59 
62  bool isActorDetected(const MWWorld::Ptr& actor, const MWWorld::Ptr& observer);
63 
66  void updateMagicEffects (const MWWorld::Ptr& ptr);
67 
68  void addActor (const MWWorld::Ptr& ptr, bool updateImmediately=false);
72 
73  void removeActor (const MWWorld::Ptr& ptr);
77 
78  void castSpell(const MWWorld::Ptr& ptr, const std::string spellId, bool manualSpell=false);
79 
80  void updateActor(const MWWorld::Ptr &old, const MWWorld::Ptr& ptr);
82 
83  void dropActors (const MWWorld::CellStore *cellStore, const MWWorld::Ptr& ignore);
85 
86  void updateCombatMusic();
88 
89  void update (float duration, bool paused);
91 
92  void updateActor (const MWWorld::Ptr& ptr, float duration);
95 
100  void engageCombat(const MWWorld::Ptr& actor1, const MWWorld::Ptr& actor2, std::map<const MWWorld::Ptr, const std::set<MWWorld::Ptr> >& cachedAllies, bool againstPlayer);
101 
102  void updateHeadTracking(const MWWorld::Ptr& actor, const MWWorld::Ptr& targetActor,
103  MWWorld::Ptr& headTrackTarget, float& sqrHeadTrackDistance);
104 
105  void rest(bool sleep);
107 
108  void restoreDynamicStats(const MWWorld::Ptr& actor, bool sleep);
109 
110  int getHoursToRest(const MWWorld::Ptr& ptr) const;
112 
113  void fastForwardAi();
115 
116  int countDeaths (const std::string& id) const;
118 
119  bool isAttackPreparing(const MWWorld::Ptr& ptr);
120  bool isRunning(const MWWorld::Ptr& ptr);
121  bool isSneaking(const MWWorld::Ptr& ptr);
122 
123  void forceStateUpdate(const MWWorld::Ptr &ptr);
124 
125  bool playAnimationGroup(const MWWorld::Ptr& ptr, const std::string& groupName, int mode, int number, bool persist=false);
126  void skipAnimation(const MWWorld::Ptr& ptr);
127  bool checkAnimationPlaying(const MWWorld::Ptr& ptr, const std::string& groupName);
128  void persistAnimationStates();
129 
130  void getObjectsInRange(const osg::Vec3f& position, float radius, std::vector<MWWorld::Ptr>& out);
131 
132  bool isAnyObjectInRange(const osg::Vec3f& position, float radius);
133 
134  void cleanupSummonedCreature (CreatureStats& casterStats, int creatureActorId);
135 
137 
138  std::list<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor);
139  std::list<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor);
140 
142  void getActorsFollowing(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out);
144  void getActorsSidingWith(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out);
146  void getActorsSidingWith(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out, std::map<const MWWorld::Ptr, const std::set<MWWorld::Ptr> >& cachedAllies);
147 
149  std::list<int> getActorsFollowingIndices(const MWWorld::Ptr& actor);
150 
152 
153  std::list<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor);
154 
156  std::list<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor);
157 
158  void write (ESM::ESMWriter& writer, Loading::Listener& listener) const;
159 
160  void readRecord (ESM::ESMReader& reader, uint32_t type);
161 
162  void clear(); // Clear death counter
163 
164  bool isCastingSpell(const MWWorld::Ptr& ptr) const;
165  bool isReadyToBlock(const MWWorld::Ptr& ptr) const;
166  bool isAttackingOrSpell(const MWWorld::Ptr& ptr) const;
167 
168  private:
171 
172  };
173 }
174 
175 #endif
void calculateCreatureStatModifiers(const MWWorld::Ptr &ptr, float duration)
Definition: actors.cpp:642
std::list< MWWorld::Ptr > getActorsFighting(const MWWorld::Ptr &actor)
Returns the list of actors which are fighting the given actor.
Definition: actors.cpp:1911
void updateCrimePursuit(const MWWorld::Ptr &ptr, float duration)
Definition: actors.cpp:1073
void restoreDynamicStats(const MWWorld::Ptr &actor, bool sleep)
Definition: actors.cpp:546
void getObjectsInRange(const osg::Vec3f &position, float radius, std::vector< MWWorld::Ptr > &out)
Definition: actors.cpp:1761
std::list< MWWorld::Ptr > getActorsFollowing(const MWWorld::Ptr &actor)
Definition: actors.cpp:1819
Definition: esmreader.hpp:21
void readRecord(ESM::ESMReader &reader, uint32_t type)
Definition: actors.cpp:1966
void skipAnimation(const MWWorld::Ptr &ptr)
Definition: actors.cpp:1740
void forceStateUpdate(const MWWorld::Ptr &ptr)
Definition: actors.cpp:1720
Definition: actors.hpp:24
Common creature stats.
Definition: creaturestats.hpp:25
void removeBoundItem(const std::string &itemId, const MWWorld::Ptr &actor)
Definition: actors.cpp:269
std::map< MWWorld::Ptr, Actor * > PtrActorMap
Definition: actors.hpp:55
PtrActorMap::const_iterator end()
Definition: actors.hpp:58
void fastForwardAi()
Simulate the passing of time.
Definition: actors.cpp:2029
void adjustMagicEffects(const MWWorld::Ptr &creature)
Definition: actors.cpp:504
Definition: loadinglistener.hpp:8
bool isCastingSpell(const MWWorld::Ptr &ptr) const
Definition: actors.cpp:2010
void updateEquippedLight(const MWWorld::Ptr &ptr, float duration, bool mayEquip)
Definition: actors.cpp:981
bool isSneaking(const MWWorld::Ptr &ptr)
Definition: actors.cpp:913
bool isAttackingOrSpell(const MWWorld::Ptr &ptr) const
Definition: actors.cpp:2019
float mTimerDisposeSummonsCorpses
Definition: actors.hpp:170
void updateHeadTracking(const MWWorld::Ptr &actor, const MWWorld::Ptr &targetActor, MWWorld::Ptr &headTrackTarget, float &sqrHeadTrackDistance)
Definition: actors.cpp:312
Definition: esmwriter.hpp:17
bool isAnyObjectInRange(const osg::Vec3f &position, float radius)
Definition: actors.cpp:1770
bool playAnimationGroup(const MWWorld::Ptr &ptr, const std::string &groupName, int mode, int number, bool persist=false)
Definition: actors.cpp:1727
bool isActorDetected(const MWWorld::Ptr &actor, const MWWorld::Ptr &observer)
Definition: actors.cpp:1171
bool isReadyToBlock(const MWWorld::Ptr &ptr) const
Definition: actors.cpp:2001
void removeActor(const MWWorld::Ptr &ptr)
Definition: actors.cpp:1154
void clear()
Definition: actors.cpp:1981
PtrActorMap::const_iterator begin()
Definition: actors.hpp:57
int countDeaths(const std::string &id) const
Return the number of deaths for actors with the given ID.
Definition: actors.cpp:1712
void addActor(const MWWorld::Ptr &ptr, bool updateImmediately=false)
Definition: actors.cpp:1142
~Actors()
Definition: actors.cpp:1137
void persistAnimationStates()
Definition: actors.cpp:1755
Mutable state of a cell.
Definition: cellstore.hpp:51
bool isAttackPreparing(const MWWorld::Ptr &ptr)
Definition: actors.cpp:893
PtrActorMap mActors
Definition: actors.hpp:169
void rest(bool sleep)
Update actors while the player is waiting or sleeping. This should be called every hour...
Definition: actors.cpp:1659
void calculateRestoration(const MWWorld::Ptr &ptr, float duration)
Definition: actors.cpp:592
int getHoursToRest(const MWWorld::Ptr &ptr) const
Calculate how many hours the given actor needs to rest in order to be fully healed.
Definition: actors.cpp:1694
void updateActor(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr)
Updates an actor with a new Ptr.
Definition: actors.cpp:1204
void calculateDynamicStats(const MWWorld::Ptr &ptr)
Definition: actors.cpp:523
void write(ESM::ESMWriter &writer, Loading::Listener &listener) const
Definition: actors.cpp:1955
bool isRunning(const MWWorld::Ptr &ptr)
Definition: actors.cpp:903
void update(float duration, bool paused)
Update actor stats and store desired velocity vectors in movement.
Definition: actors.cpp:1275
void calculateNpcStatModifiers(const MWWorld::Ptr &ptr, float duration)
Definition: actors.cpp:878
std::list< MWWorld::Ptr > getActorsSidingWith(const MWWorld::Ptr &actor)
Returns the list of actors which are siding with the given actor in fights.
Definition: actors.cpp:1781
std::list< MWWorld::Ptr > getEnemiesNearby(const MWWorld::Ptr &actor)
Unlike getActorsFighting, also returns actors that would fight the given actor if they saw him...
Definition: actors.cpp:1931
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
void addBoundItem(const std::string &itemId, const MWWorld::Ptr &actor)
Definition: actors.cpp:237
void updateMagicEffects(const MWWorld::Ptr &ptr)
Definition: actors.cpp:1993
void castSpell(const MWWorld::Ptr &ptr, const std::string spellId, bool manualSpell=false)
Definition: actors.cpp:1164
Actors()
Definition: actors.cpp:1133
void dropActors(const MWWorld::CellStore *cellStore, const MWWorld::Ptr &ignore)
Deregister all actors (except for ignore) in the given cell.
Definition: actors.cpp:1217
std::list< int > getActorsFollowingIndices(const MWWorld::Ptr &actor)
Get the list of AiFollow::mFollowIndex for all actors following this target.
Definition: actors.cpp:1882
bool checkAnimationPlaying(const MWWorld::Ptr &ptr, const std::string &groupName)
Definition: actors.cpp:1747
void killDeadActors()
Definition: actors.cpp:1555
std::map< std::string, int > mDeathCount
Definition: actors.hpp:26
void engageCombat(const MWWorld::Ptr &actor1, const MWWorld::Ptr &actor2, std::map< const MWWorld::Ptr, const std::set< MWWorld::Ptr > > &cachedAllies, bool againstPlayer)
Definition: actors.cpp:354
void updateDrowning(const MWWorld::Ptr &ptr, float duration, bool isKnockedOut, bool isPlayer)
Definition: actors.cpp:923
void purgeSpellEffects(int casterActorId)
Definition: actors.cpp:1650
void cleanupSummonedCreature(CreatureStats &casterStats, int creatureActorId)
Definition: actors.cpp:1626
void updateCombatMusic()
Update combat music state.
Definition: actors.cpp:1232