00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __ACTION_ATTACK_H__
00031 #define __ACTION_ATTACK_H__
00032
00033 #include "actions.h"
00034
00036
00037 class COrder_Attack : public COrder
00038 {
00039 friend COrder *COrder::NewActionAttack(const CUnit &attacker, CUnit &target);
00040 friend COrder *COrder::NewActionAttack(const CUnit &attacker, const Vec2i &dest);
00041 friend COrder *COrder::NewActionAttackGround(const CUnit &attacker, const Vec2i &dest);
00042 public:
00043 explicit COrder_Attack(bool ground) : COrder(ground ? UnitActionAttackGround : UnitActionAttack),
00044 State(0), MinRange(0), Range(0), goalPos(-1, -1) {}
00045
00046 virtual COrder_Attack *Clone() const { return new COrder_Attack(*this); }
00047
00048 virtual bool IsValid() const;
00049 virtual void Save(CFile &file, const CUnit &unit) const;
00050 virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit);
00051
00052 virtual void Execute(CUnit &unit);
00053 virtual void OnAnimationAttack(CUnit &unit);
00054 virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const;
00055 virtual void UpdatePathFinderData(PathFinderInput &input);
00056 virtual bool OnAiHitUnit(CUnit &unit, CUnit *attacker, int );
00057
00058 bool IsWeakTargetSelected() const;
00059
00060 private:
00061 bool CheckForDeadGoal(CUnit &unit);
00062 bool CheckForTargetInRange(CUnit &unit);
00063 void MoveToTarget(CUnit &unit);
00064 void AttackTarget(CUnit &unit);
00065
00066 private:
00067 int State;
00068 int MinRange;
00069 int Range;
00070 Vec2i goalPos;
00071 };
00073
00074 #endif // !__ACTION_ATTACK_H__