protected IMyModule GetCellDensityFunctionFilled(BoundingBoxD bbox) { foreach (IMyAsteroidFieldDensityFunction func in m_densityFunctionsFilled) { if (func.ExistsInCell(ref bbox)) { tmpDensityFunctions.Add(func); } } if (tmpDensityFunctions.Count == 0) { return(null); } int functionsCount = tmpDensityFunctions.Count; while (functionsCount > 1) { for (int i = 0; i < functionsCount / 2; ++i) { tmpDensityFunctions[i] = new MyMax(tmpDensityFunctions[i * 2], tmpDensityFunctions[i * 2 + 1]); } if (functionsCount % 2 == 1) { tmpDensityFunctions[functionsCount - 1] = tmpDensityFunctions[functionsCount / 2]; } functionsCount = functionsCount / 2 + functionsCount % 2; } IMyModule ret = tmpDensityFunctions[0]; tmpDensityFunctions.Clear(); return(ret); }
private IMyModule CalculateCellDensityFunction(ref Vector3I cell) { List <IMyModule> densFunctions = new List <IMyModule>(); foreach (IMyAsteroidFieldDensityFunction func in m_densityFunctions) { if (func.ExistsInCell(ref cell)) { densFunctions.Add(func); } } if (densFunctions.Count == 0) { return(null); } int functionsCount = densFunctions.Count; while (functionsCount != 1) { for (int i = 0; i < functionsCount / 2; ++i) { densFunctions[i] = new MyMax(densFunctions[i * 2], densFunctions[i * 2 + 1]); } if (functionsCount % 2 == 1) { densFunctions[functionsCount - 1] = densFunctions[functionsCount / 2]; } functionsCount = functionsCount / 2 + functionsCount % 2; } return(densFunctions[0]); }