public void OnConstructionComplete(Entity industryEntity, VolumeStorageDB storage, Guid productionLine, IndustryJob batchJob, IConstrucableDesign designInfo) { var industryDB = industryEntity.GetDataBlob <IndustryAbilityDB>(); ProcessedMaterialSD material = (ProcessedMaterialSD)designInfo; storage.AddCargoByUnit(material, OutputAmount); batchJob.ProductionPointsLeft = material.IndustryPointCosts; //and reset the points left for the next job in the batch. if (batchJob.NumberCompleted == batchJob.NumberOrdered) { industryDB.ProductionLines[productionLine].Jobs.Remove(batchJob); if (batchJob.Auto) { industryDB.ProductionLines[productionLine].Jobs.Add(batchJob); } } }
private void MineResources(Entity colonyEntity) { Dictionary <Guid, int> mineRates = colonyEntity.GetDataBlob <MiningDB>().MineingRate; Dictionary <Guid, MineralDepositInfo> planetMinerals = colonyEntity.GetDataBlob <ColonyInfoDB>().PlanetEntity.GetDataBlob <SystemBodyInfoDB>().Minerals; VolumeStorageDB stockpile = colonyEntity.GetDataBlob <VolumeStorageDB>(); float mineBonuses = 1;//colonyEntity.GetDataBlob<ColonyBonusesDB>().GetBonus(AbilityType.Mine); foreach (var kvp in mineRates) { ICargoable mineral = _minerals[kvp.Key]; Guid cargoTypeID = mineral.CargoTypeID; double itemMassPerUnit = mineral.MassPerUnit; double accessability = planetMinerals[kvp.Key].Accessibility; double actualRate = kvp.Value * mineBonuses * accessability; int unitsMinableThisTick = (int)Math.Min(actualRate, planetMinerals[kvp.Key].Amount); if (!stockpile.TypeStores.ContainsKey(mineral.CargoTypeID)) { var type = StaticRefLib.StaticData.CargoTypes[mineral.CargoTypeID]; string erstr = "We didn't mine a potential " + unitsMinableThisTick + " of " + mineral.Name + " because we have no way to store " + type.Name + " cargo."; StaticRefLib.EventLog.AddPlayerEntityErrorEvent(colonyEntity, erstr); continue; //can't store this mineral } var unitsMinedThisTick = stockpile.AddCargoByUnit(mineral, unitsMinableThisTick); if (unitsMinableThisTick > unitsMinedThisTick) { var dif = unitsMinableThisTick - unitsMinedThisTick; var type = StaticRefLib.StaticData.CargoTypes[mineral.CargoTypeID]; string erstr = "We didn't mine a potential " + dif + " of " + mineral.Name + " because we don't have enough space to store it."; StaticRefLib.EventLog.AddPlayerEntityErrorEvent(colonyEntity, erstr); } MineralDepositInfo mineralDeposit = planetMinerals[kvp.Key]; int newAmount = mineralDeposit.Amount -= unitsMinedThisTick; accessability = Math.Pow((float)mineralDeposit.Amount / mineralDeposit.HalfOriginalAmount, 3) * mineralDeposit.Accessibility; double newAccess = GMath.Clamp(accessability, 0.1, mineralDeposit.Accessibility); mineralDeposit.Amount = newAmount; mineralDeposit.Accessibility = newAccess; } }