public override void OnSceneGUI(Terrain terrain, IOnSceneGUI editContext) { TerrainPaintUtilityEditor.ShowDefaultPreviewBrush( terrain, editContext.brushTexture, editContext.brushSize); }
public override void OnSceneGUI(Terrain terrain, IOnSceneGUI editContext) { if (Event.current.shift) { SampleTerrain(terrain, editContext); } if (Event.current.type == EventType.MouseUp && Event.current.button == 0) { disablePaint = false; drawLine = false; } TerrainPaintUtilityEditor.ShowDefaultPreviewBrush(terrain, editContext.brushTexture, editContext.brushSize); }
public override void OnSceneGUI(Terrain terrain, IOnSceneGUI editContext) { TerrainPaintUtilityEditor.ShowDefaultPreviewBrush(terrain, editContext.brushTexture, editContext.brushStrength * 0.01f, editContext.brushSize, m_StampHeight); }
public override void OnSceneGUI(Terrain terrain, IOnSceneGUI editContext) { TerrainPaintUtilityEditor.ShowDefaultPreviewBrush(terrain, editContext.brushTexture, editContext.brushStrength, editContext.brushSize, 0.0f); bool drawCloneBrush = true; // on mouse up if (Event.current.type == EventType.MouseUp) { m_ActivePaint = false; if (!m_Aligned) { m_Sample.m_UV = m_SnapbackCache.m_UV; m_Sample.m_Terrain = m_SnapbackCache.m_Terrain; m_Sample.m_Position = m_SnapbackCache.m_Position; } } // on mouse move if (Event.current.type == EventType.MouseMove || Event.current.type == EventType.MouseDrag) { if (m_Aligned && m_PaintedOnce) { RaycastHit hit; Ray mouseRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); terrain.GetComponent <Collider>().Raycast(mouseRay, out hit, Mathf.Infinity); // check for moving across tiles if (terrain != m_LastPaintLocation.m_Terrain && m_LastPaintLocation.m_Terrain != null) { UpdateLastPosition(hit, terrain); } if (m_Sample.m_Terrain != null) { PositionCloneBrush(hit); } // capture last (current) location for next frame m_LastPaintLocation.m_UV = hit.textureCoord; m_LastPaintLocation.m_Position = hit.point; m_LastPaintLocation.m_Terrain = terrain; } if (m_Aligned && !m_PaintedOnce) { drawCloneBrush = false; // dont draw if we havent selected where to paint yet when aligned } } // draw the clone brush preview if (m_Sample.m_Terrain != null && drawCloneBrush) { Rect sampleRect = TerrainPaintUtility.CalculateBrushRectInTerrainUnits(m_Sample.m_Terrain, m_Sample.m_UV, editContext.brushSize); TerrainPaintUtility.PaintContext ctx = TerrainPaintUtility.BeginPaintHeightmap(m_Sample.m_Terrain, sampleRect); FilterMode prevCtxFilterMode = ctx.sourceRenderTexture.filterMode; FilterMode prevBrushTextureFilterMode = editContext.brushTexture.filterMode; ctx.sourceRenderTexture.filterMode = FilterMode.Bilinear; editContext.brushTexture.filterMode = FilterMode.Bilinear; Vector2 topLeft = ctx.brushRect.min; float xfrac = ((topLeft.x - (int)topLeft.x) / (float)ctx.sourceRenderTexture.width); float yfrac = ((topLeft.y - (int)topLeft.y) / (float)ctx.sourceRenderTexture.height); Vector4 texScaleOffset = new Vector4(0.5f, 0.5f, 0.5f + xfrac + 0.5f / (float)ctx.sourceRenderTexture.width, 0.5f + yfrac + 0.5f / (float)ctx.sourceRenderTexture.height); RaycastHit hit = new RaycastHit(); hit.point = m_Sample.m_Position; TerrainPaintUtilityEditor.DrawDefaultBrushPreviewMesh(m_Sample.m_Terrain, hit, ctx.sourceRenderTexture, editContext.brushTexture, 0.0001f, editContext.brushSize, TerrainPaintUtilityEditor.defaultPreviewPatchMesh, true, texScaleOffset); ctx.sourceRenderTexture.filterMode = prevCtxFilterMode; editContext.brushTexture.filterMode = prevBrushTextureFilterMode; TerrainPaintUtility.ReleaseContextResources(ctx); } }