Example #1
0
 void OnTerrainChanged(TerrainChangedFlags flag)
 {
     if (flag == TerrainChangedFlags.DelayedHeightmapUpdate)
     {
         hasTerrainHeigtmapChanged = true;
         manager.TerrainHeightmapChanged(terrainIndex);
     }
 }
 public void OnTerrainChanged(TerrainChangedFlags flags)
 {
     if ((flags & TerrainChangedFlags.HeightmapResolution) != 0)
     {
         TryUpdateSettings();
         Updated?.Invoke();
     }
 }
        /**
         * TODO: Listen to all the changes and stick the grass to the terrain again based on the label. Not implemented at the
         * moment due to possibly high recomputation cost
         */
        void OnTerrainChanged(TerrainChangedFlags flags)
        {
            if ((flags & TerrainChangedFlags.Heightmap) != 0)
            {
            }

            if ((flags & TerrainChangedFlags.DelayedHeightmapUpdate) != 0)
            {
            }
        }
    void OnTerrainChanged(int f)
    {
        TerrainChangedFlags flags = (TerrainChangedFlags)f;
          if ((flags & TerrainChangedFlags.Heightmap) != 0)
          {
         sTerrainDirty = true;
          }

          if ((flags & TerrainChangedFlags.DelayedHeightmapUpdate) != 0)
          {
         sTerrainDirty = true;
          }
    }
    void OnTerrainChanged(int f)
    {
        TerrainChangedFlags flags = (TerrainChangedFlags)f;
        bool changed = ((flags & TerrainChangedFlags.Heightmap) != 0);

        if ((flags & TerrainChangedFlags.DelayedHeightmapUpdate) != 0)
        {
            changed = true;
        }

        if (changed)
        {
            Sync();
        }
    }
        void OnTerrainChanged(TerrainChangedFlags flags)
        {
            if (!terrain || !TerrainPainter.Current)
            {
                return;
            }

            if ((flags & TerrainChangedFlags.Heightmap) != 0)
            {
                if (TerrainPainter.Current.autoRepaint)
                {
                    TerrainPainter.Current.RepaintTerrain(terrain);
                }
            }
        }
Example #7
0
        /// <summary>
        /// Send an TerrainData changed event to all linked terrains.
        /// </summary>
        protected void SendUpdateEventToLinkedTerrains(TerrainChangedFlags flag)
        {
            UNTerrain[] terrains = GameObject.FindObjectsOfType <UNTerrain>();
            UNTerrain   terrain;

            for (int i = 0; i < terrains.Length; i++)
            {
                terrain = terrains[i];

                if (terrain.terrainData == this)
                {
                    terrain.SendMessage("OnTerrainChanged", (int)flag);
                }
            }
        }
        void OnTerrainChanged(TerrainChangedFlags flags)
        {
            //if ((flags & TerrainChangedFlags.Heightmap) != 0) {
            //    Debug.Log("Heightmap changes");
            //}

            //if ((flags & TerrainChangedFlags.DelayedHeightmapUpdate) != 0) {
            //    Debug.Log("Heightmap painting");
            //}

            if ((flags & TerrainChangedFlags.TreeInstances) != 0)
            {
                needRefresh = true;
                //Debug.Log("Tree changes");
            }
        }
Example #9
0
        /// <summary>
        /// On terrain changed.
        /// </summary>
        /// <param name="changedFlags"></param>
        protected virtual void OnTerrainChanged(int changedFlags)
        {
            TerrainChangedFlags flag = (TerrainChangedFlags)changedFlags;

            if (flag == TerrainChangedFlags.TreeInstances)
            {
                if (sector == null)
                {
                    GenerateSector(sectorResolution);
                }

                #if UNITY_EDITOR
                UNEditorUtility.StartSceneScrollbar("Fetching tree instances...", 1);
                #endif

                sector.FetchTreeInstances(true, () =>
                {
                    #if UNITY_EDITOR
                    UNSettings.Log("Trees Updated.");

                    UNEditorUtility.currentProgressIndex = 1;
                    #endif
                });
            }
            else if (flag == TerrainChangedFlags.TreePrototypesChanged)
            {
                CreatePool(PoolItemType);
            }
            else if (flag == TerrainChangedFlags.DelayedHeightmapUpdate)
            {
                if (FoliageCore_MainManager.instance == null || !updateGrassOnHeightsChange || !manageGrass)
                {
                    return;
                }

                TerrainData tData = terrain.terrainData;

                float[,] heights = tData.GetHeights(0, 0, tData.heightmapWidth, tData.heightmapHeight);
                bool changed = false;

                float cordX;
                float cordY;

                FoliageCore_MainManager manager = FoliageCore_MainManager.instance;

                int mChunkID;
                FoliageCore_Chunk      mChunk;
                FoliageManagerInstance mInstance;

                Vector3 position        = transform.position;
                Vector3 managerPosition = manager.transform.position;

                FoliageWorldMap worldMap;

                int transformedSize;

                for (int x = 0; x < tData.heightmapWidth; x++)
                {
                    for (int y = 0; y < tData.heightmapHeight; y++)
                    {
                        if (heights[y, x] != terrainData.multiThreaded_terrainHeights[y, x]) // change on cord.
                        {
                            changed = true;

                            cordX = ((x * tData.size.x) / tData.heightmapWidth) + position.x;
                            cordY = ((y * tData.size.z) / tData.heightmapHeight) + position.z;

                            mChunkID = manager.GetChunkID(cordX - managerPosition.x, cordY - managerPosition.z);

                            if (manager.CheckChunkInBounds(mChunkID))
                            {
                                mChunk = manager.sector.foliageChunks[mChunkID];

                                if (!mChunk.isFoliageInstanceAttached)
                                {
                                    continue;
                                }

                                mInstance = mChunk.GetOrCreateFoliageManagerInstance();

                                worldMap = mInstance.worldMap;

                                cordX = mInstance.TransformCord(cordX, mInstance.transform.position.x);
                                cordY = mInstance.TransformCord(cordY, mInstance.transform.position.z);

                                transformedSize = mInstance.TransformCord(2, 0);

                                worldMap.UpdateHeight_RANGE(cordX, cordY, transformedSize, transformedSize, false);

                                worldMap.SetPixels32Delayed();
                            }
                        }
                    }
                }

                if (changed)
                {
                    FoliageCore_MainManager.SaveDelayedMaps();
                }

                terrainData.multiThreaded_terrainHeights = heights;
            }
        }
		private void OnTerrainChanged(TerrainChangedFlags flags){}