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); }
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; }