private void ChooseActionPoints(System.Random rand, LevelGeneratorParams p, PlatformInfo plat) { float earlyLandMargin = Mathf.Lerp(p.minEarlyLandMargin, p.maxEarlyLandMargin, (float)rand.NextDouble()); float lateJumpMargin = Mathf.Lerp(p.minLateJumpMargin, p.maxLateJumpMargin, (float)rand.NextDouble()); plat.landPoint = Vector2.Lerp(plat.GetStartPoint(), plat.GetEndPoint(), earlyLandMargin); plat.jumpPoint = Vector2.Lerp(plat.GetStartPoint(), plat.GetEndPoint(), 1 - lateJumpMargin); }
public void Construct(PlatformInfo platform, bool alwaysOn) { this.platform = platform; this.alwaysOn = alwaysOn; transform.localPosition = platform.GetStartPoint(); transform.localScale = new Vector3(platform.GetLength(), 1, 1); float angle = Vector3.SignedAngle(Vector3.right, platform.GetEndPoint() - platform.GetStartPoint(), Vector3.back); transform.localRotation = Quaternion.AngleAxis(angle, Vector3.back); }
void OnDrawGizmos() { if (platform != null) { Vector3 start = gameObject.transform.parent.TransformPoint(platform.GetStartPoint()); Vector3 end = gameObject.transform.parent.TransformPoint(platform.GetEndPoint()); Vector3 land = gameObject.transform.parent.TransformPoint(platform.GetLandPoint()); Vector3 jump = gameObject.transform.parent.TransformPoint(platform.GetJumpPoint()); Gizmos.DrawWireSphere(start, 0.1f); Gizmos.DrawWireSphere(end, 0.1f); Gizmos.DrawLine(land, land + Vector3.up * 2); Gizmos.DrawLine(jump, jump + Vector3.up * 2); } }
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)); }