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);
        }
Beispiel #2
0
        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]);
        }