Exemple #1
0
    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);
    }
Exemple #2
0
    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);
    }
Exemple #3
0
    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);
    }
Exemple #4
0
 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);
     }
 }