BWAPI
|
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 };