BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer1Reactive/FSM/Behaviors/EngageEnemies/UnitAttackFSM.h
Go to the documentation of this file.
00001 //TODO: Needs to be cleaned!!!
00002 #pragma once
00003 #include "../../UnitBehavior.h"
00004 #include "../../BehaviorState.h"
00005 #include "../../Layer1FSM.h"
00006 #include "../../Actions/AttackUnitAction.h"
00007 #include "../../Conditions/CompositeCondition.h"
00008 #include "../../Conditions/HasCriticalHealth.h"
00009 #include "../../Conditions/HasRangedAttack.h"
00010 #include "../../Conditions/IsTargeted.h"
00011 #include "../../Conditions/IsWorthFleeing.h"
00012 #include "../../../../../UnitManager.h"
00013 #include "../../../../../../Utils/ReferenceCounted.h"
00014 #include <BWAPI.h>
00015 
00016 class IUnitAttackFSM : public virtual IUnitBehavior
00017 {
00018 public:
00019   IUnitAttackFSM(const Process* parent, unsigned int initialPriority, BWAPI::Unit* unit)
00020     : IUnitBehavior(parent, initialPriority, unit)
00021     , IBehavior(parent, initialPriority)
00022     , IFSM(parent)
00023     , Process(parent)
00024   {
00025   }
00026 
00027   virtual bool selectTarget(const UnitGroup& enemies) = 0;
00028 
00029   static IUnitAttackFSM* NewAttackFSM(const Process* parent, unsigned int initialPriority, BWAPI::Unit* unit);
00030 };
00031 
00032 template <class DerivedBehavior>
00033 class UnitAttackFSM : public virtual IUnitAttackFSM, public UnitBehavior<DerivedBehavior>
00034 {
00035 public:
00036   UnitAttackFSM(const Process* parent, unsigned int initialPriority, BWAPI::Unit* unit)
00037     : IUnitAttackFSM(parent, initialPriority, unit)
00038     , UnitBehavior(parent, initialPriority, unit)
00039     , IUnitBehavior(parent, initialPriority, unit)
00040     , IBehavior(parent, initialPriority)
00041     , IFSM(parent)
00042     , Process(parent)
00043   {
00044   }
00045 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines