UnityEditor.HeightmapPainter.PaintHeight C# (CSharp) Method

PaintHeight() public method

public PaintHeight ( float xCenterNormalized, float yCenterNormalized ) : void
xCenterNormalized float
yCenterNormalized float
return void
        public void PaintHeight(float xCenterNormalized, float yCenterNormalized)
        {
            int num;
            int num2;
            if ((this.size % 2) == 0)
            {
                num = Mathf.CeilToInt(xCenterNormalized * (this.terrainData.heightmapWidth - 1));
                num2 = Mathf.CeilToInt(yCenterNormalized * (this.terrainData.heightmapHeight - 1));
            }
            else
            {
                num = Mathf.RoundToInt(xCenterNormalized * (this.terrainData.heightmapWidth - 1));
                num2 = Mathf.RoundToInt(yCenterNormalized * (this.terrainData.heightmapHeight - 1));
            }
            int num3 = this.size / 2;
            int num4 = this.size % 2;
            int xBase = Mathf.Clamp(num - num3, 0, this.terrainData.heightmapWidth - 1);
            int yBase = Mathf.Clamp(num2 - num3, 0, this.terrainData.heightmapHeight - 1);
            int num7 = Mathf.Clamp((num + num3) + num4, 0, this.terrainData.heightmapWidth);
            int num8 = Mathf.Clamp((num2 + num3) + num4, 0, this.terrainData.heightmapHeight);
            int width = num7 - xBase;
            int height = num8 - yBase;
            float[,] heights = this.terrainData.GetHeights(xBase, yBase, width, height);
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    int ix = (xBase + j) - (num - num3);
                    int iy = (yBase + i) - (num2 - num3);
                    float strengthInt = this.brush.GetStrengthInt(ix, iy);
                    float num16 = heights[i, j];
                    num16 = this.ApplyBrush(num16, strengthInt * this.strength, j + xBase, i + yBase);
                    heights[i, j] = num16;
                }
            }
            this.terrainData.SetHeightsDelayLOD(xBase, yBase, heights);
        }

Usage Example

 public void OnSceneGUI()
 {
   this.Initialize();
   if (!(bool) ((UnityEngine.Object) this.m_Terrain.terrainData))
     return;
   Event current = Event.current;
   this.CheckKeys();
   int controlId = GUIUtility.GetControlID(TerrainInspector.s_TerrainEditorHash, FocusType.Passive);
   switch (current.GetTypeForControl(controlId))
   {
     case EventType.MouseDown:
     case EventType.MouseDrag:
       if (GUIUtility.hotControl != 0 && GUIUtility.hotControl != controlId || current.GetTypeForControl(controlId) == EventType.MouseDrag && GUIUtility.hotControl != controlId || (Event.current.alt || current.button != 0 || (!this.IsModificationToolActive() || HandleUtility.nearestControl != controlId)))
         break;
       if (current.type == EventType.MouseDown)
         GUIUtility.hotControl = controlId;
       Vector2 uv;
       Vector3 pos;
       if (!this.Raycast(out uv, out pos))
         break;
       if (this.selectedTool == TerrainTool.SetHeight && Event.current.shift)
       {
         this.m_TargetHeight.value = this.m_Terrain.terrainData.GetInterpolatedHeight(uv.x, uv.y) / this.m_Terrain.terrainData.size.y;
         InspectorWindow.RepaintAllInspectors();
       }
       else if (this.selectedTool == TerrainTool.PlaceTree)
       {
         if (current.type == EventType.MouseDown)
           Undo.RegisterCompleteObjectUndo((UnityEngine.Object) this.m_Terrain.terrainData, "Place Tree");
         if (!Event.current.shift && !Event.current.control)
           TreePainter.PlaceTrees(this.m_Terrain, uv.x, uv.y);
         else
           TreePainter.RemoveTrees(this.m_Terrain, uv.x, uv.y, Event.current.control);
       }
       else if (this.selectedTool == TerrainTool.PaintTexture)
       {
         if (current.type == EventType.MouseDown)
         {
           List<UnityEngine.Object> objectList = new List<UnityEngine.Object>();
           objectList.Add((UnityEngine.Object) this.m_Terrain.terrainData);
           objectList.AddRange((IEnumerable<UnityEngine.Object>) this.m_Terrain.terrainData.alphamapTextures);
           Undo.RegisterCompleteObjectUndo(objectList.ToArray(), "Detail Edit");
         }
         SplatPainter splatPainter = new SplatPainter();
         splatPainter.size = (int) this.m_Size;
         splatPainter.strength = (float) this.m_Strength;
         splatPainter.terrainData = this.m_Terrain.terrainData;
         splatPainter.brush = this.GetActiveBrush(splatPainter.size);
         splatPainter.target = (float) this.m_SplatAlpha;
         splatPainter.tool = this.selectedTool;
         this.m_Terrain.editorRenderFlags = TerrainRenderFlags.heightmap;
         splatPainter.Paint(uv.x, uv.y, this.m_SelectedSplat);
         this.m_Terrain.terrainData.SetBasemapDirty(false);
       }
       else if (this.selectedTool == TerrainTool.PaintDetail)
       {
         if (current.type == EventType.MouseDown)
           Undo.RegisterCompleteObjectUndo((UnityEngine.Object) this.m_Terrain.terrainData, "Detail Edit");
         DetailPainter detailPainter = new DetailPainter();
         detailPainter.size = (int) this.m_Size;
         detailPainter.targetStrength = (float) this.m_DetailStrength * 16f;
         detailPainter.opacity = (float) this.m_DetailOpacity;
         if (Event.current.shift || Event.current.control)
           detailPainter.targetStrength *= -1f;
         detailPainter.clearSelectedOnly = Event.current.control;
         detailPainter.terrainData = this.m_Terrain.terrainData;
         detailPainter.brush = this.GetActiveBrush(detailPainter.size);
         detailPainter.tool = this.selectedTool;
         detailPainter.randomizeDetails = true;
         detailPainter.Paint(uv.x, uv.y, this.m_SelectedDetail);
       }
       else
       {
         if (current.type == EventType.MouseDown)
           Undo.RegisterCompleteObjectUndo((UnityEngine.Object) this.m_Terrain.terrainData, "Heightmap Edit");
         HeightmapPainter heightmapPainter = new HeightmapPainter();
         heightmapPainter.size = (int) this.m_Size;
         heightmapPainter.strength = (float) this.m_Strength * 0.01f;
         if (this.selectedTool == TerrainTool.SmoothHeight)
           heightmapPainter.strength = (float) this.m_Strength;
         heightmapPainter.terrainData = this.m_Terrain.terrainData;
         heightmapPainter.brush = this.GetActiveBrush((int) this.m_Size);
         heightmapPainter.targetHeight = (float) this.m_TargetHeight;
         heightmapPainter.tool = this.selectedTool;
         this.m_Terrain.editorRenderFlags = TerrainRenderFlags.heightmap;
         if (this.selectedTool == TerrainTool.PaintHeight && Event.current.shift)
           heightmapPainter.strength = -heightmapPainter.strength;
         heightmapPainter.PaintHeight(uv.x, uv.y);
       }
       current.Use();
       break;
     case EventType.MouseUp:
       if (GUIUtility.hotControl != controlId)
         break;
       GUIUtility.hotControl = 0;
       if (!this.IsModificationToolActive())
         break;
       if (this.selectedTool == TerrainTool.PaintTexture)
         this.m_Terrain.terrainData.SetBasemapDirty(true);
       this.m_Terrain.editorRenderFlags = TerrainRenderFlags.all;
       this.m_Terrain.ApplyDelayedHeightmapModification();
       current.Use();
       break;
     case EventType.MouseMove:
       if (!this.IsBrushPreviewVisible())
         break;
       HandleUtility.Repaint();
       break;
     case EventType.Repaint:
       this.DisableProjector();
       break;
     case EventType.Layout:
       if (!this.IsModificationToolActive())
         break;
       HandleUtility.AddDefaultControl(controlId);
       break;
   }
 }
All Usage Examples Of UnityEditor.HeightmapPainter::PaintHeight