Repository navigation
Architektur
"Modular" bedeutet hier nicht, dass Spieler einzelne Revamp-Funktionen an- oder abwählen können, sondern dass die fachlichen Bereiche im Code so getrennt sind, dass an einem Modul gearbeitet werden kann, ohne die anderen verstehen zu müssen. Unabhängig davon soll ein Server-Admin bestimmte Bereiche (z. B. das Verteilsystem) zur Laufzeit ein- oder ausschalten können.
Die Anzeige einer Funktion ist kein separater, nachgelagerter Schritt, sondern gehört zum Bau der Funktion selbst: Beim Schreiben einer Funktion zuerst Debug-Ausgaben ins Log (nach Achims Konvention aus den anderen Mods: Revamp.Debug-Flag, Revamp.DebugText(text, ...)/Revamp.DebugTable(text, myTable, maxDepth), Präfix "RevampDebug: ", Ausgabe über ein schlichtes print — ein Logging.info-Wrapper bringt gegenüber print mit eigenem Präfix keinen Mehrwert). Erst wenn die Funktion nachweislich funktioniert, wird entschieden, wie sie am besten angezeigt wird — nicht vorher und nicht als eigene, spätere Phase.
| Modul | Inhalt |
|---|---|
| Recipe Core | Mix-Gruppen, alternative FillTypes, Wertigkeiten, FillTypeCategories, Booster, Rezept-Umschalten (siehe unten, Later) |
| Distribution | Priorisiertes Verteilen, Ausgangsmodi (Verkaufen/Verteilen/Auslagern/Einlagern), Kosten fürs Verteilen separat in der Statistik ausweisen |
| Storage Extension | Lose Ware/Ballen/Paletten im selben Lager, Füllstand-Objektdarstellung, manueller Paletten-/Ballenspawn/-Auslagern aus der Produktion (Pendant zu PSC, siehe Kompatibilität) |
| Buy/Sell & Pricing | Zukauf/Verkauf im Produktionsmenü |
| Production Modifiers | Variable Produktionsgeschwindigkeit ("Kurzarbeit"), wirkt auf die gesamte Produktionslinie |
| Display/Visualization | Nur das, was unabhängig von einzelnen Funktionen ist: Anzeige ob eine Produktion parallel oder verteilt läuft (II/Y), Anzeige der Produktionskosten, Anzeige der Gebäude-/Unterhaltskosten. Die Anzeige jeder einzelnen Funktion (Rezepte, Booster, Wetter-Status, …) entsteht dagegen zusammen mit der jeweiligen Funktion selbst, siehe oben |
| Settings | Eigenes Einstellungsmenü, inklusive Admin-Schalter pro Modul |
| Ingame-Help | Referenziert die anderen Module |
- Ein Modul = eine Lua-Datei
- Multiplayer-Events liegen gesammelt in
scripts/events/, pro Event eine eigene Datei, unabhängig davon zu welchem Modul das Event fachlich gehört - Keine
local functionin Mod-Lua-Code — alles als Feld auf einer globalen Tabelle, damitUtils.overwrittenFunction/appendedFunctionvon außen greifen kann
- Recipe Core ist die einzige harte Abhängigkeit für die anderen Module
- Module untereinander (Distribution, Storage Extension, Display, …) kennen sich nicht direkt
- Berührungspunkte zwischen Modulen sind nur in den Dialogen/der UI erlaubt
- Jedes Modul prüft seinen eigenen Admin-Schalter aus dem Settings-Modul selbst, statt Code-Pfade zu löschen
Die eigentliche Rezeptanzeige (Recipe Core: Mix-Gruppen, Booster, Wetter-Status) bleibt im erweiterten Original-Produktionsdialog, solange er alle Möglichkeiten übersichtlich und bedienbar zeigen kann — kein Ersatzdialog "auf Vorrat". Module mit echter Bedienung (Einstellungen mit Reglern u. ä.) bekommen eigene Sub-Dialoge; das ist bereits durch PSC/PST vorgezeichnet, die für Storage-Verwaltung und Kauf/Verkauf jeweils eigene Dialoge (ProductionStorageDialog, ProductionBuyGoodsDialog) statt Erweiterungen des Produktionsmenüs verwenden.
Ein eigener Ersatz für den Produktionsdialog selbst kommt erst infrage, wenn eine konkrete Grenze erreicht wird, z. B.:
- Ein Rezept mit vielen Mix-Gruppen/Alternativen sprengt die Zeilen-/Zellhöhe der Liste trotz Anpassung
- Ein Modul braucht eine Interaktion, die keine Listenzelle abbilden kann (Schieberegler, visuelle Prozent-Verteilung o. ä.)
Der FeedMixer im 22er konnte zwischen pro Karte unterschiedlich definierten Rezepten umschalten, ohne dass jede Variante eine eigene Produktionslinie mit eigener Lager-/FillType-Reservierung brauchte (eine Linie wird für die jeweils aktive Variante neu konfiguriert, FillTypes werden bei Wechsel um- statt dauerhaft angemeldet). Das Prinzip soll später auch für frei geschriebene Modder-Rezepte nutzbar sein, nicht nur für Futtermischer — ist aber kein Nahziel: hohe Komplexität durch die vielen möglichen Kombinationen, daher auf die Later-Liste statt Todo.
Siehe auch Kompatibilität für das optionale Ladesystem und die Kompatibilität zu bestehenden Begleit-Mods.