bool FindMaterials(BuildOrder order)
{
var buildableItem = order.BuildableItem;
var numItems = buildableItem.FixedBuildMaterials.Count;
int numFound = 0;
for (int i = 0; i < buildableItem.FixedBuildMaterials.Count; ++i)
{
var bimi = buildableItem.FixedBuildMaterials[i];
var biis = order.UserItemFilters[i];
var filter = new AndItemFilter(bimi, biis);
var ob = this.Environment.ItemTracker.GetReachableItemByDistance(this.Workbench.Location, filter, m_unreachables);
if (ob == null)
break;
ob.ReservedBy = this;
order.SourceItems[i] = ob;
numFound++;
}
if (numFound < numItems)
{
trace.TraceInformation("Failed to find materials");
for (int i = 0; i < numFound; ++i)
{
order.SourceItems[i].ReservedBy = null;
order.SourceItems[i] = null;
}
return false;
}
else
{
return true;
}
}