// UnitType constructor ActionTypeData::ActionTypeData(BWAPI::UnitType t, const ActionID id) : type (UnitType) , unit (t) , raceID (GetRaceID(t.getRace())) , actionID (id) , mineralPriceVal (t.mineralPrice() * Constants::RESOURCE_SCALE) , gasPriceVal (t.gasPrice() * Constants::RESOURCE_SCALE) , supplyRequiredVal (t.supplyRequired()) , supplyProvidedVal (t.supplyProvided()) , buildTimeVal (t.buildTime()) , numberProduced (1) , name (t.getName()) , metaName (t.getName()) , building (t.isBuilding()) , worker (t.isWorker()) , refinery (t.isRefinery()) , resourceDepot (t.isResourceDepot()) , supplyProvider (t.supplyProvided() > 0 && !t.isResourceDepot()) , canProduceBool (t.isBuilding() && t.canProduce()) , canAttackBool (t.canAttack()) , whatBuildsUnitType (t.whatBuilds().first) , addon (t.isAddon()) , morphed (false) , reqAddon (false) , reqAddonID (0) { if (t == BWAPI::UnitTypes::Zerg_Zergling || t == BWAPI::UnitTypes::Zerg_Scourge) { numberProduced = 2; } if (t == BWAPI::UnitTypes::Zerg_Lair || t == BWAPI::UnitTypes::Zerg_Hive || t == BWAPI::UnitTypes::Zerg_Greater_Spire || t == BWAPI::UnitTypes::Zerg_Lurker || t == BWAPI::UnitTypes::Zerg_Guardian || t == BWAPI::UnitTypes::Zerg_Sunken_Colony || t == BWAPI::UnitTypes::Zerg_Spore_Colony) { morphed = true; } setShortName(); }
void MeuAgentePrincipal::UnidadeCriada(Unidade* unidade){ //Uma nova unidade sua foi criada (isto inclui as do inicio da partida). Implemente aqui como quer tratar ela. BWAPI::UnitType tipo = unidade->getType(); if(tipo == BWAPI::UnitTypes::Protoss_Nexus){ Protoss_Nexus = unidade; base = Protoss_Nexus->getPosition(); int halfWidth = (AgentePrincipal::mapWidth()*16); int halfHeight = (AgentePrincipal::mapHeight()*16); centro = BWAPI::Position(halfWidth, halfHeight); CreateThread(NULL,0,general_recursos,NULL,0,NULL); CreateThread(NULL,0,general_militar,NULL,0,NULL); } else if(tipo == BWAPI::UnitTypes::Protoss_Gateway){ Protoss_Gateways[numGateways] = unidade; numGateways = numGateways+1; All_Unities.insert(unidade); }else if(tipo == BWAPI::UnitTypes::Protoss_Pylon){ Protoss_Pylons[numPylons] = unidade; numPylons = numPylons+1; All_Unities.insert(unidade); }else if(tipo == BWAPI::UnitTypes::Protoss_Zealot){ zealots.insert(unidade); } //Nao desperdicar threads com predios que nao fazem nada else if(!tipo.canProduce()){ if(tipo == BWAPI::UnitTypes::Protoss_Probe){ if(!hasScout) { hasScout = true; scout = unidade; }else{ All_Unities.insert(unidade); } } CreateThread(NULL,0,threadAgente,(void*)unidade,0,NULL); } }