UpgradeType UpgradeTypes::getUpgradeType(std::string name) { for ( int i = 0; i < UpgradeTypes::Enum::MAX; ++i ) { if ( name == upgradeTypeData[i].name ) return UpgradeType(i); } return UpgradeTypes::Unknown; }
//--------------------------------------------- UPDATE ----------------------------------------------------- void PlayerImpl::updateData() { self->color = index < BW::PLAYER_COUNT ? BW::BWDATA::PlayerColors[index] : Colors::Black; // Get upgrades, tech, resources if ( this->isNeutral() || index >= BW::PLAYER_COUNT || (!BroodwarImpl.isReplay() && BroodwarImpl.self()->isEnemy(this) && !BroodwarImpl.isFlagEnabled(Flag::CompleteMapInformation)) ) { self->minerals = 0; self->gas = 0; self->gatheredMinerals = 0; self->gatheredGas = 0; self->repairedMinerals = 0; self->repairedGas = 0; self->refundedMinerals = 0; self->refundedGas = 0; // Reset values MemZero(self->upgradeLevel); MemZero(self->hasResearched); MemZero(self->isUpgrading); MemZero(self->isResearching); MemZero(self->maxUpgradeLevel); MemZero(self->isResearchAvailable); MemZero(self->isUnitAvailable); if (!this->isNeutral() && index < BW::PLAYER_COUNT) { // set upgrade level for visible enemy units for(int i = 0; i < 46; ++i) { for(UnitType t : UpgradeType(i).whatUses()) { if ( self->completedUnitCount[t] > 0 ) self->upgradeLevel[i] = BW::BWDATA::UpgradeLevelSC[index][i]; } } for (int i = 46; i < BW::UPGRADE_TYPE_COUNT; ++i) { for(UnitType t : UpgradeType(i).whatUses()) { if ( self->completedUnitCount[t] > 0 ) self->upgradeLevel[i] = BW::BWDATA::UpgradeLevelBW[index][i - 46]; } } } } else { this->wasSeenByBWAPIPlayer = true; // set resources self->minerals = BW::BWDATA::PlayerResources.minerals[index]; self->gas = BW::BWDATA::PlayerResources.gas[index]; self->gatheredMinerals = BW::BWDATA::PlayerResources.cumulativeMinerals[index]; self->gatheredGas = BW::BWDATA::PlayerResources.cumulativeGas[index]; self->repairedMinerals = this->_repairedMinerals; self->repairedGas = this->_repairedGas; self->refundedMinerals = this->_refundedMinerals; self->refundedGas = this->_refundedGas; // set upgrade level for(int i = 0; i < 46; ++i) { self->upgradeLevel[i] = BW::BWDATA::UpgradeLevelSC[index][i]; self->maxUpgradeLevel[i] = BW::BWDATA::UpgradeMaxSC[index][i]; } for (int i = 46; i < BW::UPGRADE_TYPE_COUNT; ++i) { self->upgradeLevel[i] = BW::BWDATA::UpgradeLevelBW[index][i - 46]; self->maxUpgradeLevel[i] = BW::BWDATA::UpgradeMaxBW[index][i - 46]; } // set abilities researched for(int i = 0; i < 24; ++i) { self->hasResearched[i] = (TechType(i).whatResearches() == UnitTypes::None ? true : !!BW::BWDATA::TechResearchSC[index][i]); self->isResearchAvailable[i] = !!BW::BWDATA::TechAvailableSC[index][i]; } for (int i = 24; i < BW::TECH_TYPE_COUNT; ++i) { self->hasResearched[i] = (TechType(i).whatResearches() == UnitTypes::None ? true : !!BW::BWDATA::TechResearchBW[index][i - 24]); self->isResearchAvailable[i] = !!BW::BWDATA::TechAvailableBW[index][i - 24]; } // set upgrades in progress for (int i = 0; i < BW::UPGRADE_TYPE_COUNT; ++i) self->isUpgrading[i] = (BW::BWDATA::UpgradeProgress[index * 8 + i/8] & (1 << i%8)) != 0; // set research in progress for (int i = 0; i < BW::TECH_TYPE_COUNT; ++i) self->isResearching[i] = (BW::BWDATA::ResearchProgress[index * 6 + i/8] & (1 << i%8)) != 0; for (int i = 0; i < BW::UNIT_TYPE_COUNT; ++i) self->isUnitAvailable[i] = !!BW::BWDATA::UnitAvailability[index][i]; self->hasResearched[TechTypes::Enum::Nuclear_Strike] = self->isUnitAvailable[UnitTypes::Enum::Terran_Nuclear_Missile]; } // Get Scores, supply if ( (!BroodwarImpl.isReplay() && BroodwarImpl.self()->isEnemy(this) && !BroodwarImpl.isFlagEnabled(Flag::CompleteMapInformation)) || index >= BW::PLAYER_COUNT) { MemZero(self->supplyTotal); MemZero(self->supplyUsed); MemZero(self->deadUnitCount); MemZero(self->killedUnitCount); self->totalUnitScore = 0; self->totalKillScore = 0; self->totalBuildingScore = 0; self->totalRazingScore = 0; self->customScore = 0; } else { // set supply for (u8 i = 0; i < BW::RACE_COUNT; ++i) { self->supplyTotal[i] = BW::BWDATA::AllScores.supplies[i].available[index]; if (self->supplyTotal[i] > BW::BWDATA::AllScores.supplies[i].max[index]) self->supplyTotal[i] = BW::BWDATA::AllScores.supplies[i].max[index]; self->supplyUsed[i] = BW::BWDATA::AllScores.supplies[i].used[index]; } // set total unit counts for (int i = 0; i < BW::UNIT_TYPE_COUNT; ++i) { self->deadUnitCount[i] = BW::BWDATA::AllScores.unitCounts.dead[i][index]; self->killedUnitCount[i] = BW::BWDATA::AllScores.unitCounts.killed[i][index]; } // set macro dead unit counts self->deadUnitCount[UnitTypes::AllUnits] = BW::BWDATA::AllScores.allUnitsLost[index] + BW::BWDATA::AllScores.allBuildingsLost[index]; self->deadUnitCount[UnitTypes::Men] = BW::BWDATA::AllScores.allUnitsLost[index]; self->deadUnitCount[UnitTypes::Buildings] = BW::BWDATA::AllScores.allBuildingsLost[index]; self->deadUnitCount[UnitTypes::Factories] = BW::BWDATA::AllScores.allFactoriesLost[index]; // set macro kill unit counts self->killedUnitCount[UnitTypes::AllUnits] = BW::BWDATA::AllScores.allUnitsKilled[index] + BW::BWDATA::AllScores.allBuildingsRazed[index]; self->killedUnitCount[UnitTypes::Men] = BW::BWDATA::AllScores.allUnitsKilled[index]; self->killedUnitCount[UnitTypes::Buildings] = BW::BWDATA::AllScores.allBuildingsRazed[index]; self->killedUnitCount[UnitTypes::Factories] = BW::BWDATA::AllScores.allFactoriesRazed[index]; // set score counts self->totalUnitScore = BW::BWDATA::AllScores.allUnitScore[index]; self->totalKillScore = BW::BWDATA::AllScores.allKillScore[index]; self->totalBuildingScore = BW::BWDATA::AllScores.allBuildingScore[index]; self->totalRazingScore = BW::BWDATA::AllScores.allRazingScore[index]; self->customScore = BW::BWDATA::AllScores.customScore[index]; } if (index < BW::PLAYER_COUNT && (BW::BWDATA::Players[index].nType == PlayerTypes::PlayerLeft || BW::BWDATA::Players[index].nType == PlayerTypes::ComputerLeft || (BW::BWDATA::Players[index].nType == PlayerTypes::Neutral && !isNeutral()))) { self->leftGame = true; } }
//--------------------------------------------- GET UPGRADE ------------------------------------------------ UpgradeType UnitImpl::getUpgrade() const { return UpgradeType(self->upgrade); }