OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
character.hpp
Go to the documentation of this file.
1 #ifndef GAME_MWMECHANICS_CHARACTER_HPP
2 #define GAME_MWMECHANICS_CHARACTER_HPP
3 
4 #include <deque>
5 
7 
8 #include "../mwworld/ptr.hpp"
9 #include "../mwworld/containerstore.hpp"
10 
11 #include "../mwrender/animation.hpp"
12 
13 namespace MWWorld
14 {
15  class InventoryStore;
16 }
17 
18 namespace MWRender
19 {
20  class Animation;
21 }
22 
23 namespace MWMechanics
24 {
25 
26 struct Movement;
27 class CreatureStats;
28 
29 enum Priority {
35  // Note: in vanilla movement anims have higher priority than jump ones.
36  // It causes issues with landing animations during movement.
46 
48 };
49 
52 
65 
70 
75 
80 
85 
90 
95 
97 
108 
116 };
117 
120 
129 
131 };
132 
144 };
145 
150 };
151 
152 struct WeaponInfo;
153 
155 {
159 
161  {
162  std::string mGroup;
163  size_t mLoopCount;
164  bool mPersist;
165  };
166  typedef std::deque<AnimationQueueEntry> AnimationQueue;
168 
170  std::string mCurrentIdle;
171 
173  std::string mCurrentMovement;
178 
180  std::string mCurrentDeath;
182 
184  std::string mCurrentHit;
185 
187 
189  std::string mCurrentJump;
190 
192  std::string mCurrentWeapon;
193 
195 
196  bool mSkipAnim;
197 
198  // counted for skill increase
201 
203 
204  float mTurnAnimationThreshold; // how long to continue playing turning animation after actor stopped turning
205 
206  std::string mAttackType; // slash, chop or thrust
207 
210 
212 
214 
215  void refreshCurrentAnims(CharacterState idle, CharacterState movement, JumpingState jump, bool force=false);
217  void refreshJumpAnims(const WeaponInfo* weap, JumpingState jump, CharacterState& idle, CharacterState& movement, bool force=false);
218  void refreshMovementAnims(const WeaponInfo* weap, CharacterState movement, CharacterState& idle, bool force=false);
219  void refreshIdleAnims(const WeaponInfo* weap, CharacterState idle, bool force=false);
220 
221  void clearAnimQueue(bool clearPersistAnims = false);
222 
223  bool updateWeaponState(CharacterState& idle);
224  bool updateCreatureState();
225  void updateIdleStormState(bool inwater);
226 
227  std::string chooseRandomAttackAnimation() const;
228  bool isRandomAttackAnimation(const std::string& group) const;
229 
231 
232  void updateAnimQueue();
233 
234  void updateHeadTracking(float duration);
235 
236  void updateMagicEffects();
237 
238  void playDeath(float startpoint, CharacterState death);
240  void playRandomDeath(float startpoint = 0.0f);
241 
244  std::string chooseRandomGroup (const std::string& prefix, int* num = NULL) const;
245 
246  bool updateCarriedLeftVisible(WeaponType weaptype) const;
247 
248 public:
250  virtual ~CharacterController();
251 
252  virtual void handleTextKey(const std::string &groupname, const std::multimap<float, std::string>::const_iterator &key,
253  const std::multimap<float, std::string>& map);
254 
255  // Be careful when to call this, see comment in Actors
256  void updateContinuousVfx();
257 
258  void updatePtr(const MWWorld::Ptr &ptr);
259 
260  void update(float duration);
261 
262  void persistAnimationState();
264 
265  bool playGroup(const std::string &groupname, int mode, int count, bool persist=false);
266  void skipAnim();
267  bool isAnimPlaying(const std::string &groupName);
268 
270  {
275  };
276  KillResult kill();
277 
278  void resurrect();
279  bool isDead() const
280  { return mDeathState != CharState_None; }
281 
282  void forceStateUpdate();
283 
284  bool isAttackPreparing() const;
285  bool isCastingSpell() const;
286  bool isReadyToBlock() const;
287  bool isKnockedDown() const;
288  bool isKnockedOut() const;
289  bool isRecovery() const;
290  bool isSneaking() const;
291  bool isRunning() const;
292  bool isTurning() const;
293  bool isAttackingOrSpell() const;
294 
295  void setAttackingOrSpell(bool attackingOrSpell);
296  void castSpell(const std::string spellId, bool manualSpell=false);
297  void setAIAttackType(const std::string& attackType);
298  static void setAttackTypeRandomly(std::string& attackType);
299 
300  bool readyToPrepareAttack() const;
301  bool readyToStartAttack() const;
302 
303  float getAttackStrength() const;
304 
306  void setActive(int active);
307 
309  void setHeadTrackTarget(const MWWorld::ConstPtr& target);
310 
311  void playSwishSound(float attackStrength);
312 };
313 
315 }
316 
317 #endif /* GAME_MWMECHANICS_CHARACTER_HPP */
bool readyToPrepareAttack() const
Definition: character.cpp:2674
CharacterState
Definition: character.hpp:50
Definition: character.hpp:111
Definition: character.hpp:54
Definition: character.hpp:143
JumpingState mJumpState
Definition: character.hpp:188
Definition: character.hpp:136
Definition: character.hpp:71
virtual void handleTextKey(const std::string &groupname, const std::multimap< float, std::string >::const_iterator &key, const std::multimap< float, std::string > &map)
Definition: character.cpp:935
Definition: character.hpp:73
void updatePtr(const MWWorld::Ptr &ptr)
Definition: character.cpp:1073
Definition: character.hpp:43
Definition: character.hpp:91
Definition: character.hpp:101
Definition: character.hpp:122
Definition: character.hpp:89
Definition: character.hpp:61
void refreshIdleAnims(const WeaponInfo *weap, CharacterState idle, bool force=false)
Definition: character.cpp:558
void castSpell(const std::string spellId, bool manualSpell=false)
Definition: character.cpp:2650
Definition: character.hpp:42
Definition: character.hpp:130
size_t mLoopCount
Definition: character.hpp:163
Definition: character.hpp:114
Definition: character.cpp:207
Definition: animation.hpp:85
Definition: character.hpp:30
void refreshCurrentAnims(CharacterState idle, CharacterState movement, JumpingState jump, bool force=false)
Definition: character.cpp:620
bool isAttackPreparing() const
Definition: character.cpp:2576
Definition: character.hpp:59
Definition: character.hpp:137
bool mAdjustMovementAnimSpeed
Definition: character.hpp:175
Definition: character.hpp:94
bool isRecovery() const
Definition: character.cpp:2612
void num(char i, bool last)
Definition: gen_iconv.cpp:12
Definition: character.hpp:107
UpperBodyCharacterState mUpperBodyState
Definition: character.hpp:186
Definition: character.hpp:115
float mTurnAnimationThreshold
Definition: character.hpp:204
void refreshHitRecoilAnims(CharacterState &idle)
Definition: character.cpp:246
Definition: character.hpp:40
Definition: character.hpp:135
bool mSkipAnim
Definition: character.hpp:196
Definition: character.hpp:37
Definition: character.hpp:39
Definition: character.hpp:33
Definition: character.hpp:81
void setAIAttackType(const std::string &attackType)
Definition: character.cpp:2658
void clearAnimQueue(bool clearPersistAnims=false)
Definition: character.cpp:2448
bool isReadyToBlock() const
Definition: character.cpp:2587
Definition: character.hpp:57
Definition: inventorystore.hpp:40
bool isAnimPlaying(const std::string &groupName)
Definition: character.cpp:2441
CharacterState mHitState
Definition: character.hpp:183
KillResult
Definition: character.hpp:269
void resurrect()
Definition: character.cpp:2503
Definition: character.hpp:62
Definition: character.hpp:77
AnimationQueue mAnimQueue
Definition: character.hpp:167
Definition: character.hpp:123
float getAttackStrength() const
Definition: character.cpp:2691
Definition: character.hpp:82
Definition: character.hpp:58
Definition: character.hpp:128
void playSwishSound(float attackStrength)
Definition: character.cpp:2706
Definition: character.hpp:44
Definition: character.hpp:127
void refreshJumpAnims(const WeaponInfo *weap, JumpingState jump, CharacterState &idle, CharacterState &movement, bool force=false)
Definition: character.cpp:354
void setActive(int active)
Definition: character.cpp:2696
std::string mCurrentMovement
Definition: character.hpp:173
std::string chooseRandomAttackAnimation() const
Definition: character.cpp:812
Definition: character.hpp:69
Definition: character.hpp:88
void setAttackTypeBasedOnMovement()
Definition: character.cpp:2557
Definition: character.hpp:66
bool isSneaking() const
Definition: character.cpp:2624
Definition: character.hpp:100
Definition: character.hpp:83
CharacterState mDeathState
Definition: character.hpp:179
float mMovementAnimSpeed
Definition: character.hpp:174
bool mCastingManualSpell
Definition: character.hpp:209
Definition: character.hpp:154
void updateContinuousVfx()
Definition: character.cpp:2514
Definition: character.hpp:38
float mTimeUntilWake
Definition: character.hpp:211
Definition: character.hpp:110
float mSecondsOfRunning
Definition: character.hpp:200
Definition: character.hpp:141
MWWorld::ConstPtr mHeadTrackTarget
Definition: character.hpp:202
std::string mCurrentDeath
Definition: character.hpp:180
bool mHasMovedInXY
Definition: character.hpp:176
std::string mCurrentJump
Definition: character.hpp:189
Definition: character.hpp:76
Definition: character.hpp:45
bool mFloatToSurface
Definition: character.hpp:181
void updateAnimQueue()
Definition: character.cpp:1826
Definition: character.hpp:56
Definition: character.hpp:67
CharacterController(const MWWorld::Ptr &ptr, MWRender::Animation *anim)
Definition: character.cpp:826
void playRandomDeath(float startpoint=0.0f)
Definition: character.cpp:771
bool isRandomAttackAnimation(const std::string &group) const
Definition: character.cpp:2569
std::deque< AnimationQueueEntry > AnimationQueue
Definition: character.hpp:166
bool isCastingSpell() const
Definition: character.cpp:2582
void jump(CodeContainer &code, int offset)
Definition: generator.cpp:586
Definition: character.hpp:125
Definition: character.hpp:126
Definition: character.hpp:119
Definition: character.hpp:149
bool updateCreatureState()
Definition: character.cpp:1118
Definition: character.hpp:60
void unpersistAnimationState()
Definition: character.cpp:2324
bool isDead() const
Definition: character.hpp:279
MWWorld::Ptr mPtr
Definition: character.hpp:156
bool playGroup(const std::string &groupname, int mode, int count, bool persist=false)
Definition: character.cpp:2362
MWWorld::Ptr mWeapon
Definition: character.hpp:157
void refreshMovementAnims(const WeaponInfo *weap, CharacterState movement, CharacterState &idle, bool force=false)
Definition: character.cpp:421
Definition: character.hpp:113
bool isPersistentAnimPlaying()
Definition: character.cpp:2430
Definition: character.hpp:53
bool readyToStartAttack() const
Definition: character.cpp:2680
KillResult kill()
Definition: character.cpp:2479
std::string mCurrentIdle
Definition: character.hpp:170
bool isRunning() const
Definition: character.cpp:2633
Pointer to a const LiveCellRef.
Definition: ptr.hpp:90
Definition: character.hpp:104
Definition: character.hpp:64
bool mAttackingOrSpell
Definition: character.hpp:208
UpperBodyCharacterState
Definition: character.hpp:133
MWRender::Animation * mAnimation
Definition: character.hpp:158
Definition: character.hpp:31
JumpingState
Definition: character.hpp:146
Definition: character.hpp:134
float mAttackStrength
Definition: character.hpp:194
bool isAttackingOrSpell() const
Definition: character.cpp:2618
Definition: character.hpp:84
Definition: character.hpp:63
WeaponType mWeaponType
Definition: character.hpp:191
Definition: character.hpp:41
MWWorld::ContainerStoreIterator getActiveWeapon(CreatureStats &stats, MWWorld::InventoryStore &inv, WeaponType *weaptype)
Definition: character.cpp:651
Definition: character.hpp:86
bool isTurning() const
Definition: character.cpp:2604
Definition: character.hpp:34
static void setAttackTypeRandomly(std::string &attackType)
Definition: character.cpp:2663
bool mMovementAnimationControlled
Definition: character.hpp:177
Definition: character.hpp:121
Definition: character.hpp:124
Definition: character.hpp:32
bool mPersist
Definition: character.hpp:164
float mSecondsOfSwimming
Definition: character.hpp:199
bool isKnockedOut() const
Definition: character.cpp:2598
void updateMagicEffects()
Definition: character.cpp:2531
Definition: character.hpp:55
Definition: character.hpp:74
Definition: animation.hpp:147
Definition: character.hpp:47
Definition: character.hpp:106
virtual ~CharacterController()
Definition: character.cpp:918
std::string mAttackType
Definition: character.hpp:206
std::string mGroup
Definition: character.hpp:162
Definition: character.hpp:147
Definition: character.hpp:112
Definition: character.hpp:109
Definition: character.hpp:68
void setHeadTrackTarget(const MWWorld::ConstPtr &target)
Make this character turn its head towards target. To turn off head tracking, pass an empty Ptr...
Definition: character.cpp:2701
void updateHeadTracking(float duration)
Definition: character.cpp:2719
bool updateWeaponState(CharacterState &idle)
Definition: character.cpp:1228
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
void updateIdleStormState(bool inwater)
Definition: character.cpp:1078
void update(float duration)
Definition: character.cpp:1846
Definition: character.hpp:105
Definition: character.hpp:96
void forceStateUpdate()
Definition: character.cpp:2463
Definition: character.hpp:92
Definition: character.hpp:98
Priority
Definition: character.hpp:29
CharacterState chooseRandomDeathState() const
Definition: character.cpp:764
Definition: character.hpp:103
Definition: character.hpp:93
Definition: character.hpp:148
void playDeath(float startpoint, CharacterState death)
Definition: character.cpp:711
Definition: character.hpp:79
void persistAnimationState()
Definition: character.cpp:2294
void skipAnim()
Definition: character.cpp:2425
std::string mCurrentHit
Definition: character.hpp:184
void setAttackingOrSpell(bool attackingOrSpell)
Definition: character.cpp:2645
Definition: character.hpp:72
bool updateCarriedLeftVisible(WeaponType weaptype) const
Definition: character.cpp:1209
WeaponType
Definition: character.hpp:118
Definition: character.hpp:51
std::string mCurrentWeapon
Definition: character.hpp:192
CharacterState mMovementState
Definition: character.hpp:172
std::string chooseRandomGroup(const std::string &prefix, int *num=NULL) const
Definition: character.cpp:234
bool isKnockedDown() const
Definition: character.cpp:2592
Definition: character.hpp:87
Definition: character.hpp:99
Definition: character.hpp:78
CharacterState mIdleState
Definition: character.hpp:169
Definition: character.hpp:102