---
# System prepended metadata

title: Documentation

---

---
title: Documentation
---
# Classes

## ActionItem
**Superklasse, Interfaces:** [Item](#Item), [IActionObject](#IActionObject)
**abstract**
**Subklassen:** [HitmanCoin](#HitmanCoin), [StaffCamera](#StaffCamera), [Tranquilizer](#Tranquilizer)
**Notes:**
Diese abstrakte Klasse soll Superklasse aller Items sein, die anstelle eines Interactables als Aktion verwendet werden können. Dazu werden die Felder des IActionObject Interfaces implementiert. Da es sich um eine abstrakte Klasse handelt wird sie niemals direkt implementiert.

**Felder:**
- **movementTarget**
    - Schutzgrad: protected
    - Typ: Vector2Int
    - Wert: die Position an der ActionItem.Use() aufgerufen wird, 
        - Die Position ist in Grid-Space gespeichert.
- **movementTargetSet**
    - Schutzgrad: protected
    - Typ: Boolean
    - Wert: ob der Wert der in MovementTarget gespeichert ist bereits korrekt gesetzt wurde (true) oder noch dem default wert entspricht (false)
- **ItemActive**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob das Item in diesem Zug genutzt werden soll.
- **toolTipText**
    - Schutzgad: protected
    - Typ: String
    - Wert: der Text der angezeigt werden soll, um dem Spieler zu erklären wie das Item genutzt wird
        - Soll möglichst kurz und präzise gehalten werden
- **toolTipActive**
    - Schutzgrad: protected
    - Typ: boolean
    - Wert: ob der tooltiptext gerade auf dem bildschirm angezeigt wird
- **PossiblePositions**
    - Schutzgrad: public
    - Typ: List\<Vector2Int>
    - Wert: die möglichen Positionen von denen aus IActionObject.Interact() aufgerufen werden kann
        - kann nicht gesetzt werden
        - gibt movementTarget zurück

- **Sprite**
    - Schutzgrad: public
    - Typ: Sprite
    - Wert: die Sprite die das IActionObject darstellt
        - wird aus dem SpriteRenderer geholt
        - kann nicht von außen gesetzt werden
**Methoden:**
- **onItemInactive**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe:
        - Wird aufgerufen wenn das Item als inaktiv gesetzt wird
        - setzt das movementtarget zurück
        - setzt die farben des auswahlbuttons zurück
        - kann überschrieben werden um weitere cleanup aufgaben zu übernehmen
- **ShowToolTip**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe:
        - Aktiviert den ToolTipText auf dem Bildschirm und setzt toolTipActive
- **HideToolTip**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe:
        - Deaktiviert den ToolTipText auf dem Bildschirm und setzt tooltipactive
- **Start**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe:
        - Unity Nachricht bei Szenenbeginn
    - overriden von Item
- **OnActivationButtonClick**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - wird Ausgeführt wenn der Button zum aktivieren des Items geclickt wird
        - ändert farben von button
        - trägt item in die agentAction ein
        - ruft AgentManager.AgentNotIdle() auf
        - setzt interne werte
    - overriden von Item
- **Use**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob der agent der das item benutzt seinen Zug fortfahren kann (sämtliche aufgaben und animationen des items müssen fertig sein)
    - Aufgabe:
        - wird ausgeführt wenn der agent das item benutzen will
        - übernimmt sämtliche aufgaben die zum untzen des items nötig sind
        - wird einmal pro frame aufgerufen bis das nutzen fertig ist
    - abstract
- **Interact**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob die interaction fertig ist
    - Parameter:
        - stat (typ Agent.Stat) wird ignoriert
        - statValue (typ int) wird ignoriert
    - Aufgabe:
        - aus interface IActionObject übernommen, ruft use auf
- **GetGridPosition**
    - Schutzgrad: public
    - Rückgabewert: Vector2Int, position die für das Pathfinding benutzt werden soll, as in die position von der aus das item benutzt wird oder an der es sich befindet, falls es nicht von einem agenten getragen wird
    - Parameter: origin (position des fragenden GridObjects), wird ignoriert
    - Aufgabe:
        - Gibt die fürs pathfinding relevante position in Grid-Space zurück
        - entweder eigene position oder movementtarget
    - overriden von GridObject
    - Exceptions: wenn das Item getragen wird und noch kein movementtarget festgelegt ist wird eine exception geworfen

## Agent
**Superklasse:** MonoBehaviour
**Notes:**
Diese Klasse wird in levels verwendet um die stats und ID eines Agents zu speichern. Für jeden Stat gibt es ein UnityEvent das aufgerufen wird wenn der Stat gecheckt wird. Das soll zum statleveln genutzt werden

**Felder:**
- **ID**
    - Schutzgrad: public
    - Typ: int
    - Wert: einzigartige Zahl die den Agenten identifizierbar macht
- **FIG**
    - Schutzgrad: public
    - Typ: int
    - Wert: Der Fight Wert des Agenten
        - auf abruf wird ein event ausgelöst
- **STE**
    - Schutzgrad: public
    - Typ: int
    - Wert: Der Stealth Wert des Agenten
        - auf abruf wird ein event ausgelöst
- **HAC**
    - Schutzgrad: public
    - Typ: int
    - Wert: Der Hacking Wert des Agenten
        - auf abruf wird ein event ausgelöst
- **MEC**
    - Schutzgrad: public
    - Typ: int
    - Wert: Der Mechanics Wert des Agenten
        - auf abruf wird ein event ausgelöst
- **MOV**
    - Schutzgrad: public
    - Typ: int
    - Wert: Der Movement Wert des Agenten
- **MovementRange**
    - Schutzgrad: public
    - Typ: int
    - Wert: Die Entfernung in Kästchen die der Agent in einem Zug zurücklegen darf
        - Wird aus MOV berechnet
- **statUses**
    - Schutzgrad: private, readonly
    - Typ: Dictionary\<Stat, int>
    - Wert: Die entsprechenden Anzahlen an instanzen in denen der Agent im aktiven Level den Stat benutzt hat
        - wird zu beginn des levels zurückgesetzt
- **WasCaught**
    - Schutzgrad: public
    - Typ: bool
    - Wert: Ob der Agent von einer wache ausgeknockt wurde
- **controller**
    - Schutzgrad: public
    - Typ: [AgentController](#AgentController)
    - Wert: Der controller des Agents
- **Items**
    - Schutzgrad: public
    - Typ: List\<[Item](#Item)>
    - Wert: sämtliche Items die der Agent besitzt
- **lootedMoney**
    - Schutzgrad: public
    - Typ: int
    - Wert: Geldmenge die der Agent momentan bei sihch trägt

**Methoden:**
- **Awake**
    - Schutzgrad: private
    - Rückgabewert: int
    - Aufgabe:
        - Unity Event zu szenenbeginn
- **Start**
    - Schutzgrad: private
    - IEnumerator ka was hier ab geht
    - Aufgabe:
        - Unity Event zu Szenenbeginn, später als Awake
- **LevelUp**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - stat (der stat der erhöht werden soll)
        - amount (die menge um die der stat erhöht werden soll)
    - Aufgabe:
        - erhöht einen stat um eine bestimmte Menge
- **GetStat**
    - Schutzgrad: public
    - Rückgabewert: int (der Wert des Stats)
    - Parameter:
        - stat (der stat der abgefragt wird)
        - withoutCheck (boolean, ob das event des entsprechenden stats aktiviert werden soll, default false)
    - Aufgabe:
        - gibt den wert eines stats zurück, dabei werden aktive statoverwriteitems beachtet, das ist **nur** hier der fall
- **Init**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - agent([Overseeragent](#OverseerAgent), der Agent von dem die Stats übernommen werden sollen)
    - Aufgabe:
        - setzt die stats des agenten basierend auf einem overseeragenten, wird kurz nach laden der szene aufgerufen
        - gibt dem agenten die entsprechenden items
- **ApplyLevelUps**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - erhöht die stat werte basierend darauf, wie oft sie in dem level genutzt wurden

**Custom Types**
- Stat
    - Typ: enum
    - die unterschiedlichen stats die ein agent hat

## AgentAction
**Notes:**
Diese Klasse wird verwendet, um die Aktionen abzuspeichern, die ein agent während einem Zug macht. Das kann beeinhalten: einen vom spieler festgelegten weg zum interactable nehmen, mit einem interactable interagieren und über einen festgelegten pfad zu einer bestimmten zelle laufen. 

**Felder:**
- **MovementImage**
    - Schutzgrad: private, readonly
    - Typ: image
    - Wert:
        - Das Bild in der UI dessen Farbe anzeigt ob für diese Aktion bereits Bewegung festgelegt wurde
- **ActionImage**
    - Schutzgrad: private, readonly
    - Typ: image
    - Wert:
        - Das Bild in der UI dessen Farbe anzeigt ob für diese Aktion bereits eine Interaktion festgelegt wurde
- **AgentController**
    - Schutzgrad: public
    - Typ: [AgentController](#AgentController)
    - Wert: der Controller des Agenten der diese Aktion ausführen soll
- **Stat**:
    - Schutzgrad: public
    - Typ: [Agent](#Agent).Stat
    - Wert: der Stat mit dem die Interaktion durchgeführt werden soll
- **ActionObject**:
    - Schutzgrad: public
    - Typ: [IActionObject](#IActionObject)
    - Wert: das Objekt mit dem interagiert werden soll
- **PreInteractableMovement**
    - Schutzgrad: public
    - Typ: List\<Vector2Int>
    - Wert: Die Wegpunkte des Pfades der vor der interaktion abgelaufen werden soll
        - gespeichert in grid space
- **MovementNodes**
    - Schutzgrad: public
    - Typ: List\<Vector2Int>
    - Wert: Die Wegpunkte des Pfades der nach der Interaktion abgelaufen werden soll
        - gespeichert in grid space
- **PathPositions**
    - Schutzgrad: public
    - Typ: List\<Vector3>
    - Wert: Sämtliche positionen die vor und nach der interaktion abgelaufen werden
        - gespeichert in world space
        - hier sind nicht nur die wegpunkte sondern sämtliche position im pfad eingeschlossen
- **PreInteractablePathPositions**
    - Schutzgrad: public
    - Typ: List\<Vector3>
    - Wert:Sämtliche positionen die vor der interaktion abgelaufen werden
        - gespeichert in world space
        - hier sind nicht nur die wegpunkte sondern sämtliche position im pfad eingeschlossen
        - momentane position des agenten ist ebenfalls eingeschlossen
- **PostInertactablePathPositions
    - Schutzgrad: public
    - Typ: List\<Vector3>
    - Wert: Sämtliche positionen die nach der interaktion abgelaufen werden
        - gespeichert in world space
        - hier sind nicht nur die wegpunkte sondern sämtliche position im pfad eingeschlossen
        - letzte position der PreInteractablePositions ist hier eingeschlossen
- **LastPreCell**
    - Schutzgrad: public
    - Typ: Vector2Int
    - Wert: letzte Zelle die beim letzten berechnen von PreInteractablePositions eingeschlossen wurde
        - falls es keine PreInteractablePositions gibt, ist das die position des Agenten
        - in grid space
- **MovementSelected**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob bereits movement festgelegt wurde
- **InteractionSelected**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob bereits eine Interaktion ausgewählt wurde

**Methoden:**
- **ToString**
    - Schutzgrad: public
    - Rückgabewert: string (die string darstellung der aktion)
    - Aufgabe: erstellt eine string darstellung der aktion
- **Ctor**
    - Schutzgrad: public
    - Rückgabewert: die erstellte Action
    - Aufgabe: instanziiert die aktion und setzt die farben der images auf weiß
- **UpdatePrePositions**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - aktualisiert PreInteractablePositions
- **UpdatePostPositions**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - aktualisiert PostInteractablePositions
- **AddMovementNode**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: Fügt einen weiteren Wegpunkt zur Movementnodes hinzu und ruft UpdatePostPositions() auf
- **GetPathPositions**
    - Schutzgrad: public, static
    - Rückgabewert: List\<Vector3> Die Positionen des Pfads in World space
    - Parameter:
        - from Vector2Int, die startposition des pfads in grid space
        - to VectorInt, die endposition des pfads in grid space
        - MovementRange int, die maximale entfernung des pfads, -1 für unbegrenzt, wenn der pfad länger ist wird null zurückgegeben
    - Aufgabe:
        - erstellt eine liste an world positions die dem pfad von from zu to entsprechen

## AgentController
**Superklasse:** [Entity](#Entity)
**Notes:**
Diese Klasse ist für das Bewegen darstellen des Agenten in der Szene zuständig.
**Felder:**
- **Agent**
    - Schutzgrad: public
    - Typ: [Agent](#Agent)
    - Wert: der Agent der Kontrolliert wird
- **action**
    - Schutzgrad: public
    - Typ: [AgentAction](#AgentAction)
    - Wert: die aktion die der agent in diesem Zug ausführen soll
- **Keys**
    - Schutzgrad: public
    - Typ: List\<[Key](#Key)
    - Wert: Die Schlüssel die der Agent benutzen kann (an sich trägt)
- **fromCell**
    - Schutzgrad: private
    - Typ: Vector3
    - Wert: die Position von der der Agent sich gerade wegbewegt
- **toCell**
    - Schutzgrad: private
    - Typ: Vector3
    - Wert: die Position auf die der Agent sich gerade zu bewegt
- **t**
    - Schutzgrad: private
    - Typ: float
    - Wert: der anteil des pfades zwischen fromCell und toCell an dem der agent sich gerade befindet
        - zwischen 0 und 1
- **Path**
    - Schutzgrad: private
    - Typ: [Path](#Path)
    - Wert: Der Pfad auf dem sich der agent gerade bewegt
- **movementtargetChanged**
    - Schutzgrad: private
    - Typ: boolean
    - Wert: ob sich das MovementTarget verändert hat, seit zuletzt TakeStep() aufgerufen wurde
- **CurrentMovementTarget**
    - Schutzgrad: private
    - Typ: Vector2Int
    - Wert: das Ziel des Pfads der gerade abgelaufen wird
        - um die bewegung des Agenten zu ändern muss das gesetzt werden
        - in grid space
- **line**
    - Schutzgrad: public
    - Typ: LineRenderer
    - Wert: Der LineRenderer der den aktiven Pfad des agenten anzeigen soll
- **agentCollider**
    - Schutzgrad: private
    - Typ: Collider2D
    - Wert: Der Collider des agenten
- **currentStep**
    - Schutzgrad: private
    - Typ: int
    - Wert: der schritt des movements der action, der gerade ausgeführt wird
        - wenn noch interagiert wird, wird dies als index von action.PreInteractableMovement genutzt
        - wenn bereits interagiert wurde oder gar nicht interagiert wird, wird dies als index von action.MovementNodes genutzt
- **KnockedOut**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob der Agent von einem guard ausgeknocked wurde
        - im setter von diesem feld wird alles abgehandelt was passieren muss wenn der agent ausgeknocked wird
- **SpriteRenderer**
    - Schutzgrad: public
    - Typ: SpriteRenderer
    - Wert: der Renderer der die Sprite des agenten rendert
**Methoden**
- **Start**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe:
        - Unity Nachricht bei szenenstart
    - overriden von [GridObject](#GridObject)
- **Update**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe:
        - Unity Nachricht die in jedem Frame einmal ausgeführt wird
    - overriden von [GridObject](#GridObject)
- **TakeTurn**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird einmal am anfang des zuges des agenten aufgerufen, damit dieser beginnt seinen zug auszuführen
- **TakeStep**
    - Schutzgrad: private
    - Rückgabewert: boolean ob der Agent an seinem Ziel angekommen ist
    - Aufgabe: wird einmal in jedem Update aufgerufen, in dem der Agent sich bewegt, kümmert sich um die bewegung des gameobjects
- **SetJailed**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird aufgerufen, wenn der agent im LevelJail ankommt, falls alle agenten festgenommen wurden wird das HideOut geladen
- **CanOpenDoor*
    - Schutzgrad: public
    - Rückgabewert: boolean ob der Agent die Tür öffnen kann
    - Parameter: door ([DoorInteracable](#DoorInteractable)) die tür die geöffnet werden soll
    - Aufgabe: überprüft ob eine Tür geöffnet werden kann
## AgentManager
**Superklasse, Interfaces:** Monobehaviour, [IInputTaker](#IInputTaker)
**Notes:**
Diese Klasse ist für die organisation der Agenten zuständig. Sie lässt den Spieler den Agenten Aktionen zuordnen und setzt die werte der Agenten bei Zugende zurück. Sie sorgt dafür das der aktive Pfad angezeigt wird, gibt zugriff auf die Items die ein Agent an sich trägt und zeigt an wie weit ein Agent laufen kann.

**Felder**
- **InteractableTags**
    - Schutzgrad: public, readonly
    - Typ: string\[]
    - Wert: Sämtliche Tags die nur Interactables haben können
- **SpawnPositions**
    - Schutzgrad: public
    - Typ: List\<Vector2Int>
    - Wert: die Positionen an denen Agenten im aktiven Level spawnen dürfen
        - wird entweder im inspektor oder durch stageMaker gesetzt
- **activeColors**
    - Schutzgrad: public
    - Typ: ColorBlock
    - Wert: die farben die der Knopf des aktiven Agenten haben soll
        - die normalColor dieses blocks wird verwendet um die sprite des aktiven agenten einzufärben
- **passiveColors**
    - Schutzgrad: public
    - Typ: ColorBlock
    - Wert: die farben die die buttons der inaktiven agenten haben sollen
        - die normalColor dieses blocks wird verwendet um inaktive agenten einzufärben
- **Agents**
    - Schutzgrad: public, readonly
    - Typ: List\<[AgentController](#AgentController)>
    - Wert: alle Agenten die in der aktiven szene sind
- **idleAgents**
    - Schutzgrad: private, readonly
    - Typ: List\<[AgentControlller](#AgentController)>
    - Wert: alle Agenten in der aktiven Szene, die noch keine Aktion haben und nicht zum passen markiert wurden
- **ActiveAgent**
    - Schutzgrad: public
    - Typ: [AgentController](#AgentController)
    - Wert: der momentan ausgewählte agent
- **AgentSelectionButtonPrefab**
    - Schutzgrad: public
    - Typ: GameObject
    - Wert: Der Prefab für die Buttons die zum auswählen der Agenten genutzt werden sollen
- **AgentSelectionParent**
    - Schutzgrad: public
    - Typ: Transform
    - Wert: Der Transform der als Parent für die Auswahlknöpfe der Agenten verwendet werden sollen
- **AgentSelectionButtons**
    - Schutzgrad: public
    - Typ: List\<Button>
    - Wert: die buttons die zum auswählen der agenten verwendet werden sollen
- **AgentMovementSelectedImages**
    - Schutzgrad: private, readonly
    - Typ: List\<Image>
    - Wert: Die Bilder deren Farbe anzeigt, ob der entsprechende Agent bereits Bewegung festgelegt bekommen hat
- **AgentInteractionSelectedImages**
    - Schutzgrad: private, readonly
    - Typ: List\<Image>
    - Wert: Die Bilder deren Farbe anzeigt, ob der entsprechende Agent bereits Bewegung festgelegt bekommen hat
- **nextTurnButton**
    - Schutzgrad: public
    - Typ: Button
    - Wert: Der Button der das ausführen der Züge auslösen soll
- **_cam**
    - Schutzgrad: private
    - Typ: Camera
    - Wert: Die Kamera durch die die Szene gerendert wird
- **activeInteractable**
    - Schutzgrad: private
    - Typ: [Interactable](#Interactable)
    - Wert: Das momentan ausgewählte interactable
- **speed**
    - Schutzgrad: public
    - Typ: float
    - Wert: ein multiplier der die standard geschwindigkeit der agenten festlegen soll
- **line**
    - Schutzgrad: public
    - Typ: LineRenderer
    - Wert: der Linerenderer der den Aktiven Path darstellen soll
- **tilemap**
    - Schutzgrad: private
    - Typ: Tilemap
    - Wert: Die Tilemap, die benutzt wird um die Erreichbaren Zellen darzustellen
- **tile**
    - Schutzgrad: public
    - Typ: Tile
    - Wert: Das Tile das eine erreichbare Zelle darstellt
- **ChosenInteractableImage**
    - Schutzgrad: public
    - Typ: Image
    - Wert: Das Bild das darstellt welches ActionObject der aktive Agent für diesen Zug ausgewählt hat
- **MovementTargetPointer**
    - Schutzgrad: public
    - Typ: Transform
    - Wert: Transform des Gameobjects das darstellt wo der aktive Agent in seinem Zug hin läuft
- **AgentStatParent**
    - Schutzgrad: public
    - Typ: RectTransform
    - Wert: Das Parent Transform der Texte die anzeigen welche Stats der aktive agent hat
- **statTexts**
    - Schutzgrad: private, readonly
    - Typ: Dictionary\<string, TMP_Text>
    - Wert: die TMP_Texts die anzeigen welche Stats der aktive agent hat
        - key: name des Stats
        - value: textfeld
- **statHighlights**
    - Schutzgrad: private readonly
    - Typ: Dictionary\<string, Image>
    - Wert: die Bilder die zum highlighten eines stats verwendet werden
        - key: name des stats
        - value: das Bild
- **itemsActive**
    - Schutzgrad: private
    - Typ: boolean
    - Wert: ob momentan die items des aktiven agenten angezeigt werden
- **moneyCounter**
    - Schutzgrad: public
    - Typ: TMP_Text
    - Wert: das Textfeld das anzeigt wie viel Geld der aktive Agent hat
- **pauseMenu**
    - Schutzgrad: public
    - Typ: [PauseMenuController](#PauseMenuController)
    - Wert: Der PauseMenuController der aktiven Szene
- **additiveMovementSelection**
    - Schutzgrad: private
    - Typ: boolean
    - Wert: ob beim bewegung auswählen eine Zelle hinzugefügt werden soll (true) oder der bisherige Pfad überschrieben werden soll
- **VisiblePath**
    - Schutzgrad: public
    - Typ: List\<Vector3>
    - Wert: Der Pfad mit line angezeigt wird
- **CurrentCell**
    - Schutzgrad: private
    - Typ: Vector2Int
    - Wert: Die Zelle über der die Maus sich gerade befindet
        - im setter von diesem Feld wird das Pfad darstellen gehandelt
**Methoden**
- **Awake**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht vor szenenbeginn
        - Trägt den AgentManager in References ein
- **Start**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht zu Szenenbeginn (nach Awake)
- **SetMovementTarget**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter: cell (Vector2Int) die Zelle zu der der Agent sich bewegen soll
    - Aufgabe: Überschreibt das Movement des aktiven agenten mit einer neuen Zelle
- **AddMovementTarget**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter: cell (Vector2Int) die Zelle die dem Movement hinzugefügt werden soll
    - Aufgabe: Fügt eine Zelle zum Movement des aktiven Agenten zu (an letzter Stelle)
- **ActivateAgent**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - agent (AgentController) der neue aktive Agent
    - Aufgabe:
        - ruft deactivateAgent für den alten active agent auf
        - handelt visuals und interne values um den neuen agenten zu aktivieren
- **ActivateAgent**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - index (int) der index des neuen aktiven agenten in Agents
    - Aufgabe:
        - ruft ActivateAgent mit dem agenten am entsprechenden index auf
- **DeactivateAgent**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe:
        - handelt visuals und setzt interne values um den agenten zu deaktivieren
- **AgentNotIdle**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - entfernt den aktiven agenten aus idleAgents
        - handelt visuals
        - falls keine agenten mehr idle sind, erlaubt er dem turnmanager den nächsten zug zu starten, sobald der spieler es verlangt
- **Pass**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - Setzt die Aktion des aktiven Agenten zurück und markiert ihn zum passen
- **OnNewTurn**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt nachdem alle entities ihre Züge durchgeführt haben
        - setzt interne values zurück und setzt values von agenten zurück um neuen Zug beginnen zu können
- **OnExecuteTurn**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt wenn die entities beginnen ihre züge auszuführen
- **SelectAction**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter: stat ([Agent](#Agent).Stat) der stat der zum interagieren genutzt werden soll
    - Aufgabe: 
        - Handelt visuals
        - Setzt aktives interactable mit stat als interaktion des aktiven agenten fest
- **ShowItems**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - Blendet die ActivationButtons der Items des aktiven Agenten ein
- **HideItems**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - Blendet die ActivationButtons der Items des aktiven Agenten aus
- **ToggleItems**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe:
        - Je nachdem ob die items gerade sichtbar sind wird ShowItems bzw HideItems aufgerufen
- **DrawReachable**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: befüllt tilemap mit den zellen die für den aktiven Agenten erreichbar sind
- **GetRemainingMovementRange**
    - Schutzgrad: private
    - Rückgabewert: int, den Abstand in Zellen den der aktive Agent noch zusätzlich laufen kann
    - Aufgabe: berechnet wie weit der aktive agent zusätzlich zu seinem momentanen movement laufen kann
        - falls additiveMovementSelection false ist wird hier die Bewegung nach dem Interactable ignoriert
- **HandleInput**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - inputManager ([InputManager](#InputManager)) der inputmanager der für die inputs verwendet werden soll
    - Aufgabe: wird einmal pro frame aufgerufen wenn der agentmanager der inputtaker mit der höchsten priorität ist
        - wird auch aufgerufen wenn es keinen input gibt
## Area
**Superklasse:** Ienumerable\<Vector2Int>
**Namespace:** utils
**Notes:**
Diese Klasse wird für die defienerung der Räume verwendet. Objekte dieser Klasse beschreiben ein Rechteck anhand zwei diagonal gegenüben liegenden Ecken.
**Felder:**
- **Corner1**
    - Schutzgrad: public
    - Typ: Vector2Int
    - Wert: die Position einer Ecke des Rechtecks dargestellt in GridSpace
- **Corner2**
    - Schutzgrad: public
    - Typ: Vector2Int
    - Wert: die Position der Ecke des Rechtecks, die Corner1 diagonal gegenüber liegt dargestellt in GridSpace
- **LowerLeft**
    - Schutzgrad: public
    - Typ: Vector2Int
    - Wert: die Position der unteren linken Ecke des Rechtecks dargestellt in GridSpace
        - Wird nicht gesetzt sondern mit Corner1 und Corner2 berechnet
- **UpperRight**
    - Schutzgrad: public
    - Typ: Vector2Int
    - Wert: die Position der oberen rechten Ecke des Rechtecks dargestellt in GridSpace
        - Wird nicht gesetzt sonder mit Corner1 und Corner2 berechnet
**Methoden:**
- **Ctor**
    - Schutzgrad: public
    - Rückgabewert: die Instanziierte Area
    - Parameter:
        - corner1 (Vector2Int) eine Ecke des Rechtecks
        - corner2 (Vector2Int) die diagonal gegenüber liegende Ecke des Rechtecks
    - Aufgabe: initialisiert eine Area
- **IsInArea**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob die angegebene Position in der Area ist
    - Parameter: 
        - pos (Vector2Int) die zu überprüfende Position
    - Aufgabe: überprüft ob eine bestimmte Zelle in der Area ist
- **GetEnumerator**
    - Schutzgrad: public
    - Aufgabe: Ermöglicht es über die Ecken der Area zu iterieren
- **Intersects**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob die angegebene Area sich mit dieser Area überschneidet
    - Parameter: 
        - other (Area) die zu überprüfende Area
    - Aufgabe: überprüft ob sich zwei Areas überschneiden
## CameraController
**Superklasse:** MonoBehaviour
**Notes:**
Diese Klasse wird verwendet, um die Kamera zu kontrollieren, die die Sicht des Spielers rendert. Sie sollte in jeder Szene nur einmal existieren.
**Felder**
- **panSpeed**
    - Schutzgrad: public
    - Typ: float
    - Wert: die Geschwindigkeit mit der die Kamera sich in x und y bewegen soll
- **scrollSpeed**
    - Schutzgrad: public
    - Typ: float
    - Wert: die Geschwindigkeit mit der die Kamera rein und raus zoomen soll
- **panBorderThickness**
    - Schutzgrad: public
    - Typ: float
    - Wert: die Entfernung vom Rand in der die Maus sich befinden darf, damit die Kamera beginnt, sich in eine Richtung zu bewegen
        - soll gesetzt werden zwischen 0 und 1
        - angegeben in Anteil von Bildschirmhöhe bzw -breite
- **BackgroundColor**
    - Schutzgrad: public
    - Typ: Color
    - Wert: die Farbe die der Hintergrund der Spielersicht haben soll
- **lowerBorderSize**
    - Schutzgrad: public
    - Typ: float
    - Wert: der Bereich am unteren Bildschirmrand, in dem sich die Maus befinden darf, ohne dass die Kamera sich bewegt
        - soll gesetzt werden zwischen 0 und 1
        - angegeben in Anteil von Bildschirmhöhe
- **upperBorderSize**
    - Schutzgrad: public
    - Typ: float
    - Wert: der Bereich am oberen Bildschirmrand, in dem sich die Maus befinden darf, ohne dass die Kamera sich bewegt
        - soll gesetzt werden zwischen 0 und 1
        - angegeben in Anteil von Bildschirmhöhe
- **leftBorderSize**
    - Schutzgrad: public
    - Typ: float
    - Wert: der Bereich am linken Bildschirmrand, in dem sich die Maus befinden darf, ohne dass die Kamera sich bewegt
        - soll gesetzt werden zwischen 0 und 1
        - angegeben in Anteil von Bildschirmbreite
- **rightBorderSize**
    - Schutzgrad: public
    - Typ: float
    - Wert: der Bereich am rechten Bildschirmrand, in dem sich die Maus befinden darf, ohne dass die Kamera sich bewegt
        - soll gesetzt werden zwischen 0 und 1
        - angegeben in Anteil von Bildschirmbreite
- **maxCamSize**
    - Schutzgrad: public
    - Typ: float
    - Wert: die größte Größe, die die Kamera durch Zoomen erlangen darf
- **minCamSize**
    - Schutzgrad: public
    - Typ: float
    - Wert: die kleinste Größe, die die Kamera durch Zoomen erlangen darf
- **cam**
    - Schutzgrad: public
    - Typ: Camera
    - Wert: die Kamera, die die Sicht des Spielers rendert
- **cam_size**
    - Schutzgrad: private
    - Typ: float
    - Wert: die aktuelle orthographic size von cam
- **mouseReactionDelay**
    - Schutzgrad: public
    - Typ: float
    - Wert: die Zeit in sekunden, die die Maus in einem Bewegungsbereich sein kann, bevor die Kamera beginnt sich zu bewegen
- **timeElapsed**
    - Schutzgrad: private
    - Typ: float
    - Wert: die Zeit in Sekunden, die vergangen ist, seit die Maus einen Bewegungsbereich gekommen ist
- **inputManager**
    - Schutzgrad: private
    - Typ: [InputManager](#InputManager)
    - Wert: der aktive InputManager der Szene
**Methoden**
- **Start**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht nach Szenenbeginn
- **Update**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht die einmal pro frame ausgeführt wird
## CameraDetector
**Superklasse:** [Detector](#Detector)
**Notes:**
Diese Klasse wird genutzt um die Sichtfelder von Kameras zu nutzen. Es wird eine eigene Subklasse implementiert, um das Verhalten bei Hacks für Kameras zu definieren
**Felder:**
- **Hacked**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob die Kamera gehackt ist (aktuell unter kontrolle des Spielers)
- **visibleGuards**
    - Schutzgrad: private
    - Typ: List\<[Guard](#Guard)>
    - Wert: sämtliche Guards die aktuell von der Kamera gesehen werden
        - wird nur aktualisiert wenn die kamera gehackt ist
- **guardsToRemove**
    - Schutzgrad: private
    - Typ: List\<[Guard](#Guard)>
    - Wert: sämtliche Guards, die im letzten Frame gesehen wurden und in diesem Frame nicht gesehen werden
**Methoden**
- **Update**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die einmal pro Frame ausgeführt wird
- **SeeObject**
    - Schutzgrad: public
    - Rückgabewert: void
    - overriden von [Detector](#Detector).SeeObject
    - Parameter: 
        - seenObject (GameObject) das Objekt dass sich im Sichtbereich befindet
    - Aufgabe: Wird von ViewConeVisualizer aufgerufen wenn ein GameObject im Sichtbereich gefunden wird
        - handelt das entdeck von Spielern bzw das sichtbar-machen von Guards je nach Hacking zustand
- **DoStealthCheck**
    - Schutzgrad: protected
    - Rückgabewert: void
    - overriden von [Detector](#Detector).DoStealthCheck
    - Parameter:
        - distance (int) entfernung zwischen dem Agenten und dem detector
        - agent ([Agent](#Agent)) der Agent der einen Stealth Check machen muss
    - Aufgabe: überprüft ob ein Agent gesichtet werden sollte
        - löst unter umständen ein quick time event aus, falls nötig
## CircuitComputer
**Superklasse:** Interactable
**Notes:**
Diese Klasse implementiert die Überwachungszentrale in den Levels. Wird ein CircuitComputer gehackt, sollen alle verbundenen Interactables ebenfalls gehackt werden.
**Felder:**
- **onCircuitComputerHack**
    - Schutzgrad: public
    - Typ: OnCircuitComputerHack (siehe Custom Types)
    - Wert: das Delegate das ausgeführt wird, wenn der Computer gehackt wird
- **onCircuitComputerRestore**
    - Schutzgrad: public
    - Typ: OnCircuitComputerRestore (siehe Custom Types)
    - Wert: das Delegate das ausgeführt wird, wenn der Computer repariert wird
- **state**
    - Schutzgrad: private
    - Typ: int
    - Wert: der Zustand des Interactables im Bezug auf sein Minigame
        - 0: idle, es läuft kein Minispiel und das letzte Minispiel wurde abgearbeitet
        - 1: das Minispiel läuft und wurde nicht beendet
        - 2: das Minispiel wurde beendet und sein ergebniss wurde noch nicht abgearbeitet
**Methoden:**
- **Start**
    - Schutzgrad: protected
    - Rückgabewert: void
    - overriden von [Interactable](#Interactable)
    - Aufgabe: Unity Nachricht zu Szenenbeginn
        - ruft base.Start() auf
- **GetInteractions**
    - Schutzgrad: public
    - Rückgabewert: List<\[Agent](#Agent).Stat> die möglichen Stats mit denen bei diesem Interactable interagiert werden kann
    - overriden von [Interactable](#Interactable)
    - Aufgabe: gibt eine Liste mit den Stats die bei diesem Interactable verwendet werden können
- **Interact**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob die Interaktion beendet wurde
    - overriden von [Interactable](#Interactable)
    - Parameter:
        - stat ([Agent](#Agent).Stat) der Stat der zum interagieren benutzt werden soll
        - statVAlue (int) der Wert den der Agent in diesem Stat benutzen kann
    - Aufgabe: handelt die interaktion mit dem interactable und stallt den Agenten bis diese beendet ist
        - diese funktion wird einmal pro Frame aufgerufen in dem der Agent mit dem interactable interagiert
- **Repair**
    - Schutzgrad: public
    - Rückgabewert: void
    - overriden von [Interactable](#Interactable)
    - Aufgabe: setzt die internen werte des Computers auf vor dem Hack zurück
        - ruft onCircuitComputerRestore auf
- **OnDone**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - success (bool) ob das Minigame für den Agenten erfolgreich war
    - Aufgabe: 
        - wird vom Minigame aufgerufen, wenn es beendet wird
        - ruft bei erfolg onCircuitComputerHack auf
**Custom Types**
- **OnCircuitComputerHack
    - Schutzgrad: public
    - Typ: delgate void, keine Parameter
    - Aufgabe: Funktionen, die ausgeführt werden sollen wenn der CircuitComputer gehackt wird, müssen diesem delegate entsprechen
- **OnCircuitComputerRestore
    - Schutzgrad: public
    - Typ: delegate void, keine Parameter
    - Aufgabe: Funktionen, die ausgeführt werden sollen wenn der CircuitComputer repariert wird, müssen diesem delegate entsprechen
## ComplicatedRoom
**Superklasse:** [Room](#Room)
**Notes:**
Diese Klasse wird für Räume verwendet, die nicht durch ein einzelnes Rechteck dargestellt werden können. Sie sind definiert durch eine Reihe an Rechtecken ([Areas](#Area)) die zusammen die Fläche des Raumes entsprechen.
**Felder:**
- **areas**
    - Schutzgrad: public
    - Typ: [Area](#Area)\[]
    - Wert: die Areas, die gemeinsam den Raum definieren
**Methoden**
- **Ctor**
    - Schutzgrad: public
    - Rückgabewert: der instanziierte ComplicatedRoom
    - Parameter:
        - areas ([Area](#Area)\[]) die Bereiche, die den Raum definieren
    - Aufgabe: instanziiert einen ComplicatedRoom
- **Ctor**
    - Schutzgrad: public
    - Rückgabewert: der instanziierte ComplicatedRoom
    - Parameter:
        - areas ((Vector2Int, Vector2Int)\[]) die Punkte, die die Areas definieren, die den Raum definieren
    - Aufgabe: instanziiert einen ComplicatedRoom
- **Ctor**
    - Schutzgrad: public
    - Rückgabewert: der instanziierte ComplicatedRoom
    - Parameter: 
        - area ((Vector2Int, Vector2Int)) die Punkte die die Area definieren, die den Raum definieren
    - Aufgabe: instanziiert einen ComplicatedRoom mit nur einer Area, weitere Areas sollten noch hinzugefügt werden, andernfalls könnte man einen RectRoom beutzen
- **IsInRoom**
    - Schutzgrad: public
    - Rückgabewert: bool, ob die Position sich in dem Raum befindet
    - Parameter:
        - pos (Vector2Int) die abgefragte Position in Grid Space
    - Aufgabe: überprüft ob eine Position in dem ComplicatedRoom ist
- **GetEnumerator**
    - Schutzgrad: public
    - ermöglicht es über die Bereiche des ComplicatedRooms zu iterieren
## CreditsScroller
**Superklasse:** Monobehaviour
**Notes:**
Diese Klasse wird benutzt, um die Credits in angemessener Geschwindigkeit über den Bildschirm ziehen zu lassen.
**Felder:**
- **scrollSpeed**
    - Schutzgrad: public
    - Typ: float
    - Wert: die Geschwindigkeit mit der die Credits sich bewegen
- **maxY**
    - Schutzgrad: public
    - Typ: float
    - Wert: die y Position an der die Credits verschwinden sollen und das Main Menu wieder auftauchen soll
- **mainParent**
    - Schutzgrad: public
    - Typ: GameObject
    - Wert: das ParentObjekt des Main Menus
- **\_transform**
    - Schutzgrad: private
    - Typ: RectTransform
    - Wert: das RectTransform des ParentObjekts der Credits
        - (das Objekt auf dem das Script sich befinden soll)
**Methoden:**
- **Start**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht an Szenenbeginn
        - setzt \_transform
- **Update**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die in jedem Frame einmal aufgerufen wird
## Detector
**Superklasse, Interface**: Monobehaviour, [IQuickTimeEventTrigger](#IQuickTimeEventTrigger)
**Subklassen:** [CameraDetector](#CameraDetector)
**Notes:**
Diese Klasse wird benutzt, um das sehen von Agenten durch Guards zu handeln. Für SecurityCameras gibt es die Subklasse [CameraDetector](#CameraDetector) um deren Hacked Verhalten zu handeln
**Felder**
- **MinAutoSuccess**
    - Schutzgrad: public
    - Typ: int
    - Wert: die kleinste Mögliche Statvalue, die bei einem stealth check noch erfolgreich ist, ohne ein QuickTimeEvent auszulösen
- **MinQuickTimeEvent**
    - Schutzgrad: public
    - Typ: int
    - Wert: die kleinste Mögliche Statvalue, die bei einem stealth check noch nicht verliert, ohne ein QuickTimeEvent auszulösen
- **agentDistances**
    - Schutzgrad: private, readonly
    - Typ: Dictionary\<[Agent](#Agent), int>
    - Wert: Die kleinste entfernung der gesehenen Agenten zum Detector, die sie je hatten
        - Key: Der gesehene Agent
        - Value: die Entfernung des Agenten
        - wird nur aktualisiert wenn der agent gesehen wird
- **holdingAgent**
    - Schutzgrad: protected
    - Typ: [Agent](#Agent)
    - Wert: Der Agent, für den gerade ein QuickTimeEvent läuft
- **onDetection**
    - Schutzgrad: public
    - Typ: OnDetection (siehe Custom Types)
    - Wert: delegate der ausgeführt wird, wenn ein Agent entdeckt wird
- **QuickTimeEventResolved**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob das laufende QuickTimeEvent beendet wurde
        - wird auf false gesetzt, wenn ein quickTimeevent gestartet wird durch [QuickTimeEventManager](#QuickTimeEventManager)
        - wird auf true gesetzt in ResolveQuickTimeEvent
**Methoden**
- **DoStealthCheck**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Parameter: 
        - distance (int) entfernung des Agenten zum Detector
        - agent ([Agent](#Agent)) der Agent der den Check machen muss
    - Aufgabe: überprüft ob ein Agent entdeckt werden müsste
        - löst ggf ein quickTimeEvent aus
- **SeeObject**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - seenObject (GameObject) das Objekt das sich im Sichtbereich befindet
    - Aufgabe:
        - wird einmal pro Frame für jedes Objekt im Sichtbereich aufgerufen
        - löst stealth checks aus
        - aktualisiert distances
- **OnTriggerEnter2D**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - collision (Collider2D) der Collider mit dem Collidiert wurde
    - Aufgabe: Unity Nachricht die aufgeruft wird, wenn ein Objekt den Collider betritt
- **ResolveQuickTimeEvent**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - AgentSuccessfull (bool) ob der Spieler das QuickTimeEvent erfolgreich absolviert hat
    - Aufgabe: wird aufgerufen wenn das QuickTimeEvent beendet wird
**Custom Types**
- **OnDetection**
    - Schutzgrad: public
    - Typ: delegate void, Parameter: Agent
    - Aufgabe: Funktionen die aufgerufen werden sollen, wenn der Detector einen Agenten erkennt, müssen diesem delegate entsprechen
## DisguiseKit
**Superklasse:** [StatOverWriteItem](#StatOverWriteItem)
**Notes:**
Diese Klasse wird genutzt, um die Werte eines DisguiseKit Items auszufüllen. Sie hat keine eigenen Methoden und setzt nur die benötigten werte in Start()
## Door
**Superklasse:** [Wall](#Wall)
**Notes:**
Diese Klasse wird genutzt um Türen im Pathfinding darzustellen. Sie wird immer in Verbindung mit [DoorInteractable](#DoorInteractable) verwendet.
**Felder:**
- **interactable**
    - Schutzgrad: public
    - Typ: [DoorInteractable](#DoorInteractable)
    - Wert: Das DoorInteractable das zu der Tür gehört
- **Open**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob die Tür geöffnet ist 
        - wird nicht gesetzt sondern leitet direkt zu interactable.open weiter
**Methoden**
- **Ctor**
    - Schutzgrad: public
    - Rückgabewert: die instanziierte Tür
    - Parameter:
        - cell (Vector2Int) eine Zelle an der die Tür anliegt
        - direction (Directions (siehe Custom Types von [Wall](#Wall))) die Richtung in der die Tür an die Zelle angrenzt
        - DI (DoorInteractable) das Interactable das zu der Tür gehört
    - Aufgabe: instanziiert die Tür
## DoorInteractable
**Superklasse, Interface:** Interactable, IQuickTimeEventTrigger
**Notes:**
Dieses Interactable wird benutzt um übergänge zwischen Räumen darzustellen. Türen können verschlossen oder offen sein, sie können Mechanisch oder Elektronisch funktionieren und sie können mit FIG aufgebrochen werden, was Guards alamieren kann.
**Felder:**
- **minigameHAC**
    - Schutzgrad: private, readonly
    - Typ: string
    - Wert: der Pfad innerhalb des Resourcen Ordners, der auf das Prefab des HAC minigames zeigt
- **buttonHAC**
    - Schutzgrad: private, readonly
    - Typ: string
    - Wert: der Pfad innerhalb des Resourcen Ordners, der auf das Prefab des HAC Interaction Buttons zeigt
- **buttonKEYCARD**
    - Schutzgrad: private, readonly
    - Typ: string
    - Wert: der Pfad innerhalb des Resourcen Ordners, der auf das Prefab des Keycard interaction Buttons zeigt
- **minigameMEC**
    - Schutzgrad: private, readonly
    - Typ: string
    - Wert: der Pfad innerhalb des Resourcen Ordners, der auf das Prefab des MEC minigames zeigt
- **buttonKEY**
    - Schutzgrad: private, readonly
    - Typ: string
    - Wert: der Pfad innerhalb des Resourcen Ordners, der auf das Prefab des KEY interaciton Buttons zeigt
- **buttonMEC**
    - Schutzgrad: private, readonly
    - Typ: string
    - Wert: der Pfad innerhalb des Resourcen Ordners, der auf das Prefab des MEC interaction Buttons zeigt
- **buttonUncover**
    - Schutzgrad: private, readonly
    - Typ: string
    - Wert: der Pfad innerhalb des Resourcen Ordners, der auf das Prefab des Uncover Room button zeigt
- **width**
    - Schutzgrad: private, readonly
    - static
    - Typ: flaot
    - Wert: die breite der Tür senkrecht zu ihrer ausrichtung
- **FIGMinMinigame**
    - Schutzgrad: public
    - Typ: int
    - Wert: die kleinste Statvalue die nicht automatisch verliert wenn ein Agent versucht die Tür mit FIG aufzubrechen
- **FIGMinAutoSuccess**
    - Schutzgrad: public
    - Typ: int
    - Wert: die kleinste Statvalue, die noch automatisch gewinn, wenn ein Agent versucht die Tür mit FIG aufzubrechen
- **AccessGroup**
    - Schutzgrad: public
    - Typ: int
    - Wert: die Gruppe zu die diese Tür gehört
        - Jede Gruppe wird durch einen Wert festgelegt
        - manche schlüssel haben ebenfalls einen solchen wert und können dann sämtliche Türen ihrer Gruppe öffnen
        - die tatsächliche größe hat keinen Einfluss
        - Schlüssel mit größerer Zahl können *nicht* Türen mit kleinerer Accessgroup öffnen
- **Type**
    - Schutzgrad: public
    - Typ: Stat (siehe Custom Types)
    - Wert: die Art der Tür (MEC, HAC oder Open)
- **Canvas**
    - Schutzgrad: public
    - Typ: Transform
    - Wert: das Elternobjekt unter denen die Interaction Buttons instantiated werden müssen
- **VisualsTransform**
    - Schutzgrad: public
    - Typ: Transform
    - Wert: der Transform des Objekts, das den Spriterenderer mit der DoorSprite hat
- **collider2D**
    - Schutzgrad: private
    - Typ: BoxCollider2D
    - Wert: der collider der Tür
- **spriteRenderer**
    - Schutzgrad: private
    - Typ: SpriteRenderer
    - Wert: Der Spriterenderer, der die DoorSprite rendert
- **state**
    - Schutzgrad: private
    - Typ: InteractionState (siehe Custom Types)
    - Wert: der Zustand der Tür in Bezug zu Interaction (idle, interacting oder done)
- **Door**
    - Schutzgrad: public (private set)
    - Typ: [Door](#Door)
    - Wert: die Tür die zu dem Interactable gehört
- **Open**
    - Schutzgrad: public (private set)
    - Typ: boolean
    - Wert: ob die Tür geöffnet ist
- **GridPosition**
    - Schutzgrad: protected
    - Typ: Vector2Int
    - Wert: eine der angrenzenden Zellen der Tür, je nachdem ob die entsprechenden Räume gecovered sind
- **QuicktimeEventResolved**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob das QuickTimeEvent beendet wurde
        - wird von [QuickTimeEventManager](#QuickTimeEventManager) auf false gesetzt
        - wird in ResolveQuickTimeEvent auf true gesetzt
- **uncoverRoomButton**
    - Schutzgrad: private
    - Typ: Button
    - Wert: der Button der zur Uncover Room interaction genutzt werden soll
**Methoden**
- **Start**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht zu Szenenbeginn
- **GetMinigamePath**
    - Schutzgrad: protected
    - Rückgabewert: string, der Pfad des entsprechenden Minigames
    - overriden von [Interactable](#Interactable)
    - Aufgabe: gibt den Pfad des gebrauchten Minigames depending on Door Type
- **GetGridPosition**
    - Schutzgrad: public
    - Rückgabewert: Vector2Int, die Zelle die für das Pathfinding verwendet werden soll
    - overriden von [Interactable](#Interactable)
    - Parameter: origin (Vector2Int) die Zelle von der aus ein Pfad gefunden werden muss
    - Aufgabe: berechnet die Zelle, die näher am Fragenden Entity ist
        - es gibt eine überladung ohne parameter, diese wirft einen Fehler da sie für eine Tür uneindeutig ist
- **GetInteractions**
    - Schutzgrad: public
    - Rückgabewert: List<\[Agent](#Agent).Stat>, die möglichen Stats mit denen mit der Tür interagiert werden kann
    - overriden von [Interactable](#Interactable)
    - Aufgabe: gibt die Stats zurück mit denen mit der Tür interagiert werden kann
- **Interact**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob die interaktion abgeschlossen ist
    - overriden von [Interactable(#Interactable)]
    - Parameter:
        - stat ([Agent](#Agent).Stat) der Stat der für die Interaktion genutzt werden soll
        - statValue (int) der Wert den der Agent für die interaktion nutzen kann
    - Aufgabe: handelt das interagieren mit der Tür
        - öffnet tür bei hinzeichendem statvalue
        - uncovered room falls tür bereits offen war
        - löst ggf. minigame aus
- **OnDone**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - success (bool) ob der Agent das Minigame erfolgreich abgeschlossen hat
    - Aufgabe:
        - wird vom Minigame aufgerufen, wenn dieses beendet wurde
        - öffnet ggf. die Tür
- **Repair**
    - Schutzgrad: public
    - Rückgabewert: void
    - overriden von [Interactable](#Interactable)
    - Aufgabe: setzt die entsprechenden Werte der Tür zurück, sodass sie wieder geschlossen ist
        - Räume werden nicht wieder gecovered
- **ShowInteractionButtons**
    - Schutzgrad: public
    - Rückgabewert: void
    - overriden von [Interactable](#Interactable)
    - Aufgabe:
        - blendet die dem Typ der Zustand der Tür entsprechenden Interaction Buttons ein
- **GetOpposingPosition**
    - Schutzgrad: public
    - Rückgabewert: Vector2Int, die gegenüberliegende Zelle
    - Parameter: 
        - position (Vector2Int) eine Position in einem der Räume, die an die Tür angrenzen
    - Aufgabe: gibt die Zelle an, die an die Tür angrenzt auf der Seite, auf der die gegebene Position nicht ist
- **HideInteractionButtons**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: blendet die Interaction buttons aus
- **SetOpenStates**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - open (bool) der neue open state
    - Aufgabe: öffnet bzw. schließt die tür und aktiviert die entsprechenden sprites
- **ResolveQuickTimeEvent**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - AgentSuccessfull (bool) ob der Agent das QuickTimeEvent erfolgreich absolviert aht
    - Aufgabe: wird ausgeführt wenn das QuickTimeEvent abgeschlossen ist, öffnet ggf die Tür
**Custom Types**
- **Stat**
    - Schutzgrad: public
    - Typ: enum
    - Aufgabe: stellt die art der tür da
        - kann in agent.stat gecastet werden um den entsprechenden stat zum interagieren zu erhalten
- **InteractionState**
    - Schutzgrad: private
    - Typ: enum
    - Aufgabe: stellt den status der Tür im bezug auf interaktion dar
        - idle bedeutet es wird nicht interagiert
        - interacting bedeutet ein Agent interagiert aktuell mit der tür und die interaktion wurde noch nicht abgeschlossen
        - done bedeutet ein Agent hat mit der Tür interagiert und der abschluss dieser interaktion wurde noch nicht bearbeitet
## Entity
**Superklasse:** GridObject
abstract
**Subklassen:** [AgentController](#AgentController), [Guard](#Guard)
**Notes:**
Entity dient als Superklasse für alle beweglichen Objekte die in Zügen aktionen ausführen. Da es sich um eine abstrakte Klasse handelt, soll sie nie direkt implementiert werden. 
**Felder:**
- **state**
    - Schutzgrad: public
    - Typ: State (siehe Custom Types)
    - Wert: den Bereich des Zuges in dem die Entity sich befindet
- **Sprite**
    - Schutzgrad: public
    - Typ: Sprite
    - Wert: Die Sprite, die die Entity in der Game World darstellt
**Methoden:**
- **TakeTurn**
    - Schutzgrad: public
    - abstract
    - Rückgabewert: void
    - Aufgabe: wird ein mal am Anfang des Zugs der entity aufgerufen, um ihn zu beginnen
        - sollte nur von TurnManager aufgerufen werden
- **OnDisable**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die aufgerufen wird wenn die Komponente deaktiviert wird
        - sorgt dafür, dass deaktivierte Entities nicht nicht zum Zug aufgerufen werden
- **GetGridPosition**
    - Schutzgrad: public
    - Rückgabewert: Vector2Int, die Position der Entity in Grid Space
    - overriden von GridObject
    - Aufgabe: gibt die Position der entitiy in Grid Space zurück
**Custom Types**
- **State**
    - Schutzgrad: public
    - Typ: enum
    - Aufgabe: stellt den Fortschritt einer Entity innerhalb eines Zuges dar
## GameInstanceManager
**Superklasse:** Monobehaviour
**Notes:**
Der GameInstanceManager ist für den wechsel zwischen Szenen verantwortlich. Er sorgt dafür, das die Agents mit ihren Stats und Items vom Hideout in die Stage und von der Stage ins Hideout geladen werden. Er wird anhand einen savestates initialisiert.
**Felder:**
- **AgentParentTag**
    - Schutzgrad: private, const
    - Typ: string
    - Wert: der Tag den der AgentParent haben muss
- **AgentPrefabPath**
    - Schutzgrad: private, const
    - Typ: string
    - Wert: der Pfad innerhalb des Resources Ordner, der zum Prefab der Agenten führt
- **MaxAgents**
    - Schutzgrad: public, const
    - Typ: int
    - Wert: die maximale Anzahl an Agenten, die ein Spieler angeheuert haben kann
- **MaxAgentsPerLevel**
    - Schutzgrad: public, const
    - Typ: int
    - Wert: die maximale Anzahl an Agenten, die in ein Level mitgenommen werden können
- **LockedStages**
    - Schutzgrad: public, readonly
    - Typ:string\[]
    - Wert: die namen der Stages die Unlocked werden könnne, in der Reihenfolge in der sie freigeschaltet werden sollen
- **AgentPrefab**
    - Schutzgrad: private
    - Typ: GameObject
    - Wert: das Prefab der Agenten
- **Current**
    - Schutzgrad: public
    - static
    - Typ: GameInstanceManager
    - Wert: der aktuel aktive GameInstanceManager
        - es sollte immer nur einen GameInstanceManager geben
        - wird geleert wenn man ins main menu geht, um den wechsel zwischen savestates zu vereinfachen
- **initialized**
    - Schutzgrad: private
    - Typ: boolean
    - Wert: ob die Init funktion bereits ausgeführt wurde
        - sorgt dafür das der gameinstancemanager nicht zwei mal initialisiert wird
- **NextID**
    - Schutzgrad: public
    - static
    - Typ: int
    - Wert: die kleinste unvergebene ID
        - durch das abrufen wird die ID nicht geclaimed, dafür muss ClaimNextID() verwendet werden
- **Money**
    - Schutzgrad: public
    - static
    - Typ: int
    - Wert: die Menge an Geld die der Spieler im Hideout zur verfügung hat
        - durch das setten dieses Wertes wird OnMoneyChange invoked
- **OnMoneyChange
    - Schutzgrad: public
    - Typ: UnityAction
    - Wert: die action die ausgeführt werden soll, wenn die Geldmenge verändert wird
- **Agents**
    - Schutzgrad: public
    - static
    - Typ: [OverseerAgent](#OverseerAgent)\[]
    - Wert: die Agenten die der Spieler angeheuert hat
- **SelectedAgents**
    - Schutzgrad: public
    - static
    - Typ: List\<int>
    - Wert: die indexe der Agenten in Agents, die der Spieler ins nächste Level mitnehmen will
- **OwnedItems**
    - Schutzgrad: public
    - static
    - Typ: List\<[OverseerItem](#OverseerItem)>
    - Wert: die Items die der Spieler besitzt und die keinem Agenten zugeordnet sind
- **UnlockedStages**
    - Schutzgrad: public
    - static
    - Typ: List\<string>
    - Wert: die Namen der Stages die der Spieler betreten kann
- **CurrentStage**
    - Schutzgrad: private
    - static
    - Typ: string
    - Wert: der Name der letzten stage die geladen wurde
        - wird aktualisiert direkt bevor eine stage geladen wird
**Methoden**
- **Init**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - state (SaveState) der SaveState der genutzt werden soll
    - Aufgabe: initialisiert den GameInstanceManager basierend auf einem SaveState
- **OnBeforeStageLoad**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob die Stage geladen werden darf
    - Parameter:
        - stageName (string) der Name der Stage, die geladen werden soll
    - Aufgabe: übeprüft, ob die stage geladen werden darf und setzt CurrentStage
- **OnAfterStageLoad**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt wenn die Szene fertig geladen wurde
        - spawnt agents
        - setzt movementspeed entsprechend der einstellungen
- **OnBeforeHideoutLoad**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt, bevor das Hideout von einer Stage geladen werden soll
        - speichert Geld, verhaftete Agenten, gesammelte Items, unlocked ggf nächste stage
        - speichert levelups
- **OnAfterHideoutLoad**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt nachdem das Hideout von einer Stage aus geladen wird
- **GetSelectedAgentByID**
    - Schutzgrad: private
    - Rückgabewert: int, der Index des Agenten mit der gegebenen ID in der Liste der SelectedAgents
    - Parameter:
        - ID (int) die ID des gesuchten Agenten
    - Aufgabe: findet den Index eines Agenten in der Liste der ausgewählten Agenten
## Generator
**Superklasse, Interface:** Interactable, IQuickTimeEventTrigger
**Notes:**
Dieses Interactable repräsentiert die Generatoren in den Levels. Wird ein Generator zerstört oder abgeschaltet, sollen alle verbundenen elektronischen Interactables ebenfalls ausgeschaltet werden. Es werden allerdings replacements guards für Kameras bereitgestellt.
**Felder**
- **onGeneratorDisable**
    - Schutzgrad: public
    - Typ: OnGeneratorDisable (siehe Custom Types)
    - Wert: der Delegate der aufgerufen wird, wenn der Generator abgeschalten wird
- **onGeneratorRestore**
    - Schutzgrad: public
    - Typ: OnGeneratorRestore (siehe Custom Types)
    - Wert: der Delegate, der aufgerufen wird, wenn der Generator repariert wird
- **minMiniGameFIG**
    - Schutzgrad: public
    - Typ: int
    - Wert: die kleinste Statvalue bei einer FIG interaktion, bei der noch ein Minigame aktiviert wird
- **minAutoSuccessFIG**
    - Schutzgrad: public
    - Typ: int
    - Wert: die kleinste Statvalue bei einer FIG interaktion, bei der der Agent automatisch erfolgreich ist
- **ConnectedCams**
    - Schutzgrad: public
    - Typ: List\<[SecurityCamera](#SecurityCamera)>
    - Wert: die Kameras, die an den Strom des Generators angeschlossen sind
- **figDisabled**
    - Schutzgrad: private
    - Typ: boolean
    - Wert: ob der Generator mit einer FIG interaktion abgeschaltet wurde
        - wenn das True ist, kann er nicht repariert werden
- **QuickTimeEventResolved**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob das laufende QuickTimeEvent beendet wurde
        - wird von [QuickTimeEventManager](#QuickTimeEventManager) auf false gesetzt und in ResolveQuickTimeEvent auf true
- **state**
    - Schutzgrad: private
    - Typ: State (siehe custom Types)
    - Wert: der momentane zustand des generators im bezug auf Minigames
**Methoden**
- **Start**
    - Schutzgrad: protected
    - overriden von [Interactable](#Interactable)
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht die nach Szenenbeginn aufgerufen wird
- **GetInteractions**
    - Schutzgrad: public
    - Rückgabewert: List\<[Agent](#Agent).Stat>
    - Aufgabe: gibt die Liste an Stats, die zum interagieren mit dem Interactable möglich sind
- **Interact**
    - Schutzgrad: public
    - Rückgabewert: boolean, ob die Interaktion beendet wurde
    - Parameter:
        - stat ([Agent](#Agent).Stat), der Stat der für die Interaktion benutzt werden soll
        - statValue (int) der Wert den der Agent in dem entsprechenden Stat benutzen darf
    - Aufgabe:
        - wird einmal pro frame aufgerufen, in dem der Agent mit dem interactable interagiert
        - handelt interaktionen, aktivierung von minigames und quick time event
- **Repair**
    - Schutzgrad: public
    - overriden von [Interactable](#Interactable)
    - Rückgabewert: void
    - Aufgabe: setzt interne Werte zurück sodass, der Generator wieder aktiv ist
        - ruft onGeneratorRestore auf
- **ResolveQuickTimeEvent**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - AgentSuccessfull (bool), ob der Agent das QuickTimeEvent erfolgreich absolviert hat
    - Aufgabe: wird aufgerufen wenn das QuickTimeEvent beendet wurde
- **ResolveMiniGame**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - AgentSuccessfull (bool), ob der Agent das Minigame erfolgreich absolviert hat
    - Aufgabe: wird aufgerufen, wenn das Minigame beendet oder abgebrochen wurde
**Custom Types**
- **OnGeneratorDisable**
    - Schutzgrad: public
    - Typ: delegate void, no parameter
    - Aufgabe: alle Funktionen, die aufgerufen werden sollen, wenn der Generator abgeschaltet wurde, müssen diesem delegate entsprechen
- **OnGeneratorRestore**
    - Schutzgrad: public
    - Typ: delegate void, no parameter
    - Aufgabe: alle Funktionen, die aufgerufen werden sollen, wenn der Generator repariert wurde, müssen diesem delegate entsprechen
- **State**
    - Schutzgrad: private
    - Typ: enum
    - Aufgabe: die unterschiedlichen zustände, die der generator im bezug auf minigames haben kann
        - Idle: kein minigame gestartet und das letzte minigame wurde abgearbeitet
        - MinigameActive: ein minigame ist aktuell am laufen
        - MinigameEnded: ein minigame wurde beendet und noch nicht abgearbeitet
## GlobalPrefs
**Namespace:** utils
**Notes:**
Diese Klasse wird genutzt um globale Einstellungen zwischen spielinstanzen zu speichern. Die Werte werden einnmalig angewendet, wenn die GlobalPrefs geladen werden und können dann verändert und neu abgespeichert werden. Zu beachten ist, das das Speichern nicht automatisch passiert, wenn ein Wert geändert wird sondern erst wenn [SaveSystem](#SaveSystem).SaveGlobalPrefs() aufgerufen wird.
**Felder:**
- **LastSaveSlot**
    - Schutzgrad: public
    - Typ: int
    - Wert: der letzte aktive saveslot
- **SlotNames**
    - Schutzgrad: public
    - Typ: Dictionary\<int, string>
    - Wert: die namen der einzelnen saves
        - Key: die Zahl des slots
        - Value: der Name des saves in dem slot
- **SoundVolumes**
    - Schutzgrad: public
    - Typ: Dictionary\<[SoundManager](#SoundManager).SoundDomain, float>
    - Wert: die unterschiedlichen lautstärkeeinstellungen
        - Key: die Domäne des Sounds (z.b. UI, Minigames, entities)
        - Value: die Lautstärkedomäne der Domäne als multiplier zwischen 0 und 1
- **KeyBinds**
    - Schutzgrad: public
    - Typ: Dictionary\<[InputManager](#InputManager).BindType, List\<KeyCode>>
    - Wert: die Tasten, die den Funktionen zugeordnet wurden
        - Key: die input Funktion
        - Value: die Liste an Tasten, die die Funktion auslösen sollen
- **MovementSpeed**
    - Schutzgrad: public
    - Typ: float
    - Wert: ein Multiplier der auf die Geschwindigkeit der entities angewendet wird, damit der spieler selbst wählen kann, wie lange er auf bewegung warten muss
**Methoden:**
- **Ctor**
    - Schutzgrad: public
    - Rückgabewert: die erstellte GlobalPrefs instanz
    - Parameter: die Werte für die Felder
    - Aufgabe: instanziiert ein neues globalprefs objekt
## GoldenWrench
**Superklasse:** StatOverwriteItem
**Notes:**
Diese Klasse wird benutzt, um eine GoldenWrench im Spiel darzustellen. Dieses Item kann genutzt werden, um die MEC Fähigkeiten eines Agenten zu ersetzen.
## Graph
*WIP*
## GridHelp
static
**Notes:**
Diese Klasse stellt einige Funktionen bereit, die es vereinfachen sollen mit Grid- und Worldspace zu arbeiten. Sie hat keine eigene Felder und sämtliche Funktionen sind statisch
**Methoden:**
- **CellToLocal**
    - Schutzgrad: public
    - static
    - Rückgabewert: Vector2, die gesuchte Position im Local space der grid (falls die grid sich nicht bei (0, 0) befindet)
    - Parameter:
        - cell (Vector2Int) die Position in GridSpace
    - Aufgabe:
        - wandelt eine Position von Grid space in localspace um
- **CellToWorld**
    - Schutzgrad: public
    - static
    - Rückgabewert: Vector2, die gesuchte Position in (global) World Space
    - Parameter: 
        - cell (Vector2Int) die Position in GridSpace
    - Aufgabe: wandelt eine Position von GridSpace in (global) World Space um
- **GridAligned**
    - Schutzgrad: public
    - static
    - Rückgabewert: Vector2, die Mitte der Zelle, in der sich die gegebene Position befindet
    - Parameter:
        - pos (Vector2) die gegebene Position
    - Aufgabe: findet die Zelle, in der sich eine gegebene Position befindet und gibt die Position der Mitte dieser Zelle zurück
- **GetAverageCell**
    - Schutzgrad: public
    - static
    - Rückgabewert: Vector2Int, die Zelle in der Mitte der gegebenen Zellen
    - Parameter: 
        - cells (Vector2Int) die Zellen deren Mitte gefunden werden soll
    - Aufgabe: berechnet die Zelle die Mittig zwischen den anderen Zellen liegt
        - die zurückgegebene Zelle hat die Durchschnittliche Position der Zellen und muss nicht notwendigerweise in cells enthalten sein
## GridObject
**Superklasse:** Monobehaviour
**Subklassen:** Item, Interactable, Entity
**Notes:**
Diese Klasse soll als Superklasse für alle Objekte dienen, die sich in den Stages befinden. Die einzige Ausnahme sind hier Wände, da sie sich nicht in den Zellen sondern auf den Grenzen der Zellen befinden.
**Felder**
- **GridPosition**
    - Schutzgrad: protected
    - Typ: Vector2Int
    - Wert: die Position des objekts in GridSpace
- **obstacle**
    - Schutzgrad: private
    - Typ: [Obstacle](#Obstacle)
    - Wert: das Obstacle, dass das Objekt im Pathfinding darstellt
        - *might be obsolete with Pathfinding v2?*
**Methoden**
- **Awake**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe: Unity-Nachricht, die zu szenenbeginn ausgeführt wird
        - setzt die ursprüngliche gridposition
- **Start**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe: Unity-Nachricht, die nach Szenenbeginn ausgeführt wird
        - ruft addObstacle auf *possibly obsolete in pathfinding v2?*
- **Update**
    - Schutzgrad: protected
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die in jedem Frame einmal ausgeführt wird
        - aktualisiert die gridposition *possibly obsolete soon*
- **GetGridPosition**
    - Schutzgrad: public
    - Rückgabewert: Vector2Int, die Position die bei diesem Objekt zum pathfinding benutzt werden soll
    - Aufgabe: gibt die Position, die bei diesem Objekt zum Pathfinding benutzt werden soll
- **GetGridPosition**
    - Schutzgrad: public
    - Rückgabewert: Vector2Int, die Position, die bei diesem Objekt für das Pathfinding benutzt werden soll
    - Parameter:
        - origin (Vector2Int), die Position in gridspace von der aus das Pathfinding ausgeführt werden soll
    - Aufgabe: gibt die Position, die bei diesem Objekt für das Pathfinding benutzt werden soll
- **AddObstacle**
    - *WIP*
- **UpdateObstacle**
    - *WIP*
## GridWalls
**Superklasse:** Monobehaviour
**Notes:**
Die GridWalls-Klasse ist für die Organisation der Wände zuständig. Sie zeichnet die Wände im Editor und Instanziiert die benötigten Objekte für die Wände wenn das Spiel ausgeführt wird.
**Felder:**
- **oldColor**
    - Schutzgrad: private, only exists if compiled for unity_editor
    - Typ: Color
    - Wert: die Farbe in der die Wände momentan gemalt werden
        - wird genutzt, um zu überprüfen, ob die Farbe geändert wurde
- **oldWidth**
    - Schutzgrad: private, only exists if compiled for unity_editor
    - Typ: float
    - Wert: die momentane breite der Wände
        - wird genutzt, um zu überprüfen, ob die Breite geändert wurde
- **wallColor**
    - Schutzgrad: public
    - Typ: Color
    - Wert: die Farbe in der die Wände angezeigt werden sollen
- **wallWidth**
    - Schutzgrad: public
    - Typ: float
    - Wert: die Breite mit der die Wände dargestellt werden sollen
- **wallMat**
    - Schutzgrad: public
    - Typ: Material
    - Wert: das Material, das die Linernderer für die Wände benutzen sollen
- **SortingLayerName**
    - Schutzgrad: public
    - Typ: string
    - Wert: der Name der Layer in dem die Wände gerendert werden sollen
- **walls**
    - Schutzgrad: public
    - Typ: [Wall](#Wall)\[\]
    - Wert: die Wänder die in der Szene existieren sollen
- **ls**
    - Schutzgrad: private
    - Typ: List\<[Line](#Line)>
    - Wert: die Lines, die die Wände darstellen
- **g**
    - Schutzgrad: private
    - Typ: grid
    - Wert: die Grid auf der die Wände alligned werden sollen
**Methoden**
- **OnDrawGizmos**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: UnityNachricht die ausgeführt wird, wenn die Gizmos in die Szene gerendert werden sollen (SceneView only)
        - wird genutzt um die Wände in der scene view darzustellen
- **Awake**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die zu Szenenbeginn ausgeführt wird
- **Start**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die nach Szenebeginn ausgeführt wird
- **Update**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die in jedem Frame einmal ausgeführt wird
        - wird genutzt um dicke und farbe der wände zu aktualisieren (nur in UnityEditor)
- **CheckLineSettings**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Überprüft, ob die aktuelle Breite und Farbe der Linien die eingestellte ist
- **AddWall**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - w (Wall) die Wand, die hinzugefügt werden soll
    - Aufgabe: fügt eine Wand der Liste hinzu
- **RemoveWall**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter: 
        - i (int) der Index der zu entfernenden Wall
    - Aufgabe: entfernt eine Wand aus der Szene 
## Guard
**Superklasse:** Entity
**Notes:**
Diese Klasse ist für die Bewegung der Wache zuständig.Die Klasse handelt auch das Sehen eines Agenten durch den [Detector](#Detector). Jede Wache hat eine Guard, ein [GuardInteractable](#GuardInteractable) einen [Detector](#Detector) und einen [ViewConeRenderer](#ViewConeRenderer).
**Felder:**
- **PathPositions**
    - Schutzgrad: public
    - Typ: List\<Transform>
    - Wert: Die Positionen und Rotationen, die die Wache beim Patroullieren ablaufen soll
        - wird im inspector gesetzt
        - sollten children des eigenen Transforms sein
- **MovementRange**
    - Schutzgrad: public
    - Typ: int
    - Wert: die maximale anzahl an Schritten, die die Guard in einem Zug gehen darf
- **GuardsMutedIfInvisible**
    - Schutzgrad: public
    - static
    - Typ: boolean
    - Wert: ob Guards, die nicht sichtbar sind auch keine Geräusche von sich geben sollen (sowas wie noticesus, nevermind etc.)
- **stepsTaken**
    - Schutzgrad: private
    - Typ: int
    - Wert: die anzahl an Schritten, die die Guard in diesem Zug bereits gegangen ist
- **activationLevel**
    - Schutzgrad: public
    - Typ: int
    - Wert: das kleinste SUSLevel, bei dem die Guard aktiv wird
- **Hidden**
    - Schutzgrad: public
    - Typ: boolean
    - Wert: ob die Guard momentan unsichtbar ist
        - ist true wenn kein Agent im gleichen Raum ist und die Guard sich nicht im Sichtbereich einer gehackten Kamera befindet
- **Active**
    - Schutzgrad: public
    - Typ: bool
    - Wert: ob die Wache aktiv ist
        - wenn dieses Feld auf wahr gesetzt wird, wird ein geräusch abgespielt und das interactable repariert
        - wenn dieses Feld auf false gesetzt wird, wird [Interactable](#GuardInteractable).TakeOut() ausgeführt
- **CurrentPathIndex**
    - Schutzgrad: private
    - Typ: int
    - Wert: der Index der Position in PathPositions, auf die die Wache sich zu bewegt
        - ist immer zwischen 0 und PathPositions.Count
- **investigationPathIndex**
    - Schutzgrad: private
    - Typ: int
    - Wert: der Index des InvestigationPoints, auf den die Wache sich zu bewegt
- **fromCell**
    - Schutzgrad: private
    - Typ: Vector3
    - Wert: die WorldPosition der Zelle, von der die Wache sich weg bewegt
- **toCell**
    - Schutzgrad: private
    - Typ: Vector3
    - Wert: die Worldposition der Zelle, auf die die Wache sich zu bewegt
- **turning**
    - Schutzgrad: private
    - Typ: bool
    - Wert: ob die Wache sich gerade dreht
- **t**
    - Schutzgrad: private
    - Typ: float
    - Wert: der anteil des weges zwischen fromCell und toCell den die wache hinter sich gebracht hat
        - 0 bedeutet er ist genau auf fromCell
        - 1 bedeutet er ist genau auf toCell
- **path**
    - Schutzgrad: private
    - Typ: [Path](#Path)
    - Wert: der Pfad den die Wache gerade abläuft (pathfinding pfad, nicht patroullie)
- **movementTargetChanged
    - Schutzgrad: private
    - Typ: bool
    - Wert: ob sich das Movementtarget seit dem letzten TakeStep() geändert hat
- **CurrentMovementTarget**
    - Schutzgrad: private
    - Typ: Vector2Int
    - Wert: das momentane Ziel der Wache
        - im Setter dieses Feldes wird movementTargetChanged auf true gesetzt
- **detector**
    - Schutzgrad: private
    - Typ: [Detector](#Detector)
    - Wert: der Detector der Wache
- **ObjectToInvestigate**
    - Schutzgrad: public
    - Typ: GridObject
    - Wert: das Objekt, dass die Aufmerksamkeit der Wache erregt hat
        - im setter dieses felds wird auch die Guardstate gesetzt und der NoticeSus sound gespielt
- **Interactable**
    - Schutzgrad: public
    - Typ: [GuardInteractable](#GuardInteractable)
    - Wert: das GuardInteractable das zu dieser Wache gehört
- **figValue**
    - Schutzgrad: private
    - Typ: int
    - Wert: der Wert den der entdeckte Agent in FIG benutzen darf
        - wird extra abgespeichert, damit nicht mehrere uses für fig eingetragen werden
- **spriteRenderer**
    - Schutzgrad: private
    - Typ: SpriteRenderer
    - Wert: der Renderer, der die Sprite der Wache anzeigt
- **viewCone**
    - Schutzgrad: private
    - Typ: [ViewConeVisualizer](#ViewConeVisualizer)
    - Wert: der ViewconeVisualizer der Wache
- **ghost**
    - Schutzgrad: private
    - Typ: GameObject
    - Wert: das GameObject das den Ghost der Guard darstellt
- **ghostPath**
    - Schutzgrad: private, const
    - Typ: string
    - Wert: der Pfad im Resources Ordner, an dem das Prefab für die Guard Ghosts liegt
- **guardState**
    - Schutzgrad: private
    - Typ: GuardState (siehe custom types)
    - Wert: der momentane aktivität der Wache über mehrere Züge
**Methoden:**
- **Awake**
    - Schutzgrad: protected
    - overriden von [GridObject](#GridObject)
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht die zu Szenenbgeinn ausgeführt wird
- **Start**
    - Schutzgrad: protected
    - overriden von [GridObject](#GridObject)
    - Aufgabe: Unity Nachricht, die nach Szenenbeginn ausgeführt wird
- **Show**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: macht die guard sichtbar
- **Hide**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: macht die guard unsichtbar
- **TakeTurn**
    - Schutzgrad: public
    - overriden von [Entitiy](#Entity)
    - Rückgabewert: void
    - Aufgabe: beginnt den Zug der Wache
- **Update**
    - Schutzgrad: protected
    - overriden von [GridObject](#GridObject)
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die in jedem Frame einmal ausgeführt wird
- **StartArrest**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter: agent ([AgentController](#AgentController)) der Agent der festgenommen werden soll
    - Aufgabe: lässt die Wache einen Agenten festnehmen, sobald sie am Zug ist
- **TakeStep**
    - Schutzgrad: private
    - Rückgabewert: boolean, ob die Wache CurrentMovementTarget erreicht hat
    - Aufgabe: bewegt die Wache in die benötigte Richtung
- **TurnTowards**
    - Schutzgrad: private
    - Rückgabewert: booolean, ob die Wache die Ziel Rotation erreicht hat
    - Aufgabe: dreht die Wache in eine benötigte Richtung
- **OnDetection**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt, wenn der [Detector](#Detector) etwas entdeckt
**Custom Types:**
- **GuardState**
    - Schutzgrad: public
    - Typ: enum
    - Aufgabe: stellt die Aktivität der Wache über mehrere Runden dar
        - WalkingPath: die Wache Patroulliert ohne etwas bemerkt zu haben
        - Investigating: die Wache hat etwas bemerkt und sieht es sich näher an
        - InvestigatingArea: die Wache hat etwas bemerkt und sieht sich die InvestigationPoints an
        - Arresting: die Wache hat einen Agenten ausgeknocket und bring ihn in Gefängnis
## GuardInteractable
**Superklasse, Interface:** Interactable, IQuickTimeEventTrigger
**Notes:**
Diese Klasse ermöglicht das Interagieren mit den Wachen.
**Felder:**
- **guard**
    - Schutzgrad: private
    - Typ: [Guard](#Guard)
    - Wert: die Guard die zu der Wache gehört
- **viewCone**
    - Schutzgrad: private
    - Typ: [ViewConeVisualizer](#ViewConeVisualizer)
    - Wert: der ViewConeVisualizer der zu der Wache gehört
- **clickCollider**
    - Schutzgrad: private
    - Typ: Collider2D
    - Wert: der Collider der zum anclicken der Wache genutzt werden soll
- **QuickTimeEventResolved**
    - Schutzgrad: public
    - Typ: bool
    - Wert: ob das QuickTimeEvent abgeschlossen wurden
        - wird von [QuickTimeEventManager](#QuickTimeEventManager) auf false gesetzt wenn quicktimeevent gestartet wird
        - wird in QuickTimeEventResolved auf true gesetzt
**Methoden:**
- **Awake**
    - Schutzgrad: protected
    - overriden von: [GridObject](#GridObject)
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht die zu Szenenbeginn ausgeführt wird
- **GetInteractions**
    - Schutzgrad: public
    - overriden von [Interactable](#Interactable)
    - Rückgabewert: List\<[Agent](#Agent).Stat> die Stats die zur interaktion mit der wache genutzt werden dürfen
    - Aufgabe: gibt die Liste ans Stats die zu Interaktion mit der Wache genutzt werden dürfen
- **Interact**
    - Schutzgrad: public
    - overriden von [Interactable](#Interactable)
    - Rückgabewert: bool, ob die Interaktion beendet sit
    - Aufgabe: erlaubt interaktion mit dem guard
        - startet ggf. quicktimeevents
- **TakeOut**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - playSound (bool) ob ein Geräusch ertönen soll wenn die guard ausgeknocked wird (default true)
    - Aufgabe: deaktiviert eine wache
- **Repair**
    - Schutzgrad: public
    - overriden von [Interactable(#Interactble)]
    - Rückgabewert: void
    - Aufgabe: setzt die Werte der Wache zurück, sodass sie wieder aktiv ist
- **ResolveQuickTimeEvent**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - AgentSuccessfull (bool) ob der Agent das QuickTimeEvent erfolgreich absolviert hat
    - Aufgabe:
        - wird ausgeführt wenn ein QuickTimeEvent beendet wurde
- **TakeOutAgent**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - agent ([AgentController](#AgentController)) der Agent der ausgeknocked werden soll
    - Aufgabe: knocked einen agenten aus und beginnt die festnahme
## GuardManager
**Superklasse:** Monobehaviour
**Notes:**
Diese Klasse ist für die Organisation der Wachen zuständig. Es sollte sie in jeder Stage genau einmal geben und außerhalb von Stages gar nicht.
**Felder:**
- **Speed**
    - Schutzgrad: public
    - Typ: float
    - Wert: Standardgeschwindigkeit mit der sich die Wachen bewegen sollen
- **InvisibleSpeed**
    - Schutzgrad: public
    - Typ: float
    - Wert: Geschwindigkeit mit der sich die Wachen bewegen sollen, wenn sie unsichtbar sind
- **RotationSpeed**
    - Schutzgrad: public
    - Typ: float
    - Wert: Geschwindigkeit mit der sich die Wachen drehen sollen wenn sie sichtbar sind
- **InvisibleRotationSpeed**
    - Schutzgrad: public
    - Typ: float
    - Wert: Geschwindigkeit mit der sich die Wachen drehen sollen, wenn sie unsichtbar sind
- **JailPosition**
    - Schutzgrad: public
    - Typ: Vector2Int
    - Wert: Position in Grid Space zu der die Guards ausgeknockte agenten bringen sollen, bevor sie zurück zu ihrer patroullie gehen
- **Guards**
    - Schutzgrad: public
    - Typ: List\<[Guard](#Guard)>
    - Wert: Liste alle Guards die sich in der Szene befinden
- **ActivationLevels**
    - Schutzgrad: private, readonly
    - Typ: List\<List\<[Guard](#Guard)]>>
    - Wert: Liste an Listen an Guards mit den Activation Levels die den Indexen der Listen entsprechen
        - example: an ActivationLevels\[1\] sind die Wachen, die ActivationLevel 1 haben
- **visibleGuards**
    - Schutzgrad: privat, readonly
    - Typ: List\<[Guard](#Guard)>
    - Wert: Liste an Guards die momentan wegen gehackten Kameras sichtbar sind
- **GuardGhostParent**
    - Schutzgrad: public
    - Typ: Transform
    - Wert: das Transform das als Parent für die GuardGhosts genutzt werden soll
        - wird im inspector gesetzt
**Methoden:**
- **Awake**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die einmal zu Szenenbeginn ausgeführt wird
- **Start**
    - Schutzgrad: private
    - Typ: void
    - Wert: Unity Nachricht, die einmal nach Szenenbeginn ausgeführt wird
- **AddVisibleGuard**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter: 
        - g (Guard) die Guard die sichtbar gemacht werden soll
    - Aufgabe: fügt eine guard zu visibleGuards hinzu und macht sie sichtbar
- **RemoveVisibleGuard**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - g (Guard) die Guard die aus visibleGuards entfernt werden soll
    - Aufgabe: entfernt eine guard aus visibleGuards
        - falls keine Agenten im gleichen Raum wie die Guard sind, wird die Guard unsichtbar gemacht
- **AddActivationLevel**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - guard (Guard) die Guard die eingetragen werden soll
        - level (int) das activationlevel der guard
    - Aufgabe:
        - trägt eine Wache in ActivationLevels ein
- **GeneratorDisabled**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter: 
        - generator (Generator) der Generator der ausgefallen ist
    - Aufgabe: wird aufgerufen wenn ein generator abgeschaltet wird
        - aktiviert replacementguards für die kameras
- **RaiseSuspicionLevel**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - newSuspicionLevel (int) das neue SUSLevel
    - Aufgabe: aktiviert guards basierend auf dem neuen suspicion level
## HACMinigame
**Superklasse, Interface:** Minigame, [IInputTaker](#IInputTaker)
**Notes:** 
Diese Klasse implementiert das Minigame fürs Hacken. In diesem Minigame muss der Spieler seine Maus entlang einer weißen Linie bewegen, ohne diese zu verlassen. Die Schwierigkeit des Minigames bestimmt die Anzahl der Ecken und die breite der Linie.
**Felder:**
- **maxDistFinalZone**
    - Schutzgrad: private, const
    - Typ: int
    - Wert: die maximale Entfernung, die die Maus zur Position des Zielbereichs haben darf, um als im Ziel zu gelten 
    - > [name=Gymnier](Hier bin ich mir nicht sicher, bitte Überprüfen)<
- **maxDistStartZone**
    - Schutzgrad: private, const
    - Typ: int
    - Wert: die maximale Entfernung, die die Maus zur Position des Startbereichs haben darf, um als im Start zu gelten
- **maxFails**
    - Schutzgrad: private, const
    - Typ: int
    - Wert: die maximale Anzahl an Misserfolgen die man haben darf, bevor das Minigame als erfolglos abgebrochen wird
- **fadeDuration**
    - Schutzgrad: public
    - static
    - Typ: float
    - Wert: die Zeit in Sekunden in der der Hintergrund einmal rot aufblinkt und wieder weiß wird
- **WidthMultiplier**
    - Schutzgrad: public
    - static
    - Typ: float
    - Wert: mutliplier der mit der difficulty multipliziert von der standard dicke der linie (45) abgezogen wird
- **Panel**
    - Schutzgrad: public
    - Typ: Image
    - Wert: Das Bild, dessen Farbe beim Blinken angepasst werden soll
- **Canvas**
    - Schutzgrad: public
    - Typ: Canvas
    - Wert: das Parentobjekt der gesamten Minigame UI
- **Background**
    - Schutzgrad: public
    - Typ: Image
    - Wert: das Bild, das den Hintergrund zeigt, den man mit der Maus nicht betreten darf
- **LR**
    - Schutzgrad: public
    - Typ: UILineRenderer
    - Wert: der linerenderer, der den Pfad anzeigt, den man mit der Maus gehen soll
- **startZone**
    - Schutzgrad: public
    - Typ: RectTransform
    - Wert: der Transform des Startbereichs
- **finalZone**
    - Schutzgrad: public
    - Typ: RectTransfrom
    - Wert: der Transform des Zielbereichs
- **interactable**
    - Schutzgrad: private
    - Typ: [Interactable](#Interactable)
    - Wert: das Interactable, dass das Minigame ausgelöst hat
- **LROffset**
    - Schutzgrad: private
    - Typ: Vector3
    - Wert: der Abstand, den die linke untere Ecke des Backgrounds von der Mitte des Bildschirms hat
- **verts**
    - Schutzgrad: private
    - Typ: Vector2\[\]
    - Wert: die Punkte, die der LineRenderer mit Linien verbindet
- **width**
    - Schutzgrad: private
    - Typ: float
    - Wert: die Dicke der Linie
- **difficulty**
    - Schutzgrad: private
    - Typ: int
    - Wert: die Schwierigkeit des Minigames
        - sollte zwischen 0 und 5 liegen
- **numOfSegments**
    - Schutzgrad: private
    - Typ: int 
    - Wert: die Anzahl an Kurven, die der Pfad haben soll
- **state**
    - Schutzgrad: private
    - Typ: State (siehe Custom Types)
    - Wert: der Zustand des Minigames in Bezug auf Spielerfortschritt
- **fails**
    - Schutzgrad: private
    - Typ: int
    - Wert: wie oft der Spieler beim Tracen die Linie verlassen hat
**Methoden:**
- **StartMinigame**
    - Schutzgrad: public
    - overriden von [Minigame](#Minigame)
    - Rückgabewert: void
    - Parameter:
        - difficulty (int), wie schwierig das Minigame sein soll (sollte zwischen 1 und 5 liegen)
        - interactable (Interactable), das Interactable, das das Minigame ausgelöst hat
    - Aufgabe:
        - aktiviert das minigame
        - holt und zeichnet den Pfad
- **ApplyDifficulty**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: setzt die internen Werte, die durch die Schwierigkeit verändert werden
- **GeneratePath**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - segmentCount (int) die Anzahl an Segmenten aus denen der Pfad bestehen soll
    - Aufgabe:
        - generiert den Pfad, den der Spieler verfolgen soll
- **InFinalZone**
    - Schutzgrad: private
    - Rückgabewert: bool, ob die Maus sich in dem Zielbereich befindet
    - Parameter:
        - mousePos (Vector2) die Position der Maus auf dem Bildschirm
    - Aufgabe: überprüft ob die Maus sich in dem Zielbereich befindet
- **InStartZone**
    - Schutzgrad: private
    - Rückgabewert: bool, ob die Maus sich in dem Startbereich befindet
    - Parameter: 
        - mousePos (Vector2) die Position der Maus auf dem Bildschirm
    - Aufgabe: überprüft, ob die Maus sich in dem Zielbereich befindet
- **OnLine**
    - Schutzgrad: private
    - Rückgabewert: bool, ob die Maus sich über der Linie befindet
    - Parameter:
        - mousePos (Vector2) die Position der Maus auf dem Bildschirm
    - Aufgabe: überprüft, ob die Maus sich über der Linie befindet
- **ToLineSpace**
    - Schutzgrad: private
    - Rückgabewert: Vector2 die gegebene Position relativ zur position des Linerenderers
    - Parameter:
        - pixelSpaceCoord (Vector2) die Position in UI Space
    - Aufgabe: rechnet die gegebene UI Space Position um in ihre Position relativ zum LineRenderer
- **Blink**
    - Schutzgrad: private
    - Rückgabewert: IEnumerator
    - Parameter:
        - col (Color) die Farbe mit der der Hintergrund blinken soll
    - Aufgabe: lässt ein GameObject Asynchron blinken, sodass es nicht die restlichen Funktionen aufhält
- **Exit**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter: 
        - success (bool) ob das Minigame erfolgreich abgeschlossen wurde
    - Aufgabe: deaktiviert das Minigame und teilt dem Interactable mit ob der Agent erfolgreich war
- **HandleInput**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - inputManager (InputManager) der aktive InputManager
    - Aufgabe: wird einmal pro Frame vom InputManager aufgerufen, wenn das Minigame der aktive InputTaker ist
        - soll gegebene Inputs abarbeiten
**Custom Types:**
- **State**
    - Schutzgrad: private
    - Typ: enum
    - Aufgabe: stellt den Zustand des Minigames in Bezug auf den Fortschritt des Spielers dar
        - IDLE bedeutet der Spieler hat noch nicht begonnen die Linie zu verfolgen
        - RETURNING bedeutet der Spieler hat die Linie verlassen und bringt nun die Maus zurück in die Startposition
        - TRACING bedeutet der Spieler verfolgt die Linie
        - ARRIVED bedeutet der Spieler hat den Zielbereich erreicht
## HideOutUIManager
**Superklasse, Interface:** Monobehaviour, [IInputTaker](#IInputTaker)
**Notes:**
Diese Klasse handelt die unterschiedlichen Ansichten, die im Hideout angezeigt werden. Sie speichert in welcher Reihenfolge welche "Fenster" geöffnet wurden und öffnet und schließt sie entsprechend der Inputs.
**Felder:**
- **openButtons**
    - Schutzgrad: public
    - Typ: List\<Button>
    - Wert: wenn diese Knöpfe gedrück werden soll jeweils ein entsprechendes Fenster geöffnet werden
        - es ist wichtig das die Knöpfe in der gleichen Reihenfolge eingetragen sind wie ihre entsprechenden Fenster in windows
        - werden im Inspektor gesetzt
- **closeButtons**
    - Schutzgrad: public
    - Typ: List\<Button>
    - Wert: wenn diese Knöpfe gedrückt werden, soll das aktive Fenster geschlossen werden
- **windows**
    - Schutzgrad: public
    - Typ: List\<GameObject>
    - Wert: die Objekte die aktiviert werden müssen wenn die entsprechenden Fenster geöffnet werden sollen
        - es ist wichtig das diese Objekte in der gleichen Reihenfolge eingetragen sind, wie ihre entsprechenden openButtons in openButtons
        - werden im Inspektor gesetzt
- **homeScreen**
    - Schutzgrad: public
    - Typ: GameObject
    - Wert: das Fenster das angezeigt werden soll, wenn alle anderen Fenster geschlossen wurden
- **windowStack**
    - Schutzgrad: private, readonly
    - Typ: Stack\<GameObject>
    - Wert: die geöffneten Fenster
        - das älteste Fenster ist als erstes im Stack
        - wenn ein Fenster geschlossen wird, wird das nächste im stack geöffnet
- **LevelUpChart**
    - Schutzgrad: private
    - Typ: GameObject
    - Wert: das Prefab des GameObjects, das nach einem Level für je einen Agenten die LevelUps anzeigt
- **LevelUpParent**
    - Schutzgrad: public
    - Typ: Transform
    - Wert: das Transform das als Parent der LevelUpCharts dienen soll
- **LevelUpWindow**
    - Schutzgrad: public
    - Typ: GameObject
    - Wert: das GameObject das als Parent von allen LevelUp UI Elementen dienen soll
**Methoden:**
- **Awake**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht die bei Szenenbeginn ausgeführt wird
- **Start**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die nach Szenenbeginn ausgeführt wird
- **ActivateWindow**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter: 
        - window (GameObject), das Fenster das aktiviert werden soll
    - Aufgabe: blendet das alte aktive Fenster aus, aktiviert das neue und fügt es dem windowstack hinzu
- **CloseWindow**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: blendet das aktive Fenster aus und aktiviert das erste aus dem windowstack
- **OnSaveButton**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt, wenn der "Save" Button gedrückt wird
- **OnMainMenuButton**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt, wenn der "Leave" Button gedrückt wird
- **HandleInput**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - inputManager (InputManager) der aktive InputManager
    - Aufgabe: wird einmal pro frame vom InputManager ausgeführt
        - wird auch ausgeführt wenn es keinen Input gibt
- **ShowLevelUps**
    - Schutzgrad: public
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt, wenn man HideOut von einer Stage aus lädt
        - instanziiert die LevelUpCharts und zeigt, wie sich die Agenten in den unterschiedlichen Stats verbessert haben
## HiringWindowManager
**Superklasse:** MonoBehaviour
**Notes:**
Diese Klasse ermöglicht das anheuern von Agenten im HideOut.
**Felder:**
- **Agents**
    - Schutzgrad: public, readonly
    - Typ: List\<HiringAgent> (siehe Custom Types)
    - Wert: die Liste an Agenten, die dem Spieler zur Auswahl stehen
- **maxStatValue**
    - Schutzgrad: public
    - Typ: int
    - Wert: der maximale Wert, den ein Agent haben kann, wenn er vom Spieler angeheurt wird
- **OfferAmount**
    - Schutzgrad: public
    - Typ: int
    - Wert: die Anzahl an Agenten die der Spieler auf einmal angeboten bekommt
- **firstnames**
    - Schutzgrad: private
    - Typ: List\<string>
    - Wert: eine Liste an möglichen Vornamen, die die Agenten haben können
- **lastnames**
    - Schutzgrad: private
    - Typ: List\<string>
    - Wert: eine Liste an möglichen Nachnamen, die die Agenten haben können
- **HiringOfferPrefab**
    - Schutzgrad: public
    - Typ: GameObject
    - Wert: das Prefab für das GameObject, dass einen Agenten zum Anheuern darstellt
- **HiringOfferParent**
    - Schutzgrad: public
    - Typ: Transform
    - Wert: das Parent transform für die Hiring Offers
- **AgentDetailSheet**
    - Schutzgrad: public
    - Typ: GameObject
    - Wert: das Fenster das die Werte eines Agenten anzeigt
- **moneyCounter**
    - Schutzgrad: public
    - Typ: TMP_Text
    - Wert: das Textfeld das anzeigt wie viel Geld der Spieler zur verfügung hat
- **HideOutUIManager**
    - Schutzgrad: public
    - Typ: [HideOutUIManager](#HideOutUIManager)
    - Wert: der aktive HideOutUIManager
- **FirstNamesPath**
    - Schutzgrad: private, const
    - Typ: string
    - Wert: der Pfad innerhalb des Resources Ordner, an dem das Textdokument mit den Vornamen liegt
- **LastNamesPath**
    - Schutzgrad: private, const
    - Typ: string
    - Wert: der Pfad innerhalb des Resources Odner, an dem das Textdokument mit den Nachnamen liegt
**Methoden:**
- **Avg**
    - Schutzgrad: public
    - static
    - Rückgabewert: int, der durchschnittliche Wert der aus den gegebenen Zahlen
    - Parameter:
        - n (int\[\]) ein Array an Zahlen dessen durchschnittlicher Wert ermittelt werden soll
    - Aufgabe: berechnet den durchschnittlichen Wert aus einem Array an Zahlen, gerundet auf einen integer
- **GenerateOffers**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - amount (int) die Menge an Angeboten, die generiert werden soll
    - Aufgabe: Generiert eine Zahl an Angeboten zum anheuern und fügt sie so in die Liste an angeboten ein, dass diese nach preis sortiert ist
- **ShowOffers**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt, wenn das Fenster aktiviert wird, instanziiert die OfferObjekte
- **ShowDetails**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - agent (Hiringagent (see Custom Types)) der Agent dessen stats angezeig werden sollen
    - Aufgabe: aktiviert das AgentDetailSheet und trägt die Stats für den agenten ein
- **ShowDetails**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - agent ([OverseerAgent](#OverseerAgent)) der Agent dessen stats angezeigt werden sollen
    - Aufgabe: aktiviert das AgentDetailSheet und trägt die Stats für den Agenten ein
        - ersetzt den Hire Button durhc Fire
- **FireAgent**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - agent ([OverseerAgent](#OverseerAgent)) der Agent, der entlassen werden soll
    - Aufgabe: entfernt einen Agenten aus den angeheuerten Agenten, sodass platz für einen neuen agenten ist
- **HireAgent**
    - Schutzgrad: private
    - Rückgabewert: void
    - Parameter:
        - agent (HiringAgent (siehe Custom Types))
    - Aufgabe: fügt einen Agenten den angeheuerten Agenten hinzu, entfernt ihn aus den angeboten und zieht das entsprechende geld ab
- **OnEnable**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht die ausgeführt wird, wenn die Komponente aktiviert wird
        - ruft ShowOffers auf
- **Start**
    - Schutzgrad: private
    - Rückgabewert: void
    - AUfgabe: Unity Nachricht, die nach Szenenbeginn ausgeführt wird
- **LoadNames**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: befüllt firstnames und lastnames mit den inhalten aus den textfiles an FirstNamesPath und LastNamesPath
- **OnMoneyChange**
    - Schutzgrad: private
    - Rückgabewert: void
    - Aufgabe: wird ausgeführt, wenn sich die Menge an Geld die der Spieler besitzt ändert, aktualisiert den MoneyCounter
**Custom Types:**
- **HiringAgent**
    - Schutzgrad: public
    - Typ: Klasse
    - Aufgabe: repräsentiert die Angebote zum anheuern der Agenten
    - Felder: (all public)
        - [OverSeerAgent](#OverseerAgent) der OverseerAgent mit den Stats des Agenten
        - GameObject offerObject das Objekt, dass das Angebot im Fenster anzeigt
        - int Price die Kosten des Agenten
    - Methoden:
        - Ctor(int\[\] stats, bool Vorbestraft, string name)
            - stats sind in FIG, STE, HAC, MEC, MOV reihenfolge
        - ToString()
            - gibt nur Price zurück
## HitmanCoin
**Superklasse, Interface:** ActionItem, IInputTaker
**Notes:**
Diese Klasse implementiert das Münzen Item im Spiel. Die Münze kann geworfen werden, um Wachen abzulenken. 
**Felder:**
- **throwTarget**
    - Schutzgrad: private
    - Typ: Vector2
    - Wert: die Position an die die Münze geworfen werden soll
- **\_cam**
    - Schutzgrad: private
    - Typ: Camera
    - Wert: die Kamera die die Spielersicht rendert
- **Range**
    - Schutzgrad: public
    - Typ: float
    - Wert: die maximale Entfernung, die der Agent die Münze werfen darf
- **obstacles**
    - Schutzgrad: private
    - Typ: LayerMask
    - Wert: die Layers auf denen sich Hindernisse für den Wurf befinden können
- **inputActive**
    - Schutzgrad: private
    - Typ: boolean
    - Wert: ob die Münze bereits auf input wartet
- **inputDone**
    - Schutzgrad: private
    - Typ: boolean
    - Wert: ob der Input bereits erfolgt ist und noch nicht abgearbeitet wurde
**Methoden:**
- **Start**
    - Schutzgrad: protected
    - overriden von ActionItem
    - Rückgabewert: void
    - Aufgabe: Unity Nachricht, die nach Szenenbeginn ausgeführt wird
- **Use**
    - Schutzgrad: public
    - overriden von ActionItem
    - Rückgabewert: boolean, ob das benutzen abgeschlossen ist, sodass der Agent seinen Zug beenden kann
    - Aufgabe: wird in jedem Frame, in dem der Agent das Item benutzt einmal aufgerufen
- **HandleInput**
    - Schutzgrad: public
    - Rückgabewert: void
    - Parameter:
        - inputManager (inputManager)
    - Aufgabe: wird in jedem Frame, in dem die Münze der aktive inputtaker ist, einmal ausgeführt
## InputManager
**Superklasse:**
**Subklassen:**
**Not
## Interactable
## Item
## ItemBuyWindowManager
## ItemManagementWindowManager
## ItemManager
## KeyItem
## LaserBarrierInteractable
## LevelExit
## Line
## LoadingManager
## Loot
## MainMenuManager
## ManagementWindowManager
## MECDoorMinigame
## MECGeneratorMinigame
## MECMotionSensorMinigame
## MenuItem
## MenuItemBool
## MenuItemButton
## MenuItemDropdown
## MenuItemKeyCode
## MenuItemSlider
## MenuItemSliderInt
## MenuItemString
## MenuItemText
## Minigame
## MissionWindowManager
## MotionSensor
## Obstacle
## OptionMenuController
## OverseerAgent
## OverSeerItem
## Path
## Pathfinding
## PauseMenuController
## PlaceHolderInteractable
## PlaceHolderMinigame
## PriorityQueue
## QuicktimeEventManager
## RectRoom
## References
## Room
## RoomManager
## RubberDucky
## SaveState
## SaveSystem
## SecurityCamera
## SoundManager
## StaffCamera
## StageGoal
## StageManager
## StatOverWriteItem
## SUSManager
## Tranquilizer
## TurnManager
## TweaksMenuController
## ViewConeVisualizer
## Wall

# Interfaces
## IActionObject
## IInputTaker
## IUIParent
## IQuickTimeEventTrigger

# Editors
## GridEditor
## RoomsEditor