Ein Fahrwassernetz für den Hafen
Bisher war die Schifffahrt in meinem Hafen eine ziemlich sture Angelegenheit: Ich hatte Wegpunkte von Hand im Editor platziert, und die Schiffe sind diese Punkte der Reihe nach abgefahren — Punkt eins, Punkt zwei, Punkt drei, Reede. Das funktioniert genau so lange, wie nichts dazwischenkommt. Und in einem Hafen kommt ständig etwas dazwischen.
Deshalb habe ich das in dieser Session umgebaut, und zwar von Grund auf.
Ein Netz statt einer Perlenkette
Aus den einzelnen Wegpunkten ist ein Fahrwassernetzwerk geworden: ein zusammenhängendes Netz, das Ein- und Auslauf des Hafens mit den Reeden und den Anlegern verbindet. Die Schiffe suchen sich ihren Weg durch dieses Netz, statt einer fest verdrahteten Punkteliste zu folgen.
Zum Arbeiten daran gibt es ein Debug-Overlay, das ich im laufenden Spiel mit der N-Taste ein- und ausblenden kann — so sehe ich jederzeit, auf welchen Bahnen die Schiffe gerade unterwegs sind und wo das Netz noch Lücken hat.
Verkehrsregeln
Ein Netz allein macht noch keinen Verkehr. Damit sich die Schiffe nicht gegenseitig durchfahren, gelten jetzt Regeln:
- Rechtsfahrgebot. Begegnen sich zwei Schiffe, weichen beide nach Steuerbord aus — wie auf echtem Wasser.
- Kollisionswache. Die Schiffe achten auf mögliche Zusammenstöße und stoppen notfalls die Fahrt. Das ist noch ausbaufähig — im Moment ist Anhalten die einzige Antwort auf alles —, aber es ist die Grundlage, auf der sich aufbauen lässt.
- Tempo nach Kurvenlage. Jedes Schiff schaut in einem schmalen Kegel voraus und prüft, wie scharf die nächste Kurve wird. Je enger, desto stärker wird gedrosselt. Und wenn eine Kurve so scharf ist, dass das Schiff praktisch wenden müsste, hält es ganz an, dreht auf der Stelle und fährt dann erst weiter — vorher sah genau das noch aus, als würde ein Containerschiff Pirouetten fahren.
Einbahnstraßen und Gegenverkehr
Nicht jede Wasserstraße ist gleich breit. Die Wege im Netz lassen sich deshalb als Einbahnstrecke oder als zweispurige Trasse definieren, und die Schiffe verhalten sich entsprechend:
- Auf Einbahnstrecken fahren die Schiffe mittig auf der Route. Im Overlay zeigen Pfeilmarkierungen die erlaubte Fahrtrichtung an.
- Auf zweispurigen Trassen gibt es keine Pfeile — dafür fahren die Schiffe rechtsbündig versetzt, sodass sich Gegenverkehr sauber aneinander vorbeischiebt.
Das Ziel hinter alldem ist simpel zu benennen und erstaunlich viel Arbeit: Es sollen nie zwei Schiffe ineinander clippen.
Kais, Piers und Liegeplätze mit Namen
Die zweite große Baustelle war die Kai-Struktur. Bisher war ein Kai ein Kai — fertig. Jetzt kann ich die Größe eines Kais ändern und zum Beispiel einen Pier bauen. An Kai oder Pier hänge ich dann beliebig viele Liegeplätze, die als Child-Nodes dem Bauwerk zugeordnet werden und sich automatisch beschriften: aus Pier 17 wird Pier 17 – L1, Pier 17 – L2 und so weiter. Genau so tauchen sie auch in der Anlegerliste auf — die Namen vergeben sich selbst, und ich kann keinen doppelt vergeben oder vergessen.
Man sieht jetzt, wo man baut
Dazu passend gibt es visuelle Guides: Sowohl im Baumodus als auch in der Anlegerauswahl werden Schiffsumrisse an den Liegeplätzen angezeigt — anklickbare Silhouetten, die zeigen, wo ein Platz ist und was dort hinpasst.
Vorher war das Anlegen ein Klick auf einen abstrakten Listeneintrag. Jetzt klickt man auf einen Umriss im Wasser — und im Baumodus sieht man schon beim Platzieren, wie viele Schiffe an den neuen Pier passen werden.
Was noch fehlt
Die Kollisionsbehandlung ist, wie gesagt, erst der Anfang — Anhalten ist eine Lösung, aber keine elegante. Als Nächstes sollen die Schiffe vorausschauender miteinander umgehen: wer wartet, wer darf zuerst, wer weicht wie weit aus. Der Hafen wird voller, und das Netz muss das aushalten.