Ejemplo n.º 1
0
    /*
     * ##### ResetBoard #####
     * Eine Routine (IEnumerator) ohne Uebergabeparameter.
     * Aufruf, wenn Spieler eine falsche Bodenplatte beruehrt. Wird auch in Player.cs aufgerufen
     * Wartet auf das Beenden aller Routinen und setzt dann alle Tiles (indem sie eine Schleife durchlaeuft) zurueck.
     * Wartet anschliessend auf das Beenden der Routinen beim Zuruecksetzen in die Ursprungsposition.
     */
    public IEnumerator ResetBoard(Vector3 currentTilePos)
    {
        // warten auf das Beenden aller laufenden Routinen des Typs MoveTileSmooth
        yield return(WaitForOtherRoutines());

        // Animation der Fallen
        yield return(_trap.TriggerRandomTrap(currentTilePos, _player.transform.Find("RaycastPos").position));

        // Spieler wird zurueckgesetzt
        yield return(ResetPlayer(1.0f));

        // alle Tiles zuruecksetzen
        for (int i = 0; i < _tilesList.Count; i++)
        {
            Vector3 direction = new Vector3(
                _tilesList[i].transform.position.x,
                _tilesList[i].transform.position.y + _heightDifference,
                _tilesList[i].transform.position.z
                );

            StartCoroutine(MoveSmooth(_tilesList[i], direction, _tileSpeed));   // Zuruecksetzen mittels der Routine MoveTileSmooth
        }
        _tilesList[0].GetComponent <AudioSource>().Play();

        // warten bis wieder alle Bodenplatten auf der richtigen Position liegen
        yield return(WaitForOtherRoutines());

        // alle Referenzen der Bodenplatten aus der Liste entfernen
        _tilesList.Clear();

        // alle Routinen wurden abgearbeitet
        _activeCoroutines = 0;

        // das Feld wurde bereinigt, der Spieler kann sich wieder bewegen
        _player.CanMove = true;
    }