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); } }