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); }
public IList <PlatformInfo> GeneratePlatforms(System.Random rand, PlatformInfo startPlatform, LevelGeneratorParams p) { Assert.IsTrue(p.maxEarlyLandMargin + p.maxLateJumpMargin <= 1, "Early landing and late jump margin overlapping"); IList <PlatformInfo> platforms = new List <PlatformInfo>(); ChooseActionPoints(rand, p, startPlatform); platforms.Add(startPlatform); float accumLevelTime = Vector2.Distance(startPlatform.GetStartPoint(), startPlatform.GetJumpPoint()) / p.runSpeed; while (accumLevelTime < p.levelDuration) { float progress = accumLevelTime / p.levelDuration; PlatformInfo plat = PlaceNextPlatform(rand, p, platforms[platforms.Count - 1], progress); ChooseActionPoints(rand, p, plat); platforms.Add(plat); MovementFunc jf = SetupJumpFunction(p, platforms, platforms[platforms.Count - 2], platforms[platforms.Count - 1]); accumLevelTime += Vector2.Distance(plat.GetLandPoint(), plat.GetJumpPoint()) / p.runSpeed + jf.duration; } platforms[platforms.Count - 1].jumpFunction = new MovementFunc(_ => Vector2.zero, 0); return(platforms); }
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); } }