BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer3Tactical/Script/Layer3ScriptTypes.h
Go to the documentation of this file.
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 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines