Architektur - Tom507/LegendOfBachelor GitHub Wiki

Projekt Aufbau

Aus Entwicklersicht wollen wir klare Strukturen schaffen, um im Verlauf des Projekts einen möglichst sauberen Code zu erreichen. Daher teilen wir Game-Objekte in Klassen auf, die mal nur ein Objekt, wie die [Player] Klasse, oder auch mal mehrere Objekte, wie [Interactables], haben werden. Es muss eine Monster und Interactable Klasse geben, sowie Eine UI-Machine, eine Shop-, eine Bibliothek- und natürlich die [Boss] Klasse.

Die Kommunikation

Die Kommunikation zwischen den Klassen erfolgt durch Events, also Abonnements von Event-Methoden. Das heißt beispielsweise, dass die Methode [Interacting] vom Spieler ausgelöst wird. Bei der Ausführung der Methode wird ein Befehl an die Klasse [LoB-Events] geschickt.

    if (Input.GetButtonDown("Interaction"))
    {
        LOBEvents.current.Interacting();
    }

Hier werden alle Abonnenten-Methoden wie bei einer Postleitstelle verwaltet und dann an die Abonnenten, die z.B. die [Interacting] Methode abonniert haben weitergeleitet.

    public event Action onInteracting;
    public void Interacting()
    {
        if (onInteracting != null)
        {
            onInteracting();
        }
    }

Die Event-Funktion [onInteracting()] löst dann eigene Methoden in den jeweiligen Abo-Klassen aus.

    LOBEvents.current.onInteracting += BuySelectedItem;

    private void BuySelectedItem()
    {
        
        ...
    }

Klassenstates

Die [Player] Klasse hat die Funktionen [Bewegung], [Interaction], [Abbruch] und [Pausieren]. Außerdem hat sie Variablen für [Hp], [Defense] und [Offense] Werte, sowie ein Inventar für die Artefakte des Spielers. Der Spieler besitzt eine [currentstate] Variable, die den Playerstate für einen Switch Case speichert. Es gibt die Playerstates [Kampf], [Bewegen], [Pausierend],[Shopend] und [TürÖffnend].

Interactable Trigger

Sobald der [Player] eine Interaktionsbox betritt und dort die [Interaction] Taste [F] betätigt, besitzt die Interaktionsbox eine vordefinierte Eigenschaft, die bestimmt was infolge der Spielerinteraktion passiert. Dieses Programmier-Modell wurde bei den [Toren] der Burg, sowie bei der [Bibliothek] und dem [Shop] verwendet.

Bibliothek

Die [Bibliothek] im Spiel hat das Ziel, den Spieler auf die Kämpfe außerhalb der Stadt vorzubereiten. Hierzu gibt es in der Stadt eine [Lern-Kommilitonin]. Wenn mit ihr [interagiert] wird, kann der Spieler aus den 4 Fragebereichen einen auswählen und die Fragen dort üben, ohne Konsequenzen zu fürchten, denn er erhält weder Schaden noch teilt er welchen aus. Der Spieler kann außerdem mit Hilfe der [Escape] Taste von den Fragen wieder in den Kategorie-Auswahlbildschirm zurückgelangen und durch nochmalige Betätigung der Escape-Taste die Bibliothek ganz verlassen.

Das [Monster]

Das [Monster] hat eine [Movement] Funktion und ist in der Lage, den [Player] in einen Kampf zu ziehen [Playerstate = [Fighting]]. Andersherum hat auch der [Player] die Möglichkeit, fliehende [Monster] anzugreifen, wenn er ihnen zu nahe kommt. Folglich hat auch die [Monster] Klasse eine [currentstate] Variable, um den [AIstate] zu speichern. Die Interaktionen der beiden Modelle [Player] und [Monster], oder [Player] und [Shop], erfolgt über [Trigger] und die Funktion [onTriggerEnter] von UNITY. Die [OnTriggerEnter]-Funktion beschreibt, was beim Eintritt in einen Trigger z.B. [Player] oder [Monster], in diesem bestimmten Fall passiert. Beispielsweise [Monster] trifft auf [Player] --> Kampf beginnt.

Monster Zustandsdiagramm

Das Quiz:

Das [Quiz] stellt dem [Player] im Kampf eine Frage. Diese Frage wird vom [Player] entweder richtig oder falsch beantwortet. //UI toggler noch einfügen Quiz : 182 Bei richtiger Antwort fügt der [Player] dem [Monster] Schaden ([DealDamage]) zu, bei falscher Antwort erhält der [Player] Schaden ([TakeDamage]). Die visuelle Umsetzung der beiden Ergebnisse übernimmt die [UIMachine] mit den Funktionen [flashRight()/flashWrong()]. Der Kampf läuft nach beantworteter Frage weiter, durch die Funktion [NextQuestion] wird dem [Player] eine weitere Frage gestellt. Tritt nun das Event Kampf-Ende auf, wird die UIMachine zurück auf die GameUI gesetzt und das Quiz wird beendet. Quiz Zustandsdiagramm

Das UI:

Das User Interface (UI) von "Legend Of Bachelor" ist in die Bereiche GameUI, QuizUI, BibliothekUI und ShopUI untergliedert.

GameUI:

Das GameUI ist das UI, das der Spieler während er über die Karte läuft sieht. Es beinhaltet den Lebensbalken des Spielers, sowie die Anzeigen für Schlüssel und Lebenstränke. Folgen soll die Anzeige für Geld. Auch ein kleines Inventar für die im Shop gekauften Items soll noch implementiert werden.

QuizUI:

Das QuizUI öffnet sich, sobald ein Monster den Trigger-Radius des Spielers betritt. Es werden folgende Elemente eingeschaltet:

  • Lebensbalken des Spielers
  • Lebensbalken des Monsters
  • eine Überschrift
  • die gestellte Frage
  • 4 Antwortmöglichkeiten

Bei Beantwortung einer Frage werden für jeweils 3 Sekunden folgende Elemente eingeblendet:

  • Frage falsch beantwortet --> Text "Falsch" erscheint
  • Frage richtig beantwortet --> Text "Richtig" und zwei Smileys erscheinen

Das QuizUI schließt sich erst wieder, wenn:

  1. Alle Fragen beantwortet wurden, bzw. das Monster stirbt oder
  2. Der Spieler stirbt.

ShopUI:

Das ShopUI geht auf, sobald der Spieler in den Trigger vor dem Shop tritt und die Interaktionstaste "F" betätigt. Folgende UI-Elemente erscheinen:

  • Ein Hinweistext oben links in der Ecke, in dem steht, wie man ein Item kauft und wie man den Shop wieder verlässt
  • Nachricht "Gekauft!" --> erscheint für 2 Sekunden, sobald der Spieler ein Item gekauft hat
  • Nachricht "Nicht genug Geld" --> erscheint für 2 Sekunden, wenn der Spieler versucht ein Item zu kaufen, für das er nicht genug Geld hat

BibliothekUI:

Das BibliothekUI öffnet sich, wenn der Spieler in den Trigger der Lernkommilitonin tritt und die Interaktionstaste "F" drückt. Folgende UI-Elemente erscheinen:

  • Überschrift: "Was möchtest du heute lernen?"
  • 4 Buttons zum Auswählen der jeweiligen Kategorie (Allgemein, Wasserfall-Modell, V-Modell, Scrum) Klickt man auf einen der Buttons und wählt dadurch eine der Kategorien aus, öffnet sich das QuizUI (siehe oben). Drückt man während dem Quiz die Escape-Taste gelangt man wieder zurück zum Auswahlmenü. Ein weiteres Drücken auf Escape bringt einen zurück ins normale Spiel.

UI Zustandsdiagramm

Die Kampfinteraktion: Sequenzdiagramm