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;
   }
 }
Ejemplo n.º 2
0
        public void OnSceneGUI()
        {
            this.Initialize();
            if (this.m_Terrain.terrainData != null)
            {
                Event current = Event.current;
                this.CheckKeys();
                int controlID = GUIUtility.GetControlID(s_TerrainEditorHash, FocusType.Passive);
                switch (current.GetTypeForControl(controlID))
                {
                    case EventType.MouseDown:
                    case EventType.MouseDrag:
                        if ((GUIUtility.hotControl == 0) || (GUIUtility.hotControl == controlID))
                        {
                            if (((((current.GetTypeForControl(controlID) != EventType.MouseDrag) || (GUIUtility.hotControl == controlID)) && !Event.current.alt) && ((current.button == 0) && this.IsModificationToolActive())) && (HandleUtility.nearestControl == controlID))
                            {
                                Vector2 vector;
                                Vector3 vector2;
                                if (current.type == EventType.MouseDown)
                                {
                                    GUIUtility.hotControl = controlID;
                                }
                                if (this.Raycast(out vector, out vector2))
                                {
                                    if ((this.selectedTool == TerrainTool.SetHeight) && Event.current.shift)
                                    {
                                        this.m_TargetHeight.value = this.m_Terrain.terrainData.GetInterpolatedHeight(vector.x, vector.y) / this.m_Terrain.terrainData.size.y;
                                        InspectorWindow.RepaintAllInspectors();
                                    }
                                    else if (this.selectedTool == TerrainTool.PlaceTree)
                                    {
                                        if (current.type == EventType.MouseDown)
                                        {
                                            Undo.RegisterCompleteObjectUndo(this.m_Terrain.terrainData, "Place Tree");
                                        }
                                        if (!Event.current.shift && !Event.current.control)
                                        {
                                            TreePainter.PlaceTrees(this.m_Terrain, vector.x, vector.y);
                                        }
                                        else
                                        {
                                            TreePainter.RemoveTrees(this.m_Terrain, vector.x, vector.y, Event.current.control);
                                        }
                                    }
                                    else if (this.selectedTool == TerrainTool.PaintTexture)
                                    {
                                        if (current.type == EventType.MouseDown)
                                        {
                                            List<Object> list = new List<Object> {
                                                this.m_Terrain.terrainData
                                            };
                                            list.AddRange(this.m_Terrain.terrainData.alphamapTextures);
                                            Undo.RegisterCompleteObjectUndo(list.ToArray(), "Detail Edit");
                                        }
                                        SplatPainter painter = new SplatPainter {
                                            size = (int) this.m_Size,
                                            strength = (float) this.m_Strength,
                                            terrainData = this.m_Terrain.terrainData
                                        };
                                        painter.brush = this.GetActiveBrush(painter.size);
                                        painter.target = (float) this.m_SplatAlpha;
                                        painter.tool = this.selectedTool;
                                        this.m_Terrain.editorRenderFlags = TerrainRenderFlags.heightmap;
                                        painter.Paint(vector.x, vector.y, this.m_SelectedSplat);
                                        this.m_Terrain.terrainData.SetBasemapDirty(false);
                                    }
                                    else if (this.selectedTool == TerrainTool.PaintDetail)
                                    {
                                        if (current.type == EventType.MouseDown)
                                        {
                                            Undo.RegisterCompleteObjectUndo(this.m_Terrain.terrainData, "Detail Edit");
                                        }
                                        DetailPainter painter2 = new DetailPainter {
                                            size = (int) this.m_Size,
                                            targetStrength = this.m_DetailStrength * 16f,
                                            opacity = (float) this.m_DetailOpacity
                                        };
                                        if (Event.current.shift || Event.current.control)
                                        {
                                            painter2.targetStrength *= -1f;
                                        }
                                        painter2.clearSelectedOnly = Event.current.control;
                                        painter2.terrainData = this.m_Terrain.terrainData;
                                        painter2.brush = this.GetActiveBrush(painter2.size);
                                        painter2.tool = this.selectedTool;
                                        painter2.randomizeDetails = true;
                                        painter2.Paint(vector.x, vector.y, this.m_SelectedDetail);
                                    }
                                    else
                                    {
                                        if (current.type == EventType.MouseDown)
                                        {
                                            Undo.RegisterCompleteObjectUndo(this.m_Terrain.terrainData, "Heightmap Edit");
                                        }
                                        HeightmapPainter painter3 = new HeightmapPainter {
                                            size = (int) this.m_Size,
                                            strength = this.m_Strength * 0.01f
                                        };
                                        if (this.selectedTool == TerrainTool.SmoothHeight)
                                        {
                                            painter3.strength = (float) this.m_Strength;
                                        }
                                        painter3.terrainData = this.m_Terrain.terrainData;
                                        painter3.brush = this.GetActiveBrush((int) this.m_Size);
                                        painter3.targetHeight = (float) this.m_TargetHeight;
                                        painter3.tool = this.selectedTool;
                                        this.m_Terrain.editorRenderFlags = TerrainRenderFlags.heightmap;
                                        if ((this.selectedTool == TerrainTool.PaintHeight) && Event.current.shift)
                                        {
                                            painter3.strength = -painter3.strength;
                                        }
                                        painter3.PaintHeight(vector.x, vector.y);
                                    }
                                    current.Use();
                                }
                            }
                            break;
                        }
                        break;

                    case EventType.MouseUp:
                        if (GUIUtility.hotControl == controlID)
                        {
                            GUIUtility.hotControl = 0;
                            if (this.IsModificationToolActive())
                            {
                                if (this.selectedTool == TerrainTool.PaintTexture)
                                {
                                    this.m_Terrain.terrainData.SetBasemapDirty(true);
                                }
                                this.m_Terrain.editorRenderFlags = TerrainRenderFlags.all;
                                this.m_Terrain.ApplyDelayedHeightmapModification();
                                current.Use();
                            }
                            break;
                        }
                        break;

                    case EventType.MouseMove:
                        if (this.IsBrushPreviewVisible())
                        {
                            HandleUtility.Repaint();
                        }
                        break;

                    case EventType.Repaint:
                        this.DisableProjector();
                        break;

                    case EventType.Layout:
                        if (this.IsModificationToolActive())
                        {
                            HandleUtility.AddDefaultControl(controlID);
                            break;
                        }
                        break;
                }
            }
        }
Ejemplo n.º 3
0
		public void OnSceneGUI()
		{
			this.Initialize();
			if (!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 (current.GetTypeForControl(controlID) == EventType.MouseDrag && GUIUtility.hotControl != controlID)
				{
					return;
				}
				if (Event.current.alt)
				{
					return;
				}
				if (current.button != 0)
				{
					return;
				}
				if (!this.IsModificationToolActive())
				{
					return;
				}
				if (HandleUtility.nearestControl != controlID)
				{
					return;
				}
				if (current.type == EventType.MouseDown)
				{
					GUIUtility.hotControl = controlID;
				}
				Vector2 vector;
				Vector3 vector2;
				if (this.Raycast(out vector, out vector2))
				{
					if (this.selectedTool == TerrainTool.SetHeight && Event.current.shift)
					{
						this.m_TargetHeight.value = this.m_Terrain.terrainData.GetInterpolatedHeight(vector.x, vector.y) / this.m_Terrain.terrainData.size.y;
						InspectorWindow.RepaintAllInspectors();
					}
					else
					{
						if (this.selectedTool == TerrainTool.PlaceTree)
						{
							if (current.type == EventType.MouseDown)
							{
								Undo.RegisterCompleteObjectUndo(this.m_Terrain.terrainData, "Place Tree");
							}
							if (!Event.current.shift && !Event.current.control)
							{
								TreePainter.PlaceTrees(this.m_Terrain, vector.x, vector.y);
							}
							else
							{
								TreePainter.RemoveTrees(this.m_Terrain, vector.x, vector.y, Event.current.control);
							}
						}
						else
						{
							if (this.selectedTool == TerrainTool.PaintTexture)
							{
								if (current.type == EventType.MouseDown)
								{
									List<UnityEngine.Object> list = new List<UnityEngine.Object>();
									list.Add(this.m_Terrain.terrainData);
									list.AddRange(this.m_Terrain.terrainData.alphamapTextures);
									Undo.RegisterCompleteObjectUndo(list.ToArray(), "Detail Edit");
								}
								SplatPainter splatPainter = new SplatPainter();
								splatPainter.size = this.m_Size;
								splatPainter.strength = this.m_Strength;
								splatPainter.terrainData = this.m_Terrain.terrainData;
								splatPainter.brush = this.GetActiveBrush(splatPainter.size);
								splatPainter.target = this.m_SplatAlpha;
								splatPainter.tool = this.selectedTool;
								this.m_Terrain.editorRenderFlags = TerrainRenderFlags.heightmap;
								splatPainter.Paint(vector.x, vector.y, this.m_SelectedSplat);
								this.m_Terrain.terrainData.SetBasemapDirty(false);
							}
							else
							{
								if (this.selectedTool == TerrainTool.PaintDetail)
								{
									if (current.type == EventType.MouseDown)
									{
										Undo.RegisterCompleteObjectUndo(this.m_Terrain.terrainData, "Detail Edit");
									}
									DetailPainter detailPainter = new DetailPainter();
									detailPainter.size = this.m_Size;
									detailPainter.targetStrength = this.m_DetailStrength * 16f;
									detailPainter.opacity = 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(vector.x, vector.y, this.m_SelectedDetail);
								}
								else
								{
									if (current.type == EventType.MouseDown)
									{
										Undo.RegisterCompleteObjectUndo(this.m_Terrain.terrainData, "Heightmap Edit");
									}
									HeightmapPainter heightmapPainter = new HeightmapPainter();
									heightmapPainter.size = this.m_Size;
									heightmapPainter.strength = this.m_Strength * 0.01f;
									if (this.selectedTool == TerrainTool.SmoothHeight)
									{
										heightmapPainter.strength = this.m_Strength;
									}
									heightmapPainter.terrainData = this.m_Terrain.terrainData;
									heightmapPainter.brush = this.GetActiveBrush(this.m_Size);
									heightmapPainter.targetHeight = 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(vector.x, vector.y);
								}
							}
						}
					}
				}
				current.Use();
				break;
			}
			case EventType.MouseUp:
				if (GUIUtility.hotControl != controlID)
				{
					return;
				}
				GUIUtility.hotControl = 0;
				if (!this.IsModificationToolActive())
				{
					return;
				}
				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())
				{
					HandleUtility.Repaint();
				}
				break;
			case EventType.Repaint:
				this.DisableProjector();
				break;
			case EventType.Layout:
				if (!this.IsModificationToolActive())
				{
					return;
				}
				HandleUtility.AddDefaultControl(controlID);
				break;
			}
		}