BWAPI
|
00001 #pragma once 00002 #include "../../../Common.h" 00003 #include "../../../PerceptualState/Common.h" 00004 #include "../../../SituationAnalysis/Layer1GameState/Layer1GameState.h" 00005 #include "../../../SituationAnalysis/Layer2Cueing/Layer2Cueing.h" 00006 #include "../../../SituationAnalysis/Layer3TacticalRecognition/Layer3TacticalRecognition.h" 00007 #include "../../Layer2Actions/Interface/Common.h" 00008 #include "../../Layer2Actions/Managers/Layer2Managers.h" 00009 #include "../Layer3Tactical.h" 00010 00011 class Layer3ScriptTypes 00012 { 00013 //protected: 00014 public: 00015 // Resources 00016 static const unsigned int PRIORITY_BUILD_CANNONS = 190; 00017 static const unsigned int PRIORITY_RECRUIT_OBSERVER = 320; 00018 static const unsigned int PRIORITY_BUILD_PYLONS = 300; 00019 static const unsigned int PRIORITY_BUILD_ASSIMILATOR = 275; 00020 static const unsigned int PRIORITY_RECRUIT_PROBES = 250; 00021 static const unsigned int PRIORITY_PROGRESS_TECH = 240; 00022 static const unsigned int PRIORITY_RECRUIT_ARMY = 230; 00023 static const unsigned int PRIORITY_BUILD_GATEWAYS = 200; 00024 static const unsigned int PRIORITY_EXPAND = 200; 00025 // No resources 00026 static const unsigned int PRIORITY_INITIAL_SCOUT = 500; 00027 static const unsigned int PRIORITY_COLLECT_MINERALS = 100; 00028 static const unsigned int PRIORITY_COLLECT_GAS = 100; 00029 static const unsigned int PRIORITY_ATTACK_MOVE = 50; 00030 00031 public: 00032 class ProbesResourcesDistribution 00033 { 00034 public: 00035 ProbesResourcesDistribution(size_t nbProbesMinerals, size_t nbProbesGas) 00036 : m_nbProbesMinerals(nbProbesMinerals) 00037 , m_nbProbesGas(nbProbesGas) 00038 {} 00039 size_t getNbProbesOnMinerals() const { return m_nbProbesMinerals; } 00040 size_t getNbProbesOnGas() const { return m_nbProbesGas; } 00041 size_t getTotalNbProbes() const { return m_nbProbesMinerals + m_nbProbesGas; } 00042 protected: 00043 size_t m_nbProbesMinerals; 00044 size_t m_nbProbesGas; 00045 }; 00046 00047 class ResourcesSaturation : public ProbesResourcesDistribution 00048 { 00049 public: 00050 ResourcesSaturation(size_t nbProbesMinerals, size_t nbCrystals, double mineralsSaturationRatio, 00051 size_t nbProbesGas, size_t nbGeysers) 00052 : ProbesResourcesDistribution(nbProbesMinerals, nbProbesGas) 00053 , m_nbCrystals(nbCrystals) 00054 , m_mineralsSaturationRatio(mineralsSaturationRatio) 00055 , m_nbGeysers(nbGeysers) 00056 {} 00057 size_t getNbCrystals() const { return m_nbCrystals; } 00058 double getMineralsSaturationRatio() const { return m_mineralsSaturationRatio; } 00059 size_t getNbGeysers() const { return m_nbGeysers; } // Total number of geysers, including depleted ones 00060 double getGasSaturationRatio() const { return m_nbProbesGas > 0 ? double(m_nbGeysers * 3) / double(m_nbProbesGas) : 0.; } 00061 protected: 00062 size_t m_nbCrystals; 00063 double m_mineralsSaturationRatio; 00064 size_t m_nbGeysers; 00065 }; 00066 00067 class ResourcesAcquisitionRatio 00068 { 00069 public: 00070 ResourcesAcquisitionRatio(double minerals, double gas) 00071 : m_pctMinerals(minerals / (minerals + gas)) 00072 , m_pctGas(gas / (minerals + gas)) 00073 {} 00074 double getPctMinerals() const { return m_pctMinerals; } 00075 double getPctGas() const { return m_pctGas; } 00076 bool operator==(const ResourcesAcquisitionRatio& other) const 00077 { 00078 return m_pctMinerals == other.m_pctMinerals && 00079 m_pctGas == other.m_pctGas; 00080 } 00081 bool operator!=(const ResourcesAcquisitionRatio& other) const 00082 { 00083 return m_pctMinerals != other.m_pctMinerals || 00084 m_pctGas != other.m_pctGas; 00085 } 00086 private: 00087 // Resources quantities are defined in relative terms w.r.t. each other 00088 double m_pctMinerals; 00089 double m_pctGas; 00090 }; 00091 00092 // Tactical action types 00093 typedef Layer2Managers::TacticalActionTypes<layer2::TacticalAction>::Type TacticalAction; 00094 typedef Layer2Managers::TacticalActionTypes<layer2::GroupTacticalAction>::Type GroupTacticalAction; 00095 typedef Layer2Managers::TacticalActionTypes<layer2::Attack>::Type Attack; 00096 typedef Layer2Managers::TacticalActionTypes<layer2::AttackMove>::Type AttackMove; 00097 typedef Layer2Managers::TacticalActionTypes<layer2::Build>::Type Build; 00098 typedef Layer2Managers::TacticalActionTypes<layer2::CollectMinerals>::Type CollectMinerals; 00099 typedef Layer2Managers::TacticalActionTypes<layer2::CollectGas>::Type CollectGas; 00100 typedef Layer2Managers::TacticalActionTypes<layer2::Defend>::Type Defend; 00101 typedef Layer2Managers::TacticalActionTypes<layer2::Expand>::Type Expand; 00102 typedef Layer2Managers::TacticalActionTypes<layer2::Harass>::Type Harass; 00103 typedef Layer2Managers::TacticalActionTypes<layer2::Move>::Type Move; 00104 //typedef Layer2Managers::TacticalActionTypes<layer2::OffensiveBuild>::Type OffensiveBuild; 00105 typedef Layer2Managers::TacticalActionTypes<layer2::Recruit>::Type Recruit; 00106 typedef Layer2Managers::TacticalActionTypes<layer2::UpgradeResearch>::Type UpgradeResearch; 00107 typedef Layer2Managers::TacticalActionTypes<layer2::TechResearch>::Type TechResearch; 00108 typedef Layer2Managers::TacticalActionTypes<layer2::Scout>::Type Scout; 00109 };