OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
aicombat.hpp
Go to the documentation of this file.
1 #ifndef GAME_MWMECHANICS_AICOMBAT_H
2 #define GAME_MWMECHANICS_AICOMBAT_H
3 
4 #include "aipackage.hpp"
5 
6 #include "../mwworld/cellstore.hpp" // for Doors
7 
8 #include "../mwbase/world.hpp"
9 
10 #include "pathfinding.hpp"
11 #include "movement.hpp"
12 #include "obstacle.hpp"
13 
14 namespace ESM
15 {
16  namespace AiSequence
17  {
18  struct AiCombat;
19  }
20 }
21 
22 namespace MWMechanics
23 {
24  class Action;
25 
28  {
30  float mTimerReact;
33  bool mAttack;
34  float mAttackRange;
36  osg::Vec3f mLastTargetPos;
38  std::shared_ptr<Action> mCurrentAction;
40  float mStrength;
44 
45  enum FleeState
46  {
51  };
53  bool mLOS;
57 
59  mAttackCooldown(0.0f),
61  mTimerCombatMove(0.0f),
62  mReadyToAttack(false),
63  mAttack(false),
64  mAttackRange(0.0f),
65  mCombatMove(false),
66  mLastTargetPos(0,0,0),
67  mCell(NULL),
69  mActionCooldown(0.0f),
70  mStrength(),
71  mForceNoShortcut(false),
73  mMovement(),
75  mLOS(false),
76  mUpdateLOSTimer(0.0f),
77  mFleeBlindRunTimer(0.0f)
78  {}
79 
80  void startCombatMove(bool isDistantCombat, float distToTarget, float rangeAttack, const MWWorld::Ptr& actor, const MWWorld::Ptr& target);
81  void updateCombatMove(float duration);
82  void stopCombatMove();
83  void startAttackIfReady(const MWWorld::Ptr& actor, CharacterController& characterController,
84  const ESM::Weapon* weapon, bool distantCombat);
85  void updateAttack(CharacterController& characterController);
86  void stopAttack();
87 
88  void startFleeing();
89  void stopFleeing();
90  bool isFleeing();
91  };
92 
94  class AiCombat : public AiPackage
95  {
96  public:
98 
99  AiCombat(const MWWorld::Ptr& actor);
100 
101  AiCombat (const ESM::AiSequence::AiCombat* combat);
102 
103  void init();
104 
105  virtual AiCombat *clone() const;
106 
107  virtual bool execute (const MWWorld::Ptr& actor, CharacterController& characterController, AiState& state, float duration);
108 
109  virtual int getTypeId() const;
110 
111  virtual unsigned int getPriority() const;
112 
114  MWWorld::Ptr getTarget() const;
115 
116  virtual void writeState(ESM::AiSequence::AiSequence &sequence) const;
117 
118  virtual bool canCancel() const { return false; }
119  virtual bool shouldCancelPreviousAi() const { return false; }
120 
121  private:
123  bool attack(const MWWorld::Ptr& actor, const MWWorld::Ptr& target, AiCombatStorage& storage, CharacterController& characterController);
124 
125  void updateLOS(const MWWorld::Ptr& actor, const MWWorld::Ptr& target, float duration, AiCombatStorage& storage);
126 
127  void updateFleeing(const MWWorld::Ptr& actor, const MWWorld::Ptr& target, float duration, AiCombatStorage& storage);
128 
130  void updateActorsMovement(const MWWorld::Ptr& actor, float duration, AiCombatStorage& storage);
131  void rotateActorOnAxis(const MWWorld::Ptr& actor, int axis,
132  MWMechanics::Movement& actorMovementSettings, AiCombatStorage& storage);
133  };
134 
135 
136 }
137 
138 #endif
bool mForceNoShortcut
Definition: aicombat.hpp:41
base class for the temporary storage of AiPackages.
Definition: aistate.hpp:90
float mAttackCooldown
Definition: aicombat.hpp:29
Causes the actor to fight another actor.
Definition: aicombat.hpp:94
std::shared_ptr< Action > mCurrentAction
Definition: aicombat.hpp:38
MWWorld::Ptr getTarget() const
Returns target ID.
Definition: aicombat.cpp:415
void init()
Definition: aicombat.cpp:48
void stopAttack()
Definition: aicombat.cpp:551
void startCombatMove(bool isDistantCombat, float distToTarget, float rangeAttack, const MWWorld::Ptr &actor, const MWWorld::Ptr &target)
Definition: aicombat.cpp:436
AiCombatStorage()
Definition: aicombat.hpp:58
FleeState
Definition: aicombat.hpp:45
bool attack(const MWWorld::Ptr &actor, const MWWorld::Ptr &target, AiCombatStorage &storage, CharacterController &characterController)
Returns true if combat should end.
Definition: aicombat.cpp:156
void updateFleeing(const MWWorld::Ptr &actor, const MWWorld::Ptr &target, float duration, AiCombatStorage &storage)
Definition: aicombat.cpp:274
float mTimerReact
Definition: aicombat.hpp:30
osg::Vec3f mLastTargetPos
Definition: aicombat.hpp:36
Base class for AI packages.
Definition: aipackage.hpp:33
void stopFleeing()
Definition: aicombat.cpp:566
float mActionCooldown
Definition: aicombat.hpp:39
virtual AiCombat * clone() const
Clones the package.
Definition: aicombat.cpp:420
bool isFleeing()
Definition: aicombat.cpp:575
bool mLOS
Definition: aicombat.hpp:53
Definition: character.hpp:154
ESM::Pathgrid::Point mFleeDest
Definition: aicombat.hpp:56
FleeState mFleeState
Definition: aicombat.hpp:52
float mStrength
Definition: aicombat.hpp:40
void startFleeing()
Definition: aicombat.cpp:560
void stopCombatMove()
Definition: aicombat.cpp:499
bool mCombatMove
Definition: aicombat.hpp:35
virtual int getTypeId() const
Definition: aicombat.cpp:405
void updateActorsMovement(const MWWorld::Ptr &actor, float duration, AiCombatStorage &storage)
Transfer desired movement (from AiCombatStorage) to Actor.
Definition: aicombat.cpp:367
Desired movement for an actor.
Definition: movement.hpp:9
ESM::Position mShortcutFailPos
Definition: aicombat.hpp:42
Mutable state of a cell.
Definition: cellstore.hpp:51
const MWWorld::CellStore * mCell
Definition: aicombat.hpp:37
bool mReadyToAttack
Definition: aicombat.hpp:32
virtual bool shouldCancelPreviousAi() const
Upon adding this Ai package, should the Ai Sequence attempt to cancel previous Ai packages (default t...
Definition: aicombat.hpp:119
virtual void writeState(ESM::AiSequence::AiSequence &sequence) const
Definition: aicombat.cpp:425
void updateAttack(CharacterController &characterController)
Definition: aicombat.cpp:542
float mAttackRange
Definition: aicombat.hpp:34
virtual bool canCancel() const
Can this Ai package be canceled? (default true)
Definition: aicombat.hpp:118
This class holds the variables AiCombat needs which are deleted if the package becomes inactive...
Definition: aicombat.hpp:27
void rotateActorOnAxis(const MWWorld::Ptr &actor, int axis, MWMechanics::Movement &actorMovementSettings, AiCombatStorage &storage)
Definition: aicombat.cpp:379
const float AI_REACTION_TIME
Definition: aipackage.hpp:27
virtual bool execute(const MWWorld::Ptr &actor, CharacterController &characterController, AiState &state, float duration)
Definition: aicombat.cpp:100
Definition: defs.hpp:38
AiCombat(const MWWorld::Ptr &actor)
Constructor.
Definition: aicombat.cpp:38
Definition: aisequence.hpp:151
void updateCombatMove(float duration)
Definition: aicombat.cpp:487
void updateLOS(const MWWorld::Ptr &actor, const MWWorld::Ptr &target, float duration, AiCombatStorage &storage)
Definition: aicombat.cpp:262
virtual unsigned int getPriority() const
Higher number is higher priority (0 being the lowest)
Definition: aicombat.cpp:410
MWMechanics::Movement mMovement
Definition: aicombat.hpp:43
Definition: loadpgrd.hpp:30
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
Definition: aisequence.hpp:128
bool mAttack
Definition: aicombat.hpp:33
float mUpdateLOSTimer
Definition: aicombat.hpp:54
float mTimerCombatMove
Definition: aicombat.hpp:31
void startAttackIfReady(const MWWorld::Ptr &actor, CharacterController &characterController, const ESM::Weapon *weapon, bool distantCombat)
Definition: aicombat.cpp:506
Definition: loadweap.hpp:16
float mFleeBlindRunTimer
Definition: aicombat.hpp:55