BWAPI
|
00001 #include "Skynet.h" 00002 00003 #include <iostream> 00004 00005 #include "DrawBuffer.h" 00006 #include "TerrainAnaysis.h" 00007 #include "UnitTracker.h" 00008 #include "BaseTracker.h" 00009 #include "BuildingPlacer.h" 00010 #include "TaskManager.h" 00011 #include "ResourceTracker.h" 00012 #include "ResourceManager.h" 00013 #include "TrainTask.h" 00014 #include "ConstructionTask.h" 00015 #include "MorphTask.h" 00016 #include "WallTracker.h" 00017 #include "BuildOrderManager.h" 00018 #include "PlayerTracker.h" 00019 #include "BorderTracker.h" 00020 #include "ScoutManager.h" 00021 #include "SupplyManager.h" 00022 #include "MacroManager.h" 00023 #include "ExpansionManager.h" 00024 #include "UnitInformation.h" 00025 #include "UnitHelper.h" 00026 #include "LatencyTracker.h" 00027 #include "PylonPowerTracker.h" 00028 #include "MapHelper.h" 00029 #include "PathFinder.h" 00030 #include "Logger.h" 00031 #include "GameProgressDetection.h" 00032 #include "AOEThreatTracker.h" 00033 #include "SquadManager.h" 00034 #include "BlockedPathManager.h" 00035 00036 Skynet::Skynet() 00037 : mOnBegin(false) 00038 , mLeavingGame(0) 00039 , mSaidGG(false) 00040 { 00041 } 00042 00043 void Skynet::onStart() 00044 { 00045 BWAPI::Broodwar->sendText("Skynet 2.0 Operational"); 00046 00047 BWAPI::Broodwar->setLatCom(false); 00048 BWAPI::Broodwar->setCommandOptimizationLevel(1); 00049 00050 if(BWAPI::Broodwar->self()->getRace() != BWAPI::Races::Protoss) 00051 BWAPI::Broodwar->sendText("Skynet is a Protoss only bot"); 00052 } 00053 00054 void Skynet::onEnd(bool isWinner) 00055 { 00056 } 00057 00058 void Skynet::onFrame() 00059 { 00060 for each(BWAPI::Event BWAPIEvent in BWAPI::Broodwar->getEvents()) 00061 { 00062 if(BWAPIEvent.type == BWAPI::EventType::UnitDiscover) 00063 UnitTracker::Instance().onUnitDiscover(BWAPIEvent.unit); 00064 } 00065 for each(BWAPI::Event BWAPIEvent in BWAPI::Broodwar->getEvents()) 00066 { 00067 if(BWAPIEvent.type == BWAPI::EventType::UnitDestroy) 00068 UnitTracker::Instance().onUnitDestroy(BWAPIEvent.unit); 00069 } 00070 00071 if(!mOnBegin) 00072 { 00073 mOnBegin = true; 00074 WallTracker::Instance().onBegin(); 00075 PlayerTracker::Instance().onBegin(); 00076 TerrainAnaysis::Instance().analyseBasesAndTerrain(); 00077 BorderTracker::Instance().onBegin(); 00078 UnitTracker::Instance().pumpUnitEvents(); 00079 ScoutManager::Instance().onBegin(); 00080 MacroManager::Instance().onBegin(); 00081 00082 BuildOrderManager::Instance().onBegin(); 00083 00084 BlockedPathManager::Instance().onBegin(); 00085 } 00086 00087 UnitTracker::Instance().update(); 00088 00089 AOEThreatTracker::Instance().update(); 00090 00091 BlockedPathManager::Instance().update(); 00092 PylonPowerTracker::Instance().update(); 00093 UnitInformation::Instance().update(); 00094 BorderTracker::Instance().update(); 00095 PlayerTracker::Instance().update(); 00096 BaseTracker::Instance().update(); 00097 BuildingPlacer::Instance().update(); 00098 ResourceManager::Instance().update(); 00099 SupplyManager::Instance().update(); 00100 MacroManager::Instance().update(); 00101 ExpansionManager::Instance().update(); 00102 LatencyTracker::Instance().update(); 00103 GameProgressDetection::Instance().update(); 00104 00105 BuildOrderManager::Instance().update(); 00106 ScoutManager::Instance().update(); 00107 SquadManager::Instance().update(); 00108 00109 TaskManager::Instance().update(); 00110 00111 DrawBuffer::Instance().update(); 00112 00113 if(GameProgressDetection::Instance().shouldGG()) 00114 { 00115 if(mLeavingGame == 0) 00116 mLeavingGame = BWAPI::Broodwar->getFrameCount(); 00117 } 00118 else 00119 mLeavingGame = 0; 00120 00121 if(mLeavingGame != 0) 00122 { 00123 if(BWAPI::Broodwar->getFrameCount() - mLeavingGame > 24 && !mSaidGG) 00124 { 00125 mSaidGG = true; 00126 BWAPI::Broodwar->sendText("gg"); 00127 } 00128 else if(BWAPI::Broodwar->getFrameCount() - mLeavingGame > 80) 00129 BWAPI::Broodwar->leaveGame(); 00130 } 00131 } 00132 00133 void Skynet::onSendText(std::string text) 00134 { 00135 BWAPI::Broodwar->sendText(text.c_str()); 00136 } 00137 00138 void Skynet::onPlayerLeft(Player player) 00139 { 00140 PlayerTracker::Instance().onPlayerLeft(player); 00141 }