Пример #1
0
        /// <summary>
        /// Get max density on area
        /// </summary>
        /// <returns></returns>
        public byte GetMaxDensityOnArea(int prototypeIndex)
        {
            ReadDensityInformation densityInformation = GetDensity(prototypeIndex);

            if (densityInformation == null)
            {
                return(0);
            }

            if (densityInformation.isDirty)
            {
                var grassMap = manager.grassMaps[FoliageDB.sortedPrototypes[prototypeIndex]];

                densityInformation.maxDensity = 0;
                byte currentDensity = 0;

                int posX = manager.TransformCord(position.x, 0);
                int posZ = manager.TransformCord(position.y, 0);

                int sizeX = manager.TransformCord(size.x, 0);
                int sizeZ = manager.TransformCord(size.y, 0);

                var mapPixels = grassMap.mapPixels;
                var mapWidth  = grassMap.mapWidth;

                for (int x = posX; x < posX + sizeX; x++)
                {
                    for (int z = posZ; z < posZ + sizeZ; z++)
                    {
                        currentDensity = mapPixels[x + z * mapWidth].b;

                        if (currentDensity > densityInformation.maxDensity)
                        {
                            densityInformation.maxDensity = currentDensity;
                        }
                    }
                }

                densityInformation.isDirty = false;
            }

            return(densityInformation.maxDensity);
        }
Пример #2
0
        /// <summary>
        /// Called when a new prototype has been created -> called from FoliageDB
        /// </summary>
        /// <param name="id"></param>
        internal static void OnPrototypeCreated(int id)
        {
            if (FoliageCore_MainManager.instance == null)
            {
                return;
            }

            var chunks = FoliageCore_MainManager.instance.sector.foliageChunks;
            FoliageCore_Chunk      chunk;
            ReadDensityInformation densityInformation;

            FoliageManagerInstance mInstance;
            FoliageChunk           mChunk;

            for (int i = 0; i < chunks.Count; i++)
            {
                chunk = chunks[i];

                if (chunk.isFoliageInstanceAttached)
                {
                    mInstance = chunk.GetOrCreateFoliageManagerInstance();

                    for (int b = 0; b < mInstance.sector.FoliageChunks.Count; b++)
                    {
                        mChunk = mInstance.sector.FoliageChunks[b];

                        if (mChunk.maxDensities == null)
                        {
                            return;
                        }

                        densityInformation = new ReadDensityInformation();

                        if (!mChunk.maxDensities.ContainsKey(id))
                        {
                            mChunk.maxDensities.Add(id, densityInformation);
                        }
                    }
                }
            }
        }