//Update wird jeden Frame ausgeführt void Update() { //Startet das nächste Event, falls das vorherige Event bereits abgehandelt ist, ein Event auf dem Stapel liegt und das Textlauf-Objekt noch nicht sichtbar im Bildschirmbereich ist if (CoroutineRunning == false && EventsOnStack > 0 && TextlaufObject.transform.localPosition.x > (GameObject.Find("Canvas").GetComponent <RectTransform>().rect.size.x / 2 + TextlaufObject.GetComponent <RectTransform>().rect.size.x / 2)) { StartCoroutine(eventImpact()); } //Pausiert das Spiel, wenn die Escape-Taste gedrückt wird if (Input.GetKeyDown(KeyCode.Escape)) { GameObject.Find("PausenMenu").transform.Find("Hitbox").GetComponent <PausenMenu>().PausenButtonOnClick(); if (GameObject.Find("Curtain").GetComponent <Image>().enabled == true) { GameObject.Find("PausenMenu").transform.Find("Image").GetComponent <Image>().color = new Color(1, 1, 1); } else { GameObject.Find("PausenMenu").transform.Find("Image").GetComponent <Image>().color = new Color(0, 0, 0); } } }
//handelt die Ereignisse ab IEnumerator eventImpact() { GameObject Event = null; CoroutineRunning = true; //überprüft, ob ein negatives Spezialereignis ausgelöst wird for (int i = 0; i < 5; i++) { //Wenn die Bedingung für ein Spezialevent erfüllt ist, wird dieses ausgewählt und geklont. Der Klon dient als Platzhalter, da das ausgelöste Ereignis später in die Chronik verschoben wird. if (Attributswerte.transform.GetChild(i).transform.Find("AttWert").GetComponent <AttWert>().wert <= 20 && SpecialEventTriggered[i] == false) { Event = SpecialEvents.transform.GetChild(i).gameObject; GameObject Clone = GameObject.Instantiate(Event, Event.transform.parent); Clone.transform.SetSiblingIndex(i); SpecialEventTriggered[i] = true; break; } } //sofern kein negatives Spezialevent ausgewählt wurde, wird überprüft, ob eine Bedingung für ein positives Spezialereignis erfüllt ist if (Event == null) { for (int i = 0; i < 5; i++) { //Wenn die Bedingung für ein Spezialevent erfüllt ist, wird dieses ausgewählt und geklont. Der Klon dient als Platzhalter, da das ausgelöste Ereignis später in die Chronik verschoben wird. if (Attributswerte.transform.GetChild(i).transform.Find("AttWert").GetComponent <AttWert>().wert >= 90 && SpecialEventTriggered[i + 5] == false) { Event = SpecialEvents.transform.GetChild(i + 5).gameObject; GameObject Clone = GameObject.Instantiate(Event, Event.transform.parent); Clone.transform.SetSiblingIndex(i + 5); SpecialEventTriggered[i + 5] = true; break; } } } //Sofern auch kein positives Spezialevent ausgewählt wurde, wird ein normales Ereignis ausgelöst if (Event == null) { //überprüft, ob noch Ereignisse verfügbar sind (maximal sind nur 10 normale Ereignisse pro Spiel möglich) if (Events.transform.childCount == 0) { EventsOnStack = 0; yield break; } //ein zufälliges Ereignis wird ausgelöst Event = Events.transform.GetChild(Random.Range(0, Events.transform.childCount)).gameObject; } //Der Textlauf wird gestartet und fängt an zu blinken StartCoroutine(TextlaufObject.GetComponent <Textlauf>().StarteTextLauf(Event.GetComponent <Massnahme>().Beschreibung)); StartCoroutine(TextlaufObject.GetComponent <Textlauf>().Blinken()); //Die Werte des Ereignisses werden übertragen for (int i = 0; i < 10; i++) { EventVeraenderungen[i] = Event.GetComponent <Massnahme>().veranderungen[i]; } //Das Ereignis wird in die Chronik verschoben Event.transform.SetParent(GameObject.Find("MassnahmenContainer").transform); //ggf wird der Tutorial-Abschnitt zu den Ereignissen angezeigt if (GetComponent <Tutorial>().tutorialPhase == Tutorial.TutorialPhase.Events) { GetComponent <Tutorial>().ZeigeTutorialText("Phase4", GameObject.Find("Ok4").GetComponent <Button>(), true); } yield return(new WaitForSeconds(1)); //nach einer Sekunde werden die Veränderungen des Ereignisses in der Attributsleiste angezeigt zeigeEventVeraenderungen(); yield return(new WaitForSeconds(2.5f)); //nach weiteren zweieinhalb Sekunden werden die Veränderungen des Events dann tatsächlich ausgeführt int j = 0; foreach (Transform child in Attributswerte.transform) { child.transform.Find("AttChange").GetComponent <RawImage>().enabled = false; child.transform.Find("AttWert").GetComponent <AttWert>().wert += EventVeraenderungen[j]; j++; } CoroutineRunning = false; EventsOnStack--; //Sollten sich keine Ereignisse mehr auf dem Stapel befinden und das Spiel bereits zu Ende sein, wird der Endscreen angezeigt if (EventsOnStack == 0 && CurrentRunden == MaxRunden) { UIVerwaltung.Endscreen(); GetComponent <Tutorial>().SchließeTutorialFenster(); StartCoroutine(GameObject.Find("Endscreen").GetComponent <Endscreen>().ZeigeEndpunkte()); GameObject.Find("Endscreen").GetComponent <Endscreen>().BerechneStats(); TextlaufStop = true; } yield break; }