private Vector2[] GetPoints(bool isCeiling, params TerrainGenerator.TerrainPoint[] terrainPoints) { int index = 0; var startPoint = terrainPoints[index++]; var endPoint = terrainPoints[index++]; var nextPoint = terrainPoints[index++]; float baseY = isCeiling ? ceilingY : floorY; // Create rasterized points. var points = new Vector2[4 + this.smoothingPoints]; index = 0; // Create flat edge at the base. points[index].x = endPoint.x; points[index++].y = baseY; points[index].x = startPoint.x; points[index++].y = baseY; // Go up to the start point. points[index].x = startPoint.x; points[index++].y = startPoint.GetY(isCeiling); // Create spline Vector2 p1 = new Vector2(startPoint.x, startPoint.GetY(isCeiling)); Vector2 p2 = new Vector2(endPoint.x, endPoint.GetY(isCeiling)); Vector2 p3 = new Vector2(nextPoint.x, nextPoint.GetY(isCeiling)); Vector2[] splinePoints = { p1, p2, p3 }; if (this.s == null) { Debug.Log("ONCE?"); this.s = new Spline.ContinuousSpline(splinePoints); } else { s.AddControlPoints(splinePoints); } // Calculate delta float delta = (endPoint.x - startPoint.x) / (smoothingPoints + 1f); float currX = startPoint.x; // Get smoothing points Y for (int i = 0; i < this.smoothingPoints; i++) { currX += delta; points [index].x = currX; points [index++].y = s.Value(currX); } // Finish with the end point. points[index].x = endPoint.x; points[index++].y = endPoint.GetY(isCeiling); return(points); }
private Vector2[] GetPoints(bool isCeiling, params TerrainGenerator.TerrainPoint[] terrainPoints) { int index = 0; var startPoint = terrainPoints[index++]; var endPoint = terrainPoints[index++]; var nextPoint = terrainPoints[index++]; float baseY = isCeiling ? ceilingY : floorY; // Create rasterized points. //var points = new Vector2[13]; var points = new Vector2[60]; index = 0; // Create flat edge at the base. points[index].x = endPoint.x; points[index++].y = baseY; points[index].x = startPoint.x; points[index++].y = baseY; // Go up to the start point. points[index].x = startPoint.x; points[index++].y = startPoint.GetY(isCeiling); Vector2[] addedPoints = new Vector2[1]; addedPoints[0].x = nextPoint.x; addedPoints[0].y = nextPoint.GetY(isCeiling); if (startPoint.x == -3) { Vector2[] tempTop = new Vector2[3]; Vector2[] tempBottom = new Vector2[3]; for (int i = 0; i < 3; i++) { tempTop[i].x = Game.instance.terrainPoints[i].x; tempTop[i].y = Game.instance.terrainPoints[i].ceilingY; tempBottom[i].x = Game.instance.terrainPoints[i].x; tempBottom[i].y = Game.instance.terrainPoints[i].floorY; } topSpline = new Spline.ContinuousSpline(tempTop); bottomSpline = new Spline.ContinuousSpline(tempBottom); } else { if (isCeiling == true) { topSpline.AddControlPoints(addedPoints); } else { bottomSpline.AddControlPoints(addedPoints); } } float delta = (endPoint.x - startPoint.x) / (points.Length - 3); while (index < points.Length - 1) { float interpolated = points[index - 1].x + delta; points[index].x = interpolated; if (isCeiling) { points[index].y = topSpline.Value(interpolated); } else { points[index].y = bottomSpline.Value(interpolated); } index++; } // Finish with the end point. points[index].x = endPoint.x; points[index++].y = endPoint.GetY(isCeiling); return(points); }