예제 #1
0
bool UpgradesPlanner::canUpgrade(UpgradeType type, Unit* unit)
{
	//1. Check if unit is idle
	if (!unit->isIdle())
	{
		return false;
	}

	//2. Check if unit can do this upgrade
	if (!Broodwar->canUpgrade(unit, type))
	{
		return false;
	}

	//3. Check if we have enough resources
	if (!ResourceManager::getInstance()->hasResources(type))
	{
		return false;
	}
	
	//4. Check if unit is being constructed
	if (unit->isBeingConstructed())
	{
		return false;
	}

	//5. Check if some other building is already doing this upgrade
	vector<BaseAgent*> agents = AgentManager::getInstance()->getAgents();
	for (int i = 0; i < (int)agents.size(); i++)
	{
		if (agents.at(i)->getUnit()->getUpgrade().getID() == type.getID())
		{
			return false;
		}
	}

	//6. Check if we are currently upgrading it
	if (Broodwar->self()->isUpgrading(type))
	{
		return false;
	}

	//All clear. Can do the upgrade.
	return true;
}
예제 #2
0
파일: UpgradeType.cpp 프로젝트: tinco/bwapi
void init()
{
    upgradeTypeData[Terran_Infantry_Armor.getID()].set("Terran Infantry Armor", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Engineering_Bay), Races::Terran, &(UnitTypes::None), 3);
    upgradeTypeData[Terran_Vehicle_Plating.getID()].set("Terran Vehicle Plating", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3);
    upgradeTypeData[Terran_Ship_Plating.getID()].set("Terran Ship Plating", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3);
    upgradeTypeData[Zerg_Carapace.getID()].set("Zerg Carapace", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Zerg_Evolution_Chamber), Races::Zerg, &(UnitTypes::None), 3);
    upgradeTypeData[Zerg_Flyer_Carapace.getID()].set("Zerg Flyer Carapace", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Zerg_Spire), Races::Zerg, &(UnitTypes::None), 3);
    upgradeTypeData[Protoss_Armor.getID()].set("Protoss Armor", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Protoss_Forge), Races::Protoss, &(UnitTypes::None), 3);
    upgradeTypeData[Protoss_Plating.getID()].set("Protoss Plating", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Protoss_Cybernetics_Core), Races::Protoss, &(UnitTypes::None), 3);
    upgradeTypeData[Terran_Infantry_Weapons.getID()].set("Terran Infantry Weapons", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Engineering_Bay), Races::Terran, &(UnitTypes::None), 3);
    upgradeTypeData[Terran_Vehicle_Weapons.getID()].set("Terran Vehicle Weapons", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3);
    upgradeTypeData[Terran_Ship_Weapons.getID()].set("Terran Ship Weapons", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3);
    upgradeTypeData[Zerg_Melee_Attacks.getID()].set("Zerg Melee Attacks", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Zerg_Evolution_Chamber), Races::Zerg, &(UnitTypes::None), 3);
    upgradeTypeData[Zerg_Missile_Attacks.getID()].set("Zerg Missile Attacks", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Zerg_Evolution_Chamber), Races::Zerg, &(UnitTypes::None), 3);
    upgradeTypeData[Zerg_Flyer_Attacks.getID()].set("Zerg Flyer Attacks", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Zerg_Spire), Races::Zerg, &(UnitTypes::None), 3);
    upgradeTypeData[Protoss_Ground_Weapons.getID()].set("Protoss Ground Weapons", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Protoss_Forge), Races::Protoss, &(UnitTypes::None), 3);
    upgradeTypeData[Protoss_Air_Weapons.getID()].set("Protoss Air Weapons", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Protoss_Cybernetics_Core), Races::Protoss, &(UnitTypes::None), 3);
    upgradeTypeData[Protoss_Plasma_Shields.getID()].set("Protoss Plasma Shields", 200, 100, 200, 100, 4000, 480, &(UnitTypes::Protoss_Forge), Races::Protoss, &(UnitTypes::None), 3);
    upgradeTypeData[U_238_Shells.getID()].set("U-238 Shells", 150, 0, 150, 0, 1500, 0, &(UnitTypes::Terran_Academy), Races::Terran, &(UnitTypes::Terran_Marine), 1);
    upgradeTypeData[Ion_Thrusters.getID()].set("Ion Thrusters", 100, 0, 100, 0, 1500, 0, &(UnitTypes::Terran_Machine_Shop), Races::Terran, &(UnitTypes::Terran_Vulture), 1);
    upgradeTypeData[Titan_Reactor.getID()].set("Titan Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Science_Facility), Races::Terran, &(UnitTypes::Terran_Science_Vessel), 1);
    upgradeTypeData[Ocular_Implants.getID()].set("Ocular Implants", 100, 0, 100, 0, 2500, 0, &(UnitTypes::Terran_Covert_Ops), Races::Terran, &(UnitTypes::Terran_Ghost), 1);
    upgradeTypeData[Moebius_Reactor.getID()].set("Moebius Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Covert_Ops), Races::Terran, &(UnitTypes::Terran_Ghost), 1);
    upgradeTypeData[Apollo_Reactor.getID()].set("Apollo Reactor", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Terran_Control_Tower), Races::Terran, &(UnitTypes::Terran_Wraith), 1);
    upgradeTypeData[Colossus_Reactor.getID()].set("Colossus Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Physics_Lab), Races::Terran, &(UnitTypes::Terran_Battlecruiser), 1);
    upgradeTypeData[Ventral_Sacs.getID()].set("Ventral Sacs", 200, 0, 200, 0, 2400, 0, &(UnitTypes::Zerg_Lair), Races::Zerg, &(UnitTypes::Zerg_Overlord), 1);
    upgradeTypeData[Antennae.getID()].set("Antennae", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Zerg_Lair), Races::Zerg, &(UnitTypes::Zerg_Overlord), 1);
    upgradeTypeData[Pneumatized_Carapace.getID()].set("Pneumatized Carapace", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Zerg_Lair), Races::Zerg, &(UnitTypes::Zerg_Overlord), 1);
    upgradeTypeData[Metabolic_Boost.getID()].set("Metabolic Boost", 100, 0, 100, 0, 1500, 0, &(UnitTypes::Zerg_Spawning_Pool), Races::Zerg, &(UnitTypes::Zerg_Zergling), 1);
    upgradeTypeData[Adrenal_Glands.getID()].set("Adrenal Glands", 200, 0, 200, 0, 1500, 0, &(UnitTypes::Zerg_Spawning_Pool), Races::Zerg, &(UnitTypes::Zerg_Zergling), 1);
    upgradeTypeData[Muscular_Augments.getID()].set("Muscular Augments", 150, 0, 150, 0, 1500, 0, &(UnitTypes::Zerg_Hydralisk_Den), Races::Zerg, &(UnitTypes::Zerg_Hydralisk), 1);
    upgradeTypeData[Grooved_Spines.getID()].set("Grooved Spines", 150, 0, 150, 0, 1500, 0, &(UnitTypes::Zerg_Hydralisk_Den), Races::Zerg, &(UnitTypes::Zerg_Hydralisk), 1);
    upgradeTypeData[Gamete_Meiosis.getID()].set("Gamete Meiosis", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Zerg_Queens_Nest), Races::Zerg, &(UnitTypes::Zerg_Queen), 1);
    upgradeTypeData[Metasynaptic_Node.getID()].set("Metasynaptic Node", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Zerg_Defiler_Mound), Races::Zerg, &(UnitTypes::Zerg_Defiler), 1);
    upgradeTypeData[Singularity_Charge.getID()].set("Singularity Charge", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Cybernetics_Core), Races::Protoss, &(UnitTypes::Protoss_Dragoon), 1);
    upgradeTypeData[Leg_Enhancements.getID()].set("Leg Enhancements", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Protoss_Citadel_of_Adun), Races::Protoss, &(UnitTypes::Protoss_Zealot), 1);
    upgradeTypeData[Scarab_Damage.getID()].set("Scarab Damage", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Robotics_Support_Bay), Races::Protoss, &(UnitTypes::Protoss_Scarab), 1);
    upgradeTypeData[Reaver_Capacity.getID()].set("Reaver Capacity", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Robotics_Support_Bay), Races::Protoss, &(UnitTypes::Protoss_Reaver), 1);
    upgradeTypeData[Gravitic_Drive.getID()].set("Gravitic Drive", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Robotics_Support_Bay), Races::Protoss, &(UnitTypes::Protoss_Shuttle), 1);
    upgradeTypeData[Sensor_Array.getID()].set("Sensor Array", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Protoss_Observatory), Races::Protoss, &(UnitTypes::Protoss_Observer), 1);
    upgradeTypeData[Gravitic_Boosters.getID()].set("Gravitic Boosters", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Protoss_Observatory), Races::Protoss, &(UnitTypes::Protoss_Observer), 1);
    upgradeTypeData[Khaydarin_Amulet.getID()].set("Khaydarin Amulet", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Templar_Archives), Races::Protoss, &(UnitTypes::Protoss_High_Templar), 1);
    upgradeTypeData[Apial_Sensors.getID()].set("Apial Sensors", 100, 0, 100, 0, 2500, 0, &(UnitTypes::Protoss_Templar_Archives), Races::Protoss, &(UnitTypes::Protoss_Scout), 1);
    upgradeTypeData[Gravitic_Thrusters.getID()].set("Gravitic Thrusters", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Fleet_Beacon), Races::Protoss, &(UnitTypes::Protoss_Scout), 1);
    upgradeTypeData[Carrier_Capacity.getID()].set("Carrier Capacity", 100, 0, 100, 0, 1500, 0, &(UnitTypes::Protoss_Fleet_Beacon), Races::Protoss, &(UnitTypes::Protoss_Carrier), 1);
    upgradeTypeData[Khaydarin_Core.getID()].set("Khaydarin Core", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Arbiter_Tribunal), Races::Protoss, &(UnitTypes::Protoss_Arbiter), 1);
    upgradeTypeData[Argus_Jewel.getID()].set("Argus Jewel", 100, 0, 100, 0, 2500, 0, &(UnitTypes::Protoss_Fleet_Beacon), Races::Protoss, &(UnitTypes::Protoss_Corsair), 1);
    upgradeTypeData[Argus_Talisman.getID()].set("Argus Talisman", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Templar_Archives), Races::Protoss, &(UnitTypes::Protoss_Dark_Archon), 1);
    upgradeTypeData[Caduceus_Reactor.getID()].set("Caduceus Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Academy), Races::Terran, &(UnitTypes::Terran_Medic), 1);
    upgradeTypeData[Chitinous_Plating.getID()].set("Chitinous Plating", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Zerg_Ultralisk_Cavern), Races::Zerg, &(UnitTypes::Zerg_Ultralisk), 1);
    upgradeTypeData[Anabolic_Synthesis.getID()].set("Anabolic Synthesis", 200, 0, 200, 0, 2000, 0, &(UnitTypes::Zerg_Ultralisk_Cavern), Races::Zerg, &(UnitTypes::Zerg_Ultralisk), 1);
    upgradeTypeData[Charon_Booster.getID()].set("Charon Booster", 100, 0, 100, 0, 2000, 0, &(UnitTypes::Terran_Machine_Shop), Races::Terran, &(UnitTypes::Terran_Goliath), 1);
    upgradeTypeData[None.getID()].set("None", 0, 0, 0, 0, 0, 0, &(UnitTypes::None), Races::None, &(UnitTypes::None), 0);
    upgradeTypeData[Unknown.getID()].set("Unknown", 0, 0, 0, 0, 0, 0, &(UnitTypes::None), Races::Unknown, &(UnitTypes::None), 0);

    upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Firebat));
    upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Ghost));
    upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Marine));
    upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Medic));
    upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_SCV));
    upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Goliath));
    upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Siege_Mode));
    upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Tank_Mode));
    upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Vulture));
    upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Battlecruiser));
    upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Dropship));
    upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Science_Vessel));
    upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Valkyrie));
    upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Wraith));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Broodling));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Defiler));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Drone));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Hydralisk));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Infested_Terran));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Larva));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Lurker));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Ultralisk));
    upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Zergling));
    upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Devourer));
    upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Guardian));
    upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Mutalisk));
    upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Overlord));
    upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Queen));
    upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Scourge));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Archon));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Archon));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Templar));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Dragoon));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_High_Templar));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Probe));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Reaver));
    upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Zealot));
    upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter));
    upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Carrier));
    upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Corsair));
    upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Interceptor));
    upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Observer));
    upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Scout));
    upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Shuttle));
    upgradeTypeData[Terran_Infantry_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Firebat));
    upgradeTypeData[Terran_Infantry_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Ghost));
    upgradeTypeData[Terran_Infantry_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Marine));
    upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Goliath));
    upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Siege_Mode));
    upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Tank_Mode));
    upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Vulture));
    upgradeTypeData[Terran_Ship_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Battlecruiser));
    upgradeTypeData[Terran_Ship_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Valkyrie));
    upgradeTypeData[Terran_Ship_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Wraith));
    upgradeTypeData[Zerg_Melee_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Broodling));
    upgradeTypeData[Zerg_Melee_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Ultralisk));
    upgradeTypeData[Zerg_Melee_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Zergling));
    upgradeTypeData[Zerg_Missile_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Hydralisk));
    upgradeTypeData[Zerg_Missile_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Lurker));
    upgradeTypeData[Zerg_Flyer_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Devourer));
    upgradeTypeData[Zerg_Flyer_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Guardian));
    upgradeTypeData[Zerg_Flyer_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Mutalisk));
    upgradeTypeData[Protoss_Ground_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Templar));
    upgradeTypeData[Protoss_Ground_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Dragoon));
    upgradeTypeData[Protoss_Ground_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Zealot));
    upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter));
    upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Corsair));
    upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Interceptor));
    upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Scout));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter_Tribunal));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Archon));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Assimilator));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Carrier));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Citadel_of_Adun));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Corsair));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Cybernetics_Core));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Archon));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Templar));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Dragoon));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Fleet_Beacon));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Forge));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Gateway));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_High_Templar));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Interceptor));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Nexus));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Observatory));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Observer));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Photon_Cannon));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Probe));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Pylon));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Reaver));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Robotics_Facility));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Robotics_Support_Bay));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Scarab));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Scout));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Shield_Battery));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Shuttle));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Stargate));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Templar_Archives));
    upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Zealot));

    upgradeTypeSet.insert(Terran_Infantry_Armor);
    upgradeTypeSet.insert(Terran_Vehicle_Plating);
    upgradeTypeSet.insert(Terran_Ship_Plating);
    upgradeTypeSet.insert(Zerg_Carapace);
    upgradeTypeSet.insert(Zerg_Flyer_Carapace);
    upgradeTypeSet.insert(Protoss_Armor);
    upgradeTypeSet.insert(Protoss_Plating);
    upgradeTypeSet.insert(Terran_Infantry_Weapons);
    upgradeTypeSet.insert(Terran_Vehicle_Weapons);
    upgradeTypeSet.insert(Terran_Ship_Weapons);
    upgradeTypeSet.insert(Zerg_Melee_Attacks);
    upgradeTypeSet.insert(Zerg_Missile_Attacks);
    upgradeTypeSet.insert(Zerg_Flyer_Attacks);
    upgradeTypeSet.insert(Protoss_Ground_Weapons);
    upgradeTypeSet.insert(Protoss_Air_Weapons);
    upgradeTypeSet.insert(Protoss_Plasma_Shields);
    upgradeTypeSet.insert(U_238_Shells);
    upgradeTypeSet.insert(Ion_Thrusters);
    upgradeTypeSet.insert(Titan_Reactor);
    upgradeTypeSet.insert(Ocular_Implants);
    upgradeTypeSet.insert(Moebius_Reactor);
    upgradeTypeSet.insert(Apollo_Reactor);
    upgradeTypeSet.insert(Colossus_Reactor);
    upgradeTypeSet.insert(Ventral_Sacs);
    upgradeTypeSet.insert(Antennae);
    upgradeTypeSet.insert(Pneumatized_Carapace);
    upgradeTypeSet.insert(Metabolic_Boost);
    upgradeTypeSet.insert(Adrenal_Glands);
    upgradeTypeSet.insert(Muscular_Augments);
    upgradeTypeSet.insert(Grooved_Spines);
    upgradeTypeSet.insert(Gamete_Meiosis);
    upgradeTypeSet.insert(Metasynaptic_Node);
    upgradeTypeSet.insert(Singularity_Charge);
    upgradeTypeSet.insert(Leg_Enhancements);
    upgradeTypeSet.insert(Scarab_Damage);
    upgradeTypeSet.insert(Reaver_Capacity);
    upgradeTypeSet.insert(Gravitic_Drive);
    upgradeTypeSet.insert(Sensor_Array);
    upgradeTypeSet.insert(Gravitic_Boosters);
    upgradeTypeSet.insert(Khaydarin_Amulet);
    upgradeTypeSet.insert(Apial_Sensors);
    upgradeTypeSet.insert(Gravitic_Thrusters);
    upgradeTypeSet.insert(Carrier_Capacity);
    upgradeTypeSet.insert(Khaydarin_Core);
    upgradeTypeSet.insert(Argus_Jewel);
    upgradeTypeSet.insert(Argus_Talisman);
    upgradeTypeSet.insert(Caduceus_Reactor);
    upgradeTypeSet.insert(Chitinous_Plating);
    upgradeTypeSet.insert(Anabolic_Synthesis);
    upgradeTypeSet.insert(Charon_Booster);
    upgradeTypeSet.insert(None);
    upgradeTypeSet.insert(Unknown);

    for(std::set<UpgradeType>::iterator i = upgradeTypeSet.begin(); i != upgradeTypeSet.end(); i++)
    {
        upgradeTypeMap.insert(std::make_pair((*i).getName(), *i));
    }
    initializingUpgradeType = false;
}