Esempio n. 1
0
    private GridSpline MakeBranch(List <Vector2> points)
    {
        GameObject newBranch = Instantiate(branch, gameObject.transform.position, Quaternion.identity);

        newBranch.transform.parent = gameObject.transform;
        GridSpline gridSpline = (GridSpline)newBranch.GetComponent <GridSpline> ();

        gridSpline.gridSpacing = gridSpacing;

        MeshRenderer renderer = newBranch.GetComponent <MeshRenderer> ();

        renderer.material = colorMaterials [(int)color];

        gridSpline.Reshape(points);

        float baseDepth = 0;
        int   baseX     = (int)points [1].x;
        int   baseY     = (int)points [1].y;

        if (IsValidCoord(baseX, baseY) && pointsToBranches [baseX, baseY] != null)
        {
            GridSpline baseBranch = pointsToBranches [baseX, baseY];
            int        i          = gridSpline.splinePositions.Count - 1;
            while (i > 0 && !ApproxContains(baseBranch.splinePositions, gridSpline.splinePositions[i]))
            {
                i--;
            }
            Vector2 intersectionPoint = gridSpline.splinePositions [i];
            float   offseted          = 0;
            if (i == 0)
            {
                i        = 1;
                offseted = gridSpline.turnRadius;
                Vector2 offset = (points [1] - points [0]) * gridSpline.turnRadius;
                intersectionPoint = gridSpline.splinePositions [1] - offset;
                if (!ApproxContains(baseBranch.splinePositions, intersectionPoint))
                {
                    offseted          = -1 * gridSpline.turnRadius;
                    intersectionPoint = gridSpline.splinePositions [1] + offset;
                }
            }
            int   j     = ApproxIndexOf(baseBranch.splinePositions, intersectionPoint);
            float depth = baseBranch.cumulativeLengths [j] - gridSpline.cumulativeLengths [i] + offseted;
            baseDepth = depth + branchesToDepths [baseBranch];
        }
        branchesToDepths [gridSpline] = baseDepth;

        foreach (Vector2 point in points)
        {
            int x = (int)point.x;
            int y = (int)point.y;
            if (IsValidCoord(x, y) && pointsToBranches [x, y] == null)
            {
                pointsToBranches [x, y] = gridSpline;
            }
        }

        return(gridSpline);
    }
Esempio n. 2
0
    private void AddToBranch(GridSpline branch, Vector2 point)
    {
        int x = (int)point.x;
        int y = (int)point.y;

        branch.currentPoints.Add(point);
        branch.Reshape(branch.currentPoints);
        pointsToBranches [x, y] = branch;
    }