public static void ScenePaintBetweenNearest(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int layerMask = -1, int groupMask = -1) { float num = Vector3.Distance(startPosition, endPosition); if (num != 0f) { P3D_Paintable paintable = null; P3D_Result result = null; for (int i = AllPaintables.Count - 1; i >= 0; i--) { P3D_Paintable paintable2 = AllPaintables[i]; if (P3D_Helper.IndexInMask(paintable2.gameObject.layer, layerMask)) { P3D_Tree tree = paintable2.GetTree(); if (tree != null) { Transform transform = paintable2.transform; Vector3 startPoint = transform.InverseTransformPoint(startPosition); P3D_Result result2 = tree.FindBetweenNearest(startPoint, startPoint + ((transform.InverseTransformPoint(endPosition) - startPoint).normalized * num)); if (result2 != null) { paintable = paintable2; result = result2; num *= result2.Distance01; } } } } if ((paintable != null) && (result != null)) { paintable.Paint(brush, result, groupMask); } } }
public static void ScenePaintPerpedicularNearest(P3D_Brush brush, Vector3 position, float maxDistance, int layerMask = -1, int groupMask = -1) { P3D_Paintable paintable = null; P3D_Result result = null; for (int i = AllPaintables.Count - 1; i >= 0; i--) { P3D_Paintable paintable2 = AllPaintables[i]; if (P3D_Helper.IndexInMask(paintable2.gameObject.layer, layerMask)) { P3D_Tree tree = paintable2.GetTree(); if (tree != null) { Transform transform = paintable2.transform; if (P3D_Helper.GetUniformScale(transform) != 0f) { P3D_Result result2 = tree.FindPerpendicularNearest(transform.InverseTransformPoint(position), maxDistance); if (result2 != null) { paintable = paintable2; result = result2; maxDistance *= result2.Distance01; } } } } } if (paintable != null) { paintable.Paint(brush, result, groupMask); } }
public void ClearResults() { for (int i = results.Count - 1; i >= 0; i--) { P3D_Result.Despawn(results[i]); } results.Clear(); potentials.Clear(); }
public void PaintBetweenNearest(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int groupMask = -1) { if (this.CheckTree()) { Vector3 startPoint = base.transform.InverseTransformPoint(startPosition); P3D_Result result = this.tree.FindBetweenNearest(startPoint, base.transform.InverseTransformPoint(endPosition)); this.Paint(brush, result, groupMask); } }
// This causes the current paint operation to get applied to the specified result public bool Paint(P3D_Brush brush, P3D_Result result, P3D_CoordType coord = P3D_CoordType.UV1) { if (result != null) { return(Paint(brush, result.GetUV(coord))); } return(false); }
private void AddToResults(P3D_Triangle triangle, Vector3 weights, float distance01) { P3D_Result item = P3D_Result.Spawn(); item.Triangle = triangle; item.Weights = weights; item.Distance01 = distance01; results.Add(item); }
// This adds a triangle result to the results list private void AddToResults(P3D_Triangle triangle, Vector3 weights, float distance01) { var result = P3D_Result.Spawn(); result.Triangle = triangle; result.Weights = weights; result.Distance01 = distance01; results.Add(result); }
private void ShowBrushPreview(P3D_Result result) { var width = currentTexture.width; var height = currentTexture.height; var uv = result.GetUV(P3D_CoordType.UV1); var xy = P3D_Helper.CalculatePixelFromCoord(uv, CurrentTiling, CurrentOffset, width, height); var matrix = P3D_Helper.CreateMatrix(xy + new Vector2(0.01f, 0.01f), currentBrush.Size * 0.999f, currentBrush.Angle).Inverse; var resolution = new Vector2(width, height); P3D_BrushPreview.Show(lockedMesh, currentMaterialIndex, lockedGameObject.transform, previewBrushOpacity, matrix, resolution, currentBrush.Shape, CurrentTiling, CurrentOffset); }
// This causes the current paint operation to get applied to the specified result public void Paint(P3D_Result result, P3D_CoordType coord = P3D_CoordType.UV1) { if (result != null) { switch (coord) { case P3D_CoordType.UV1: Paint(result.UV1); break; case P3D_CoordType.UV2: Paint(result.UV2); break; } } }
public static P3D_Result Spawn() { if (pool.Count <= 0) { return(new P3D_Result()); } int index = pool.Count - 1; P3D_Result result = pool[index]; pool.RemoveAt(index); return(result); }
public void PaintPerpendicularNearest(P3D_Brush brush, Vector3 position, float maxDistance, int groupMask = -1) { if (this.CheckTree()) { float uniformScale = P3D_Helper.GetUniformScale(base.transform); if (uniformScale != 0f) { Vector3 point = base.transform.InverseTransformPoint(position); P3D_Result result = this.tree.FindPerpendicularNearest(point, maxDistance / uniformScale); this.Paint(brush, result, groupMask); } } }
public void Paint(P3D_Brush brush, P3D_Result result, int groupMask = -1) { if ((result != null) && (this.Textures != null)) { for (int i = this.Textures.Count - 1; i >= 0; i--) { P3D_PaintableTexture texture = this.Textures[i]; if ((texture != null) && P3D_Helper.IndexInMask((int)texture.Group, groupMask)) { texture.Paint(brush, result.GetUV(texture.Coord)); } } } }
// This will paint the current paintable at the result with the specified coord public void Paint(P3D_Brush brush, P3D_Result result, int groupMask = -1) { if (Textures != null) { for (var i = Textures.Count - 1; i >= 0; i--) { var texture = Textures[i]; if (texture != null && P3D_Helper.IndexInMask(texture.Group, groupMask)) { texture.Paint(brush, result.GetUV(texture.Coord)); } } } }
public static Vector2 GetUV(P3D_Result result, P3D_CoordType coord) { var uv = default(Vector2); if (result != null) { switch (coord) { case P3D_CoordType.UV1: uv = result.UV1; break; case P3D_CoordType.UV2: uv = result.UV2; break; } } return(uv); }
public static void ScenePaintBetweenNearestRaycast(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int layerMask = -1, int groupMask = -1) { float maxDistance = Vector3.Distance(startPosition, endPosition); if (maxDistance != 0f) { P3D_Paintable component = null; RaycastHit hitInfo = new RaycastHit(); P3D_Result result = null; if (Physics.Raycast(startPosition, endPosition - startPosition, out hitInfo, maxDistance, layerMask)) { component = hitInfo.collider.GetComponent <P3D_Paintable>(); maxDistance = hitInfo.distance; } for (int i = AllPaintables.Count - 1; i >= 0; i--) { P3D_Paintable paintable2 = AllPaintables[i]; if (P3D_Helper.IndexInMask(paintable2.gameObject.layer, layerMask)) { P3D_Tree tree = paintable2.GetTree(); if (tree != null) { Transform transform = paintable2.transform; Vector3 startPoint = transform.InverseTransformPoint(startPosition); P3D_Result result2 = tree.FindBetweenNearest(startPoint, startPoint + ((transform.InverseTransformPoint(endPosition) - startPoint).normalized * maxDistance)); if (result2 != null) { component = paintable2; result = result2; maxDistance *= result2.Distance01; } } } } if (component != null) { if (result != null) { component.Paint(brush, result, groupMask); } else { component.Paint(brush, hitInfo, groupMask); } } } }
public bool Paint(P3D_Brush brush, P3D_Result result, P3D_CoordType coord = 0) => (result != null) && this.Paint(brush, result.GetUV(coord));
public static P3D_Result Despawn(P3D_Result result) { pool.Add(result); return(null); }