示例#1
0
        static public void setBladeToGrid(int x, int z, string setName, int bladeIndex, bool erase, bool forceErase)
        {
            int terrainToFoliageGridMultiple = (int)(BTerrainQuadNode.cMaxWidth / FoliageManager.cNumUsedXBladesPerChunk);

            if (x % terrainToFoliageGridMultiple != 0 || z % terrainToFoliageGridMultiple != 0)
            {
                return;
            }

            int setIndex = giveIndexOfSet(setName);

            int idx = x + TerrainGlobals.getTerrain().getNumXVerts() * z;


            int minQNX     = (int)(x / BTerrainQuadNode.cMaxWidth);
            int minQNZ     = (int)(z / BTerrainQuadNode.cMaxHeight);
            int numXChunks = (int)(TerrainGlobals.getTerrain().getNumXVerts() / BTerrainQuadNode.cMaxWidth);
            int qnIndex    = minQNX + numXChunks * minQNZ;
            int idex       = giveChunkWithParentIndex(qnIndex);


            if (erase)
            {
                if (mVertData.ContainsValue(idx))
                {
                    if (!forceErase)
                    {
                        FoliageVertData vRep = mVertData.GetValue(idx);
                        if (giveIndexOfSet(vRep.mFoliageSetName) != setIndex || vRep.mFoliageSetBladeIndex != bladeIndex)
                        {
                            return;
                        }
                    }

                    mVertData.SetValue(idx, new FoliageVertData()); //Default 'empty' for a jagged<T> value is the default constructor..
                    if (idex != -1)
                    {
                        mQNChunks[idex].destroyRenderVBs();
                    }
                }
            }
            else
            {
                mVertData.SetValue(idx, new FoliageVertData(setName, bladeIndex));

                if (idex == -1)//we need to add a new chunk
                {
                    idex = mQNChunks.Count;
                    addNewChunk(qnIndex);
                }
                mQNChunks[idex].bladeAdded(mFoliageSets[setIndex].mFullFileName);
            }
        }
示例#2
0
        public void createJaggedFrom(JaggedContainer <float> v)
        {
            destroyHeightOverride();
            initHeightOverride();

            long  id;
            float maskValue;

            v.ResetIterator();
            while (v.MoveNext(out id, out maskValue))
            {
                if (maskValue == cJaggedEmptyValue)
                {
                    continue;
                }

                mHeightOverride.SetValue(id, maskValue);
            }
        }
示例#3
0
        public void createJaggedScarabPassableFrom(JaggedContainer <int> v)
        {
            destroyScarabPassableOverride();
            initScarabPassableOverride();

            long id;
            int  maskValue;

            v.ResetIterator();
            while (v.MoveNext(out id, out maskValue))
            {
                if (maskValue == 0)
                {
                    continue;
                }

                mSimScarabPassableOverride.SetValue(id, maskValue);
            }
        }
示例#4
0
        public void createJaggedTileTypeFrom(JaggedContainer <int> v)
        {
            destroyTileTypeOverride();
            initTileTypeOverride();

            if (v == null)
            {
                return;
            }

            long id;
            int  maskValue;

            v.ResetIterator();
            while (v.MoveNext(out id, out maskValue))
            {
                if (maskValue == 0)
                {
                    continue;
                }

                mSimTileTypeOverride.SetValue(id, maskValue);
            }
        }
示例#5
0
        static void resampleJaggedArrayFloat(ref JaggedContainer <float> dat, int origX, int origY, int newX, int newY, float emptyVal)
        {
            float[] oldArry = new float[origX * origY];
            for (int i = 0; i < origX * origY; i++)
            {
                oldArry[i] = dat.GetValue(i);
            }

            float[] imgScaledX = new float[newX * newY];
            ImageManipulation.resizeF32Img(oldArry, imgScaledX, origX, origY, newX, newY, ImageManipulation.eFilterType.cFilter_Nearest);


            dat.Clear();
            dat.SetEmptyValue(emptyVal);
            for (int i = 0; i < newX * newY; i++)
            {
                if (imgScaledX[i] != emptyVal)
                {
                    dat.SetValue(i, imgScaledX[i]);
                }
            }
            imgScaledX = null;
            oldArry    = null;
        }