/// <summary> /// called by ReCalcProcessor /// </summary> /// <param name="colonyEntity"></param> public static void ReCalcRefiningRate(Entity colonyEntity) { // Dictionary<Entity, int> installations = colonyEntity.GetDataBlob<ColonyInfoDB>().Installations; // Dictionary<Entity, int> Refinerys = installations.Where(kvp => kvp.Key.HasDataBlob<RefineResourcesDB>()).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); // int pointsRate = 0; // Dictionary<Guid, int> matRate = new Dictionary<Guid, int>(); // foreach (var RefineryKvp in Refinerys) // { // int points = RefineryKvp.Key.GetDataBlob<RefineResourcesDB>().RefineryPoints; // foreach (var mat in RefineryKvp.Key.GetDataBlob<RefineResourcesDB>().RefinableMatsList) // { // matRate.SafeValueAdd(mat, points * RefineryKvp.Value); // } // pointsRate += points; // } Dictionary <Guid, int> rates = new Dictionary <Guid, int>(); ComponentInstancesDB instancesDB = colonyEntity.GetDataBlob <ComponentInstancesDB>(); List <KeyValuePair <Entity, PrIwObsList <Entity> > > refineingEntities = instancesDB.SpecificInstances.GetInternalDictionary().Where(item => item.Key.HasDataBlob <RefineResourcesAtbDB>()).ToList(); foreach (var refiningComponentDesignList in refineingEntities) { RefineResourcesAtbDB refineblob = refiningComponentDesignList.Key.GetDataBlob <RefineResourcesAtbDB>(); foreach (var mineInstance in refiningComponentDesignList.Value) { //todo check if it's damaged, check if it's enabled, check if there's enough workers here to. foreach (var item in refineblob.RefinableMatsList) { rates.SafeValueAdd(item, refineblob.RefineryPoints); } } } int maxPoints = 0; foreach (int p in rates.Values) { if (p > maxPoints) { maxPoints = p; } } var refining = colonyEntity.GetDataBlob <ColonyRefiningDB>(); refining.RefiningRates = rates; refining.PointsPerTick = maxPoints; }
public RefineResourcesAtbDB(RefineResourcesAtbDB db) { RefinableMatsList = new List <Guid>(db.RefinableMatsList); RefineryPoints = db.RefineryPoints; }