/// <summary> /// Find all assemblers on-grid which are enabled and pulling from conveyors. /// </summary> public float GetTotalParticipatingAssemblerSpeed(IMyGridTerminalSystem gts) { // ASSUMPTION: Only assembler type in the game has a base speed of 1. const float assemblerSpeed = 1; var blocks = new List <IMyAssembler>(); gts.GetBlocksOfType(blocks); var totalSpeed = 0f; for (var i = 0; i < blocks.Count; i++) { var assembler = blocks[i]; if (!assembler.IsOperational()) { continue; } if (!assembler.UseConveyorSystem) { continue; } totalSpeed += assemblerSpeed; var moduleBonuses = SupportUtil.ParseModuleBonuses(assembler.DetailedInfo); if (moduleBonuses.Count > 0) { var speedModifier = moduleBonuses[0] - 1; // +1 Speed per 100%. totalSpeed += speedModifier; } } return(totalSpeed); }
public static Refinery Get(IMyRefinery block, RefineryType type, double speedFactor) { var item = GetOrCreate(); item.block = block; item.refineSpeed = type.Speed; item.materialEfficiency = type.Efficiency; item.BlockDefinitionString = type.BlockDefinitionName; var moduleBonuses = SupportUtil.ParseModuleBonuses(block.DetailedInfo); if (moduleBonuses.Count > 0) { var speedModifier = moduleBonuses[0] - 1; // +1 Speed per 100%. item.refineSpeed += speedModifier; } if (moduleBonuses.Count > 1) { var efficiencyModifier = moduleBonuses[1]; item.materialEfficiency *= efficiencyModifier; } item.refineSpeed *= speedFactor; return(item); }