private void LevelSystem_OnPlayerEnter(object sender, EventArgs e)
    {
        TeleporterSystem tp = levelSystem.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>();

        tp.isBossTeleporter = true;
        tp.OnLevelComplete += Tp_OnLevelComplete;
    }
Exemplo n.º 2
0
 public void SetLevelComplete(bool isLevelComplete, int levelIndex)
 {
     foreach (GameObject teleporter in teleporterList)
     {
         // Disable teleporter
         TeleporterSystem ts = teleporter.GetComponent <TeleporterSystem>();
         ts.SetLevelComplete(isLevelComplete, levelIndex);
     }
 }
Exemplo n.º 3
0
 public void SetPlayerHere(bool isPlayerHere)
 {
     foreach (GameObject teleporter in teleporterList)
     {
         // Disable teleporter
         TeleporterSystem ts = teleporter.GetComponent <TeleporterSystem>();
         ts.IsPlayerHere = isPlayerHere;
     }
 }
Exemplo n.º 4
0
    /// <summary>
    /// Enable child teleporters
    /// </summary>
    public void EnableTeleporters()
    {
        if (TeleporterEnabled)
        {
            return;
        }

        if (teleporterList == null)
        {
            return;
        }

        TeleporterEnabled = true;
        foreach (GameObject teleporter in teleporterList)
        {
            // Enable teleporter
            TeleporterSystem ts = teleporter.GetComponent <TeleporterSystem>();
            ts.EnableTeleporter();
        }
    }
Exemplo n.º 5
0
    /// <summary>
    /// Generate bonds between teleporters
    /// </summary>
    public void GenerateLinks()
    {
        /*** Start area link ***/
        if (generateStartArea)
        {
            if (levelsToGenerate > 0)
            {
                // link start area tp to first level
                LevelSystem      ls = generatedStartArea.GetComponent <LevelSystem>();
                TeleporterSystem ts = ls.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>();
                ts.destination = generatedLevels[0];
            }
            else
            {
                // link start area tp to boss area
                LevelSystem      ls = generatedStartArea.GetComponent <LevelSystem>();
                TeleporterSystem ts = ls.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>();
                ts.destination = generatedBossArea;
            }
        }

        /*** Levels links ***/

        for (int i = 0; i < generatedLevels.Count; i++)
        {
            // Get available levels to be linked
            List <GameObject> availableLevels = new List <GameObject>(generatedLevels);

            // Get levelSystem and remove this level from available list
            GameObject levelObject = availableLevels[i];
            GameObject nextLevel;

            // Get next level
            if ((i + 1) < availableLevels.Count)
            {
                nextLevel = availableLevels[i + 1];
            }
            else if (generateBossArea)
            {
                nextLevel = generatedBossArea;
            }
            else
            {
                break;
            }

            LevelSystem levelSystem = levelObject.GetComponent <LevelSystem>();
            availableLevels.RemoveAt(i);

            // Get teleporters count
            int tpCount = levelSystem.teleportersExit.transform.childCount;

            if (tpCount == 0)
            {
                continue;
            }

            TeleporterSystem teleporterSystem;
            // Set one of the tp to the next level, randomly selected
            if (tpCount == 1)
            {
                teleporterSystem             = levelSystem.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>();
                teleporterSystem.destination = nextLevel;
                continue;
            }

            int rndTp = Random.Range(0, levelSystem.teleportersExit.transform.childCount);

            // and the others to a random available level
            availableLevels.Remove(nextLevel);

            for (int j = 0; j < tpCount; j++)
            {
                // Get teleporter at index j
                teleporterSystem = levelSystem.teleportersExit.transform.GetChild(j).GetComponent <TeleporterSystem>();

                if (j == rndTp)
                {
                    teleporterSystem.destination = nextLevel;
                    // Remove the random level from the list
                    availableLevels.Remove(nextLevel);
                }
                else
                {
                    // If no level is available, throw an exception
                    if (availableLevels.Count == 0)
                    {
                        throw new MissingComponentException("Not enough levels");
                    }

                    // Take a random level
                    int        rndIndex = Random.Range(0, availableLevels.Count);
                    GameObject rndLevel = availableLevels[rndIndex];

                    // Remove the random level from the list
                    availableLevels.Remove(rndLevel);

                    // Set target destination
                    teleporterSystem.destination = rndLevel;
                }
            }
        }
    }