Esempio n. 1
0
    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);
            }
        }
    }
Esempio n. 2
0
    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);
        }
    }
Esempio n. 3
0
 public void ClearResults()
 {
     for (int i = results.Count - 1; i >= 0; i--)
     {
         P3D_Result.Despawn(results[i]);
     }
     results.Clear();
     potentials.Clear();
 }
Esempio n. 4
0
 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);
     }
 }
Esempio n. 5
0
    // 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);
    }
Esempio n. 6
0
    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);
    }
Esempio n. 7
0
    // 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);
    }
Esempio n. 8
0
    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);
    }
Esempio n. 9
0
    // 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;
            }
        }
    }
Esempio n. 10
0
    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);
    }
Esempio n. 11
0
 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);
         }
     }
 }
Esempio n. 12
0
 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));
             }
         }
     }
 }
Esempio n. 13
0
    // 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));
                }
            }
        }
    }
Esempio n. 14
0
    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);
    }
Esempio n. 15
0
    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);
                }
            }
        }
    }
Esempio n. 16
0
 public bool Paint(P3D_Brush brush, P3D_Result result, P3D_CoordType coord = 0) =>
 (result != null) && this.Paint(brush, result.GetUV(coord));
Esempio n. 17
0
    public static P3D_Result Despawn(P3D_Result result)
    {
        pool.Add(result);

        return(null);
    }