Exemplo n.º 1
0
void CUnitHandler::UnitDestroyed(int unitID) {
	UnitCategory category = ai->ut->GetCategory(unitID);
	const UnitDef* unitDef = ai->cb->GetUnitDef(unitID);

	if (category != CAT_LAST) {
		assert(!ai->GetUnit(unitID)->isDead);
		ai->GetUnit(unitID)->isDead = true;

		AllUnitsByType[unitDef->id].remove(unitID);
		AllUnitsByCat[category].remove(unitID);
		IdleUnitRemove(unitID);
		BuildTaskRemove(unitID);

		if (category == CAT_DEFENCE) {
			ai->dm->RemoveDefense(ai->cb->GetUnitPos(unitID), unitDef);
		}
		if (category == CAT_MMAKER) {
			MMakerRemove(unitID);
		}
		if (category == CAT_FACTORY) {
			FactoryRemove(unitID);
		}

		if (category == CAT_BUILDER) {
			// remove the builder
			for (std::list<BuilderTracker*>::iterator i = BuilderTrackers.begin(); i != BuilderTrackers.end(); i++) {
				if ((*i)->builderID == unitID) {
					if ((*i)->buildTaskId)
						BuildTaskRemove(*i);
					if ((*i)->taskPlanId)
						TaskPlanRemove(*i);
					if ((*i)->factoryId)
						FactoryBuilderRemove(*i);

					BuilderTracker* builderTracker = *i;
					BuilderTrackers.erase(i);
					delete builderTracker;
					break;
				}
			}
		}

		if (category == CAT_MEX) {
			MetalExtractorRemove(unitID);
		}
		if (category == CAT_NUKE) {
			NukeSiloRemove(unitID);
		}
	}
}
Exemplo n.º 2
0
void CUnitHandler::UnitDestroyed(int unit)
{
	int category = ai->ut->GetCategory(unit);
	const UnitDef* unitDef = ai->cb->GetUnitDef(unit);
	if(category != -1){
		AllUnitsByType[unitDef->id]->remove(unit);
		AllUnitsByCat[category]->remove(unit);
		IdleUnitRemove(unit);
		BuildTaskRemove(unit);
		if(category == CAT_DEFENCE){
			ai->dm->RemoveDefense(ai->cb->GetUnitPos(unit),unitDef);
		}
		if(category == CAT_MMAKER){
			MMakerRemove(unit);
		}
		if(category == CAT_FACTORY)
		{
			FactoryRemove(unit);
		}
		
		if(category == CAT_BUILDER)
		{
			// Remove the builder
			for(list<BuilderTracker*>::iterator i = BuilderTrackers.begin(); i != BuilderTrackers.end(); i++){
				if((*i)->builderID == unit)
				{
					if((*i)->buildTaskId)
						BuildTaskRemove(*i);
					if((*i)->taskPlanId)
						TaskPlanRemove(*i);
					if((*i)->factoryId)
						FactoryBuilderRemove(*i);
					BuilderTracker* builderTracker = *i;
					BuilderTrackers.erase(i);
					delete builderTracker; // Test this
					break;
				}
			}
			
		}
	}
}