Beispiel #1
0
    public void SpawnLevel()
    {
        currentLevel += 1;
        int        scaleMod = 1;
        GameObject nextLevelModel;

        UpdateSpawnChances();
        if (specialLevels.ContainsKey(currentLevel) && specialLevels[currentLevel].GetComponent <InfiniteLevel>().CanSpawn())
        {
            nextLevelModel = specialLevels[currentLevel];
        }
        else
        {
            if (Random.Range(0, 2) == 0)
            {
                scaleMod = -1;
            }

            nextLevelModel = possibleLevels[PickLevelToSpawn()];
        }

        InfiniteLevelGoal boundEnd    = null;
        Vector3           endPrevious = Vector3.zero;
        int minDepth = int.MaxValue;

        for (int levelIdx = 0; levelIdx < levels.Count; ++levelIdx)
        {
            for (int endIdx = 0; endIdx < levels[levelIdx].ends.Count; ++endIdx)
            {
                int currentDepth = levels[levelIdx].GetDepth();
                if (currentDepth < minDepth && levels[levelIdx].ends[endIdx].boundStart == null)
                {
                    minDepth    = currentDepth;
                    boundEnd    = levels[levelIdx].ends[endIdx];
                    endPrevious = levels[levelIdx].ends[endIdx].transform.position;
                }
            }
        }

        InfiniteLevel level  = nextLevelModel.GetComponent <InfiniteLevel>();
        Vector3       newPos = endPrevious - level.start.transform.localPosition;

        GameObject newLevel = Instantiate(nextLevelModel, newPos, Quaternion.identity);

        newLevel.GetComponentInChildren <InfiniteLevel>().levelNumber = currentLevel;
        newLevel.transform.SetParent(levelsRoot);
        newLevel.name = nextLevelModel.name + currentLevel;
        newLevel.transform.position  = newPos;
        boundEnd.boundStart          = newLevel.GetComponentInChildren <InfiniteLevelStart>();
        boundEnd.boundStart.boundEnd = boundEnd;
        if (scaleMod != 1)
        {
            newLevel.transform.localScale = new Vector3(scaleMod * newLevel.transform.localScale.x, newLevel.transform.localScale.y, newLevel.transform.localScale.z);
        }
    }
Beispiel #2
0
 public void GoalPassed(InfiniteLevelGoal goal)
 {
     if (Ball.Instance.shieldActive)
     {
         TutoManager.Instance.StartTuto("TutoFirstLaunchGauge");
         InfiniteGameManager.Instance.FreeLaunchIncrease();
     }
     else
     {
         TutoManager.Instance.StartTuto("TutoFirstCoin");
     }
     if (Player.Instance.GetShieldLevel() > 0)
     {
         Ball.Instance.shieldActive = true;
         TutoManager.Instance.StartTuto("TutoShieldPortal");
     }
     Player.Instance.SetBestLevel(levelNumber);
     InfiniteGameManager.Instance.AddCoins(reward);
     InfiniteGameManager.Instance.currentColorCursor += 0.1f;
     InfiniteLevelsManager.Instance.RemoveLevel(this, goal.boundStart.level);
 }
Beispiel #3
0
 public void LevelPassed(InfiniteLevelGoal goal)
 {
     Player.Instance.SetLevelBeaten(bossType);
 }
Beispiel #4
0
 public void LevelPassed(InfiniteLevelGoal goalHit)
 {
     End();
 }