17 3 - Architekturübersicht
FlorianReetz edited this page 2026-02-18 16:51:08 +00:00

Architekturübersicht

Core

BoardArray

BoardArray extends RefCounted (Godot interne Klasse)

Ist ein multidimensionales Array, welches aus Ermangelung einer eigenen Datenstruktur in GDScript erstellt werden musste. Das BoardArray stellt das Fundament des gesamten Projekts dar. Zugriffe erfolgen ausschliesslich über die API der Klasse.

Erbt von RefCounted und ist kein Node. RefCounted kann als Godot-interne Basisklasse für Wertetypen und Datenstrukturen verwendet werden.

Wird in BoardLayout als BoardArray <int> und im BoardManager als BoardArray <Tile> verwendet. Anmerkung: BoardArray ist Typ-offen und wird nur durch den Parameter default_value "festgelegt". Unbedingt den Kontext beachten.

GameManager

GameManager extends Node2D

Ist die zentrale Steuereinheit für alle anderen, spielrelevanten Systeme. Der GameManager "orchestriert" die Zusammenarbeit und zeitlichen Abläufe aller anderen Systeme. Statt ein Singleton zu sein, besitzt der GameManager Referenzen über alle anderen Instanzen und kann somit DIs oder Signals steuern.

Systems

BoardManager

BoardManager extends Node2D

Ist für den Aufbau und Abbau von Tiles zuständig. Der BoardManager erhält eine BoardLayout Resource und instanziert daraus Tiles dem Layout entsprechend.

(TODO: Tiles sollen während der Instanzierung ihren TileType und TileValue zufällig(?) zugeordnet bekommen.)

Wenn Tiles entfernt werden müssen, handled BoardManager den Board-State entsprechend.

Alle Tiles werden in einem Child $TileContainer instanziert, nicht im BoardManager selbst.

Gameplay Features

Tile

Tile extends Area2D

Ist die visuelle Repräsentation eines Mahjong-Spielsteins. Besteht aus einer Area2D und einer CollisionShape2D um MouseInputs zu verarbeiten.

Zwei Texturen, $Body für den 'Stein' selbst, und $Face für das Bild auf dem Stein, kümmern sich um die visuelle Darstellung.

Ein Tile verfügt zudem über einen TileType und einen TileValue, welche das Aussehen bestimmen und für die Match-Logik wichtig sind.

Resources

TileStyle

TileStyle extends Resource

Hält Texturdaten für eine Tile bereit. Nametlich tile_body Texture2d und tile_face Texture2D

(TODO: Muss ggf. in ein TileSet aufgenommen werden, aus dem sich ein Tile dann die passenden TileStyle Daten zieht.)

RuleSet

RuleSet extends Resource

Ist eine (pseudo) abstrakte Klasse, die als Basisklasse für alle ableitenden RuleSet Klassen dient. GameManager hält eine Referenz auf RuleSet, wodurch ein beliebiges RuleSet geladen werden kann.

SolitaireRuleSet

SolitaireRuleSet extends RuleSet

Überschreibt die virtuelle can_match() aus der abstrakten RuleSet Klasse, um die klassischen Solitär Mahjong Regeln spielen zu können.

BoardLayout

BoardLayout extends Resource

Ist eine (pseudo) abstrakte Klasse, die als Basisklasse für alle ableitenden BoardLayout dient. Sie definiert Dimensionen des verwendeten BoardArrays, Stellt das CellType Enum und eine Initialisierungs-Methode bereit. BoardManager hält eine Referenz auf ein BoardLayout wodurch verschiedene BoardLayouts geladen werden können.

(TODO: BoardLayouts sollen später als .tres Datei automatisch durch ein Editor-internes tool erzeugt werden.)

Zusammenarbeit der Systeme

Die main.tscn ist der Einstiegspunkt des Spiels. Root ist der Main Node. Unter den Main werden alle anderen benötigten Systeme "eingehangen" und sind danach Child von Main. Es soll kein 'Übergang' zu anderen Szenen stattfinden. Szenen sind immer nur weiterer Bestandteil der main.tscn und müssen dort eingebettet werden.

Auf dem Root-Node Main liegt das GameManager Script. Von hier aus wird die Zusammenarbeit aller beteiligter Systeme orchestriert.

Wo sind Szenen zu finden und anzulegen?

Szenen oder Komponenten sind einer der Kategorien Core , Systems, Gameplay oder Resource zuzuordnen.