private PlatformInfo PlaceNextPlatform(System.Random rand, LevelGeneratorParams p, PlatformInfo prevPlatform, float progress) { Vector2 prevPlatformEndpoint = prevPlatform.GetEndPoint(); float spacing = Mathf.Lerp(p.minSpacing, p.maxSpacing, (float)rand.NextDouble()); float x = prevPlatformEndpoint.x + spacing; float offsetY = Mathf.Lerp(p.minOffsetY, p.maxOffsetY, (float)rand.NextDouble()); float y = prevPlatformEndpoint.y + offsetY; float tiltAngle = Mathf.Lerp(p.minTiltAngle, p.maxTiltAngle, (float)rand.NextDouble()); float avgLength = Mathf.Lerp(p.startAvgLength, p.endAvgLength, progress); float length = avgLength + Mathf.Lerp(-p.lengthVariation, p.lengthVariation, (float)rand.NextDouble()); Vector2 start = new Vector2(x, y); Vector2 end = start + (Vector2)(Quaternion.Euler(0, 0, tiltAngle) * new Vector2(length, 0)); return(PlatformInfo.FromEndpoints(start, end)); }