_________ __                 __
        /   _____//  |_____________ _/  |______     ____  __ __  ______
        \_____  \\   __\_  __ \__  \\   __\__  \   / ___\|  |  \/  ___/
        /        \|  |  |  | \// __ \|  |  / __ \_/ /_/  >  |  /\___ \
       /_______  /|__|  |__|  (____  /__| (____  /\___  /|____//____  >
               \/                  \/          \//_____/            \/
    ______________________                           ______________________
                          T H E   W A R   B E G I N S
                   Stratagus - A free fantasy real time strategy game engine

action_attack.h
Go to the documentation of this file.
1 // _________ __ __
2 // / _____// |_____________ _/ |______ ____ __ __ ______
3 // \_____ \\ __\_ __ \__ \\ __\__ \ / ___\| | \/ ___/
4 // / \| | | | \// __ \| | / __ \_/ /_/ > | /\___ |
5 // /_______ /|__| |__| (____ /__| (____ /\___ /|____//____ >
6 // \/ \/ \//_____/ \/
7 // ______________________ ______________________
8 // T H E W A R B E G I N S
9 // Stratagus - A free fantasy real time strategy game engine
10 //
12 //
13 // (c) Copyright 1998-2012 by Lutz Sammer and Jimmy Salmon
14 //
15 // This program is free software; you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation; only version 2 of the License.
18 //
19 // This program is distributed in the hope that it will be useful,
20 // but WITHOUT ANY WARRANTY; without even the implied warranty of
21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 // GNU General Public License for more details.
23 //
24 // You should have received a copy of the GNU General Public License
25 // along with this program; if not, write to the Free Software
26 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
27 // 02111-1307, USA.
28 //
29 
30 #ifndef __ACTION_ATTACK_H__
31 #define __ACTION_ATTACK_H__
32 
33 #include "actions.h"
34 
36 
37 class COrder_Attack : public COrder
38 {
39  friend COrder *COrder::NewActionAttack(const CUnit &attacker, CUnit &target);
40  friend COrder *COrder::NewActionAttack(const CUnit &attacker, const Vec2i &dest);
41  friend COrder *COrder::NewActionAttackGround(const CUnit &attacker, const Vec2i &dest);
42 public:
43  explicit COrder_Attack(bool ground) : COrder(ground ? UnitActionAttackGround : UnitActionAttack),
44  State(0), MinRange(0), Range(0), SkirmishRange(0), offeredTarget(NULL), goalPos(-1, -1), attackMovePos(-1, -1), Sleep(0) {}
45 
46  virtual COrder_Attack *Clone() const { return new COrder_Attack(*this); }
47 
48  virtual bool IsValid() const;
49  virtual void Save(CFile &file, const CUnit &unit) const;
50  virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit);
51 
52  virtual void Execute(CUnit &unit);
53  virtual void OnAnimationAttack(CUnit &unit);
54  virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const;
55  virtual void UpdatePathFinderData(PathFinderInput &input);
56  virtual bool OnAiHitUnit(CUnit &unit, CUnit *attacker, int /*damage*/);
57 
58  virtual const Vec2i GetGoalPos() const { return goalPos; }
59  bool IsWeakTargetSelected() const;
60  bool IsAutoTargeting() const;
61  bool IsMovingToAttackPos() const;
62  bool IsAttackGroundOrWall() const;
63  bool IsTargetTooClose(const CUnit &unit) const;
64  CUnit *const BestTarget(const CUnit &unit, CUnit *const target1, CUnit *const target2) const;
65  void OfferNewTarget(const CUnit &unit, CUnit *const target);
66 
67 private:
68  bool CheckIfGoalValid(CUnit &unit);
69  void TurnToTarget(CUnit &unit, const CUnit *target);
70  void SetAutoTarget(CUnit &unit, CUnit *target);
71  bool EndActionAttack(CUnit &unit, const bool canBeFinished);
72  void MoveToBetterPos(CUnit &unit);
73  bool AutoSelectTarget(CUnit &unit);
74  bool CheckForTargetInRange(CUnit &unit);
75  void MoveToAttackPos(CUnit &unit, const int pfReturn);
76  void MoveToTarget(CUnit &unit);
77  void AttackTarget(CUnit &unit);
78 
79 private:
80  int State;
81  int MinRange;
82  int Range;
83  int SkirmishRange;
84  CUnitPtr offeredTarget; // Stores pointer to target offered from outside (f.e. by HitUnit_AttackBack() event).
85  Vec2i goalPos; // Current goal position
86  Vec2i attackMovePos; // If attack-move was ordered
87  unsigned char Sleep;
88 };
90 
91 #endif // !__ACTION_ATTACK_H__
COrder_Attack
Definition: action_attack.h:37
COrder_Attack::IsMovingToAttackPos
bool IsMovingToAttackPos() const
Definition: action_attack.cpp:324
COrder_Attack::OnAnimationAttack
virtual void OnAnimationAttack(CUnit &unit)
Definition: action_attack.cpp:284
COrder_Attack::Clone
virtual COrder_Attack * Clone() const
Definition: action_attack.h:46
CUnitPtr
Definition: unitptr.h:41
COrder_Attack::UpdatePathFinderData
virtual void UpdatePathFinderData(PathFinderInput &input)
Definition: action_attack.cpp:258
COrder
Definition: actions.h:94
COrder_Attack::IsValid
virtual bool IsValid() const
Definition: action_attack.cpp:212
CViewport
Definition: viewport.h:63
COrder_Attack::Show
virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const
Definition: action_attack.cpp:226
COrder_Attack::ParseSpecificData
virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit)
Definition: action_attack.cpp:180
Vec2T< short int >
COrder_Attack::IsTargetTooClose
bool IsTargetTooClose(const CUnit &unit) const
Definition: action_attack.cpp:635
COrder_Attack::IsAttackGroundOrWall
bool IsAttackGroundOrWall() const
Definition: action_attack.cpp:328
COrder_Attack::IsWeakTargetSelected
bool IsWeakTargetSelected() const
Definition: action_attack.cpp:316
PathFinderInput
Definition: pathfinder.h:67
COrder_Attack::BestTarget
CUnit *const BestTarget(const CUnit &unit, CUnit *const target1, CUnit *const target2) const
Definition: action_attack.cpp:334
COrder_Attack::OnAiHitUnit
virtual bool OnAiHitUnit(CUnit &unit, CUnit *attacker, int)
Definition: action_attack.cpp:292
actions.h
COrder_Attack::COrder_Attack
COrder_Attack(bool ground)
Definition: action_attack.h:43
COrder_Attack::IsAutoTargeting
bool IsAutoTargeting() const
Definition: action_attack.cpp:320
COrder_Attack::Save
virtual void Save(CFile &file, const CUnit &unit) const
Definition: action_attack.cpp:155
COrder_Attack::OfferNewTarget
void OfferNewTarget(const CUnit &unit, CUnit *const target)
Definition: action_attack.cpp:351
COrder_Attack::Execute
virtual void Execute(CUnit &unit)
Definition: action_attack.cpp:831
COrder_Attack::GetGoalPos
virtual const Vec2i GetGoalPos() const
Definition: action_attack.h:58
COrder::NewActionAttackGround
static COrder * NewActionAttackGround(const CUnit &attacker, const Vec2i &dest)
Definition: action_attack.cpp:140
COrder::NewActionAttack
static COrder * NewActionAttack(const CUnit &attacker, CUnit &target)
Definition: action_attack.cpp:101
UnitActionAttack
@ UnitActionAttack
unit moves to position/unit
Definition: actions.h:57
CFile
Definition: iolib.h:102
CUnit
The big unit structure.
Definition: unit.h:135
UnitActionAttackGround
@ UnitActionAttackGround
unit attacks position/unit
Definition: actions.h:58
(C) Copyright 1998-2012 by The Stratagus Project under the GNU General Public License.
All trademarks and copyrights on this page are owned by their respective owners.