OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
aicombataction.hpp
Go to the documentation of this file.
1 #ifndef OPENMW_AICOMBAT_ACTION_H
2 #define OPENMW_AICOMBAT_ACTION_H
3 
4 #include <memory>
5 
7 
8 #include "../mwworld/ptr.hpp"
9 #include "../mwworld/containerstore.hpp"
10 
11 namespace MWMechanics
12 {
13  class Action
14  {
15  public:
16  virtual ~Action() {}
17  virtual void prepare(const MWWorld::Ptr& actor) = 0;
18  virtual float getCombatRange (bool& isRanged) const = 0;
19  virtual float getActionCooldown() { return 0.f; }
20  virtual const ESM::Weapon* getWeapon() const { return NULL; };
21  virtual bool isAttackingOrSpell() const { return true; }
22  virtual bool isFleeing() const { return false; }
23  };
24 
25  class ActionFlee : public Action
26  {
27  public:
29  virtual void prepare(const MWWorld::Ptr& actor) {}
30  virtual float getCombatRange (bool& isRanged) const { return 0.0f; }
31  virtual float getActionCooldown() { return 3.0f; }
32  virtual bool isAttackingOrSpell() const { return false; }
33  virtual bool isFleeing() const { return true; }
34  };
35 
36  class ActionSpell : public Action
37  {
38  public:
39  ActionSpell(const std::string& spellId) : mSpellId(spellId) {}
40  std::string mSpellId;
42  virtual void prepare(const MWWorld::Ptr& actor);
43 
44  virtual float getCombatRange (bool& isRanged) const;
45  };
46 
47  class ActionEnchantedItem : public Action
48  {
49  public:
53  virtual void prepare(const MWWorld::Ptr& actor);
54  virtual float getCombatRange (bool& isRanged) const;
55 
57  virtual float getActionCooldown() { return 0.75f; }
58  };
59 
60  class ActionPotion : public Action
61  {
62  public:
63  ActionPotion(const MWWorld::Ptr& potion) : mPotion(potion) {}
66  virtual void prepare(const MWWorld::Ptr& actor);
67  virtual float getCombatRange (bool& isRanged) const;
68  virtual bool isAttackingOrSpell() const { return false; }
69 
71  virtual float getActionCooldown() { return 0.75f; }
72  };
73 
74  class ActionWeapon : public Action
75  {
76  private:
79 
80  public:
82  ActionWeapon(const MWWorld::Ptr& weapon, const MWWorld::Ptr& ammo = MWWorld::Ptr())
83  : mAmmunition(ammo), mWeapon(weapon) {}
85  virtual void prepare(const MWWorld::Ptr& actor);
86  virtual float getCombatRange (bool& isRanged) const;
87  virtual const ESM::Weapon* getWeapon() const;
88  };
89 
90  std::shared_ptr<Action> prepareNextAction (const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy);
91  float getBestActionRating(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy);
92 
93  float getDistanceMinusHalfExtents(const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy, bool minusZDist=false);
94  float getMaxAttackDistance(const MWWorld::Ptr& actor);
95  bool canFight(const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy);
96 
97  float vanillaRateFlee(const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy);
98  bool makeFleeDecision(const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy, float antiFleeRating);
99 }
100 
101 #endif
virtual float getCombatRange(bool &isRanged) const =0
virtual const ESM::Weapon * getWeapon() const
Definition: aicombataction.cpp:138
virtual float getCombatRange(bool &isRanged) const
Definition: aicombataction.cpp:79
virtual float getActionCooldown()
Since this action has no animation, apply a small cool down for using it.
Definition: aicombataction.hpp:71
Definition: aicombataction.hpp:13
ActionFlee()
Definition: aicombataction.hpp:28
Definition: aicombataction.hpp:36
ActionEnchantedItem(const MWWorld::ContainerStoreIterator &item)
Definition: aicombataction.hpp:50
virtual float getActionCooldown()
Definition: aicombataction.hpp:31
virtual float getCombatRange(bool &isRanged) const
Definition: aicombataction.cpp:113
virtual float getActionCooldown()
Definition: aicombataction.hpp:19
virtual float getActionCooldown()
Since this action has no animation, apply a small cool down for using it.
Definition: aicombataction.hpp:57
virtual void prepare(const MWWorld::Ptr &actor)
Equips the given weapon.
Definition: aicombataction.cpp:92
virtual bool isAttackingOrSpell() const
Definition: aicombataction.hpp:21
ActionWeapon(const MWWorld::Ptr &weapon, const MWWorld::Ptr &ammo=MWWorld::Ptr())
weapon may be empty for hand-to-hand combat
Definition: aicombataction.hpp:82
virtual ~Action()
Definition: aicombataction.hpp:16
float vanillaRateFlee(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy)
Definition: aicombataction.cpp:465
Definition: aicombataction.hpp:74
virtual bool isFleeing() const
Definition: aicombataction.hpp:22
MWWorld::Ptr mPotion
Definition: aicombataction.hpp:64
std::string mSpellId
Definition: aicombataction.hpp:40
virtual const ESM::Weapon * getWeapon() const
Definition: aicombataction.hpp:20
virtual void prepare(const MWWorld::Ptr &actor)
Sets the given item as selected enchanted item in the actor's InventoryStore.
Definition: aicombataction.cpp:63
MWWorld::ContainerStoreIterator mItem
Definition: aicombataction.hpp:51
virtual void prepare(const MWWorld::Ptr &actor)=0
ActionSpell(const std::string &spellId)
Definition: aicombataction.hpp:39
virtual float getCombatRange(bool &isRanged) const
Definition: aicombataction.cpp:54
float getDistanceMinusHalfExtents(const MWWorld::Ptr &actor1, const MWWorld::Ptr &actor2, bool minusZDist)
Definition: aicombataction.cpp:282
Definition: aicombataction.hpp:25
virtual bool isFleeing() const
Definition: aicombataction.hpp:33
virtual void prepare(const MWWorld::Ptr &actor)
Definition: aicombataction.hpp:29
MWWorld::Ptr mAmmunition
Definition: aicombataction.hpp:77
virtual void prepare(const MWWorld::Ptr &actor)
Drinks the given potion.
Definition: aicombataction.cpp:86
float getMaxAttackDistance(const MWWorld::Ptr &actor)
Definition: aicombataction.cpp:297
virtual float getCombatRange(bool &isRanged) const
Definition: aicombataction.hpp:30
virtual bool isAttackingOrSpell() const
Definition: aicombataction.hpp:68
float getBestActionRating(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy)
Definition: aicombataction.cpp:231
Definition: aicombataction.hpp:47
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
std::shared_ptr< Action > prepareNextAction(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy)
Definition: aicombataction.cpp:145
virtual void prepare(const MWWorld::Ptr &actor)
Sets the given spell as selected on the actor's spell list.
Definition: aicombataction.cpp:40
virtual bool isAttackingOrSpell() const
Definition: aicombataction.hpp:32
Definition: aicombataction.hpp:60
virtual float getCombatRange(bool &isRanged) const
Definition: aicombataction.cpp:70
bool canFight(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy)
Definition: aicombataction.cpp:401
bool makeFleeDecision(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy, float antiFleeRating)
Definition: aicombataction.cpp:498
ActionPotion(const MWWorld::Ptr &potion)
Definition: aicombataction.hpp:63
MWWorld::Ptr mWeapon
Definition: aicombataction.hpp:78
Definition: loadweap.hpp:16