OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
obstacle.hpp
Go to the documentation of this file.
1 #ifndef OPENMW_MECHANICS_OBSTACLE_H
2 #define OPENMW_MECHANICS_OBSTACLE_H
3 
4 namespace MWWorld
5 {
6  class Ptr;
7 }
8 
9 namespace MWMechanics
10 {
11  struct Movement;
12 
13  static const int NUM_EVADE_DIRECTIONS = 4;
14 
16  bool proximityToDoor(const MWWorld::Ptr& actor, float minDist);
17 
19 
20  const MWWorld::Ptr getNearbyDoor(const MWWorld::Ptr& actor, float minDist);
21 
23  {
24  public:
25  ObstacleCheck();
26 
27  // Clear the timers and set the state machine to default
28  void clear();
29 
30  bool isNormalState() const;
31  bool isEvading() const;
32 
33  // Returns true if there is an obstacle and an evasive action
34  // should be taken
35  bool check(const MWWorld::Ptr& actor, float duration, float scaleMinimumDistance = 1.0f);
36 
37  // change direction to try to fix "stuck" actor
38  void takeEvasiveAction(MWMechanics::Movement& actorMovement);
39 
40  private:
41 
42  // for checking if we're stuck (ignoring Z axis)
43  float mPrevX;
44  float mPrevY;
45 
46  // directions to try moving in when get stuck
47  static const float evadeDirections[NUM_EVADE_DIRECTIONS][2];
48 
49  enum WalkState
50  {
54  };
56 
57  float mStuckDuration; // accumulate time here while in same spot
59  float mDistSameSpot; // take account of actor's speed
61 
63  };
64 }
65 
66 #endif
static const float evadeDirections[NUM_EVADE_DIRECTIONS][2]
Definition: obstacle.hpp:47
bool isEvading() const
Definition: obstacle.cpp:104
WalkState
Definition: obstacle.hpp:49
float mPrevY
Definition: obstacle.hpp:44
Definition: obstacle.hpp:51
Definition: obstacle.hpp:22
static const int NUM_EVADE_DIRECTIONS
Definition: obstacle.hpp:13
void chooseEvasionDirection()
Definition: obstacle.cpp:203
void clear()
Definition: obstacle.cpp:92
ObstacleCheck()
Definition: obstacle.cpp:81
Desired movement for an actor.
Definition: movement.hpp:9
bool check(const MWWorld::Ptr &actor, float duration, float scaleMinimumDistance=1.0f)
Definition: obstacle.cpp:131
Definition: obstacle.hpp:53
float mEvadeDuration
Definition: obstacle.hpp:58
float mStuckDuration
Definition: obstacle.hpp:57
bool isNormalState() const
Definition: obstacle.cpp:99
const MWWorld::Ptr getNearbyDoor(const MWWorld::Ptr &actor, float minDist)
Returns door pointer within range. No guarantee is given as to which one.
Definition: obstacle.cpp:35
bool proximityToDoor(const MWWorld::Ptr &actor, float minDist)
tests actor's proximity to a closed door by default
Definition: obstacle.cpp:27
int mEvadeDirectionIndex
Definition: obstacle.hpp:60
float mPrevX
Definition: obstacle.hpp:43
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
WalkState mWalkState
Definition: obstacle.hpp:55
void takeEvasiveAction(MWMechanics::Movement &actorMovement)
Definition: obstacle.cpp:197
float mDistSameSpot
Definition: obstacle.hpp:59