1. Fahrtzielanzeiger des Vorbilds in OMSI
Prinzipiell lassen sich alle Fahrtziel-Anzeigesysteme mittels Scripts in OMSI darstellen. Die Schwierigkeiten liegen im Aufwand der Umsetzung und der Performance. Im folgenden Artikel geht es lediglich um die scriptseitige Darstellung, nicht um das Erstellen im 3D-Programm oder das Einbinden in der *.cfg-Datei.
1.1. Steckschilder
- Fahrtzieldarstellung:
Die wahrscheinlich einfachste Möglichkeit eines Zielanzeigers. Auf einer Tafel steht das Ziel geschrieben. Der Dateiname der aktuellen Ziel-tga kann aus der *.hof-Datei ausgewertet werden.
- Bedienung/Umsetzungsvorschlag:
Das Entfernen des Schildes kann recht einfach realisiert werden. Ein Klick auf das Schild und über eine Visible-Variable wird das Schild ausgeblendet. Komplexer ist das Einstecken des richtigen Schilds. Lässt sich theoretisch über das Alt-Menü lösen, allerdings ist diese Variante eher unschön. In der Realität wurden bei Schichtbeginn genau jene Schilder, die man während des Diensts brauchen würde, im Bus verstaut und mitgeführt. Als Alternative zur Umsetzung würde sich ein Blick in eine Fahrermappe, in der man die nächste Route bzw. das nächste Ziel auswählt, anbieten. Ein Klick auf den Zielschildhalter könnte das Schild dann platzieren/über die Visible-Variable wieder einblenden.
1.2. Rollbänder
- Fahrtzieldarstellung:
Bei diesem Fahrtziel-Anzeigen-Typ befinden sich alle Zielschilder des aktuellen Hofs auf einem Rollband. Je nach Fahrtrichtung wird dieses Rollband in die entsprechende Position gedreht, sodass das aktuelle Fahrtziel von außen sichtbar ist.
- Bedienung/Umsetzungsvorschlag:
In der Realität werden (bzw. wurden) Rollbänder entweder von Hand gekurbelt oder über Stellmotore eingestellt. Bei einer Einstellung über Stellmotore erfolgt die Steuerung kann tastend, schrittweise oder zielbasiert erfolgen. Bei der tastenden und schrittweisen Steuerung besitzt das Steuergerät pro Motor zwei Taster, einen für jede Drehrichtung. Der Motor dreht sich so lange in die gewählte Richtung, wie der Taster betätigt wird. Bei einer tastenden Steuerung bleibt das Rollband nach dem Auslassen in der aktuellen (Zwischen-)Position stehen, währdend es sich bei einer schrittweisen Steurung bis zur nächsten Rastposition weiterdreht. Bei einer zielbasierten Rollbandsteuerung kann die Zieleingabe entweder über das IBIS oder ein separates Steuerpanel erfolgen. Sobald das Ziel eingegeben und bestätigt wurde, dreht sich das Rollband selbsttätig zur gewählten Position. Es können wie in den SDs die Dateinamen der Rollband-tgas aus der *.hof-Datei ausgelesen werden.
WICHTIG: Bei der Erstellung von Rollbandtexturen muß ein schwarzer Pixel in einer der 4 Ecken der Texturen vorhanden sein, das es sonst zu Darstellungsfehlern bei der Rollbandanimation kommt.
1.3. ANNAX
- Fahrtzieldarstellung:
Die von M&R bereits in OMSI1 inkludierte ANNAX-Matrix bietet eine gerasterte Ziel-Anzeige für zwei Zeilen á 16 Zeichen sowie eine Linienanzeige für 3 Zeichen. Dabei wird jedes Zeichen nacheinander, erst die obere Zeile von links nach rechts, dann die untere Zeile von links nach rechts umgeschaltet.
- Bedienung/Umsetzungsvorschlag:
Da die ANNAX-Matrix starr gerastert ist, kann die Wechsel-Animation soweit vereinfacht werden, dass immer ein ganzes Zeichen aktualisiert wird. Die Bedienung erfolgt über das IBIS oder ein separates Matrix-Steuergerät. Nach der Eingabe der neuen Informationen schildert die Anzeige diese selbsttätig.
1.4. FlipDots
- Fahrtzieldarstellung:
Die namengebenden FlipDots sind kleine Plättchen, die auf der einer Seite schwarz und auf der anderen Seite in einer dazu kontrastreichen Farbe (beispielsweise weiß oder neongrün) ausgeführt sind. Die Matrix besteht, um das Schriftbild darzustellen, aus entsprechend vielen dieser Plättchen. Um die Plättchen zu drehen, ist jedes einzelne mit einem kleinen Elektromotor ausgestattet. Um Verkabelungs-Aufwand zu sparen werden die Elemente über eine Matrixschaltung Spalten- oder Zeilenweise geschaltet.
- Bedienung/Umsetzungsvorschlag: Aufgrund der schrittweisen Aktualisierung der Fahrtzielanzeige und möglichen zufälligen Fehldarstellungen muss der Inhalt vom Script aufgrund der Informationen in der Hof-Datei dynamisch generiert werden. Grundsätzlich kann man bei FlipDot-Zielanzeigen zwei Typen unterscheiden:
- Aktualisierung von oben nach unten: Hier lassen sich verschiedene Methoden andenken. Da die Anzahl der Zeilen überschaubar ist, kann man hier mehr Varianten andenken als bei der Aktualisierung von links nach rechts.
- Abwandlung des "BUSE-Matrix-Script", sodass nicht Punkt- sondern Zeilenweise aktualisiert wird.
- Abwandlung der "Busfanat-Vollmatrix", sodass nicht Spalten- sondern Zeilenweise aktualisiert wird.
- Das Matrix-Script aus dem O405N aus dem kommerziellen Hamburg-Addon, deren Funktionsweise nicht öffentlich bekannt ist.
- Aktualisierung von links nach rechts: Für OMSI 1 ist hier bislang nur die "Busfanat-Vollmatrix" bekannt. Ab OMSI 2 gibt es als Alternative die Krüger-Matrix, die von M&R im EN92 bzw. GN92 mitgeliefert wurde.
Die Bedienung erfolgt über das IBIS oder ein separates Matrix-Steuergerät. Nach der Eingabe der neuen Informationen schildert die Anzeige diese selbsttätig.
1.5. LED/LCD-Display
- Fahrtzieldarstellung:
Bei LED-Matrizen werden die namengebenden Leuchtdioden über eine Matrixschaltung gesteuert. Dabei werden die LEDs für ein scheinbares Dauerleuchten (meist zeilenweise) gemultiplext. Das hat neben einem wesentlich geringeren Verkabelungsaufwand auch den Vorteil eines geringeren Stromverbrauchs, weil nicht alle "angeschalteten" Dioden gleichzeitig mit Strom versorgt werden müssen. Zudem erfolgt der Zielwechsel scheinbar augenblicklich. LCD-Displays arbeiten nach einem anderen Funktionsprinzip, einer der größten offensichtlichen Unterschiede ist, dass nicht die Bildpunkte selbst leuchten, sondern von hinten beleuchtet werden müssen und zur Darstellung des Matrixbilds die Bildpunkte einen Teil der Hintergrundbeleuchtung absorbieren, beziehungsweise nicht durchscheinen lassen. Die Bedienung erfolgt über das IBIS oder ein separates Matrix-Steuergerät. Nach der Eingabe der neuen Informationen schildert die Anzeige diese selbsttätig.
- Bedienung/Umsetzungsvorschlag: Da alle Punkte zeitgleich aktualisiert werden, bieten sich mehrere Möglichkeiten an:
- Die "Busfanat-Vollmatrix" im LED-Modus (in der Const-Datei einstellbar)
- (ab OMSI2) Abwandlung des Krüger-Matrix-Scripts von M&R, sodass nicht spaltenweise sondern alles auf einmal aktualisiert wird.
- Abwandlung des "BUSE-Matrix-Script", sodass nicht Punktweise sondern alles auf einmal aktualisiert wird..
- Man nutzt die "Rollband-tga" als Wechseltextur, wie es von Thiago im Volvo 9900 umgesetzt wurde.
Bei den beiden letzten Varianten wird eine bessere Performance durch eine aufwändigere Erstellung der Hof-Informationen erkauft. Ob sich das auszahlt, muss jeder selbst entscheiden.
Die Bedienung erfolgt über das IBIS oder ein separates Matrix-Steuergerät. Nach der Eingabe der neuen Informationen schildert die Anzeige diese selbsttätig.
2. Beschreibung bekannter Scripts
Es folgt eine Ablaufbeschreibung der bekannten Scripts.
2.1. ANNAX
2.1.1. Zusammenfassung
Die ANNAX fragt vom IBIS/Matrix-Steuergerät/whatever drei Variablen ab: Liniennummer, Kursnummer (Liniensuffix) und Ziel-Index. In der M&R-Standard-Konfiguration heißen die Variablen: IBIS_LinieKurs, IBIS_Linie_suffix und IBIS_TerminusIndex. Die Liniennummer wird im Script in einen String umgewandelt, evtl. durch die Kursnummer noch manipuliert und kann dann angezeigt werden. Beim Ziel ist es ähnlich, mit dem abgerufenen Zielindex werden aus der Hof-Datei die relevanten Strings geladen. Diese werden kurz für die Texttextur vorverarbeitet und können ebenfalls angezeigt werden. Da bei der ANNAX jedes Zeichen in seinem eigenen Raster angezeigt wird und jedes Rasterkästchen (für sich betrachtet) ohne Übergangsanimation auf einmal aktualisiert wird, ist die Übergangsanimation relativ simpel. Abhängig vom Fortschritt wird der aktuell angezeigte String vom neuen String stückweise überschrieben.
2.1.2. Funktionsablauf
- Auslösen des Wechselzyklus'
Der Anzeigenwechsel wird bei der Zielmatrix von einer Änderung des Zielindex', bei der Linienmatrix entsprechend durch eine Änderung der Liniennummer oder des Kurses ausgelöst.
- Auswertung Liniennummer und Kursnummer
Die Liniennummer ist in der Variable IBIS_LinieKurs gespeichert. Der Name ist verwirrend, denn die Variable enthält nur die Liniennummer. Die Kursnummer ist in der Variable IBIS_Linie_suffix gespeichert. Zunächst wird die Liniennummer mittels $IntToStr in einen String umgewandelt. Ist die Kursnummer eine Linienbeeinflussende, wird der erhaltene Linienstring noch entsprechend modifiziert
- Beschaffung der Information aus der Hofdatei
Bei dieser Matrix werden bis zu drei Strings aus der Hofdatei ausgelesen: Frontanzeige oben, Frontanzeige unten und Seitenanzeige. Da mit dem Systemmacro (M.V.GetTerminusString) nur ein String zum Index in der Hofdatei und nicht zur Zielnummer, die im IBIS eingegeben wird, gesucht werden kann, muss dieser Index zur vom IBIS übergebenen Variable IBIS_TerminusIndex mit dem Systemmacro (M.V.GetTerminusIndex) entsprechend gesucht werden. Nachdem mit dem nun bekannten Index die benötigten Strings aus der Hofdatei geladen wurden, werden die herausgelesenen Strings nur noch ins entsprechende Format gebracht und können auf die Matrix geschrieben werden.
- Wechselanimation
Aufgrund des fixen Buchstabenrasters kann man hier mit einer Wechsel-Fortschrittsvariable einfach die ersten x Zeichen der neu ermittelten Zielanzeige nutzen, gleich viele Zeichen von der bereits geschilderten Anzeige "wegschneiden", die beiden Zwischenstrings zusammenfügen und dann in den Texturstring, der dann mit der Texttextur angezeigt wird, speichern.
2.1.3. Vor- und Nachteile
+ performancefreundlich durch geringen Berechnungsaufwand | - fixe Zeichenanzahl pro Zeile (sonst wäre Zentrierung falsch) |
+ unterstützt M&R-Standard-Hofdatei | |
+ Linien- und Zielanzeige voneinander unabhängig |
2.2. BUSE-Matrix-Script
2.2.1. Zusammenfassung
Beim BUSE-Matrix-Script handelt es sich um die erste bekannte Möglichkeit, eine Vollmatrix in OMSI darzustellen. Technisch ist es ein modifiziertes ANNAX-Script, wie es aus den SD- und D-Bussen von OMSI1 bekannt ist. Als Unterschied zu diesem werden in der Hof-Datei nicht die Zeileninhalte gespeichert, sondern die "vorgerenderten" Punkte der Matrix. Beim Wechsel des Ziels wird dieses Punkt für Punkt aktualisiert und das neue Zeil erscheint von oben nach unten. Die Linienmatrix unterscheidet sich kaum vom M&R-ANNAX-Script. Der erste Veröffentlicher dieses Scripts ist der User "Kosak", der diese Variante mit seinem Bus "Renault Karosa Citybus" veröffentlicht hat.
2.2.2. Funktionsablauf
- Auslösen des Wechselzyklus'
Der Anzeigenwechsel wird bei der Zielmatrix von einer Änderung des Zielindex', bei der Linienmatrix entsprechend durch eine Änderung der Liniennummer oder des Kurses ausgelöst.
- Auswertung Liniennummer und Kursnummer
Die Liniennummer ist in der Variable IBIS_LinieKurs gespeichert. Der Name ist verwirrend, denn die Variable enthält nur die Liniennummer. Die Kursnummer ist in der Variable IBIS_Linie_suffix gespeichert. Zunächst wird die Liniennummer mittels $IntToStr in einen String umgewandelt. Ist die Kursnummer eine Linienbeeinflussende, wird der erhaltene Linienstring noch entsprechend modifiziert
- Beschaffung der Information aus der Hofdatei
Bei dieser Matrix wird nur ein String, die vorgerenderte Frontanzeige, aus der Hof-Datei ausgelesen. Da mit dem Systemmacro (M.V.GetTerminusString) nur ein String zum Index in der Hofdatei und nicht zur Zielnummer, die im IBIS eingegeben wird, gesucht werden kann, muss dieser Index zur vom IBIS übergebenen Variable IBIS_TerminusIndex mit dem Systemmacro (M.V.GetTerminusIndex) entsprechend gesucht werden. Nachdem mit dem nun bekannten Index der benötigte String aus der Hofdatei geladen wurde, kann der ausgelesene String auf die Matrix geschrieben werden.
- Wechselanimation
Da der anzuzeigende String ein vorgerendertes Punktemuster ist, kann man hier mit einer Wechsel-Fortschrittsvariable einfach die ersten x Zeichen der neu ermittelten Zielanzeige nutzen, gleich viele Zeichen von der bereits geschilderten Anzeige "wegschneiden", die beiden Zwischenstrings zusammenfügen und dann in den Texturstring, der dann mit der Texttextur angezeigt wird, speichern.
2.2.3. Vor- und Nachteile
+ erstes Script dieser Art | - spezielle Hof-Datei erforderlich |
+ performancefreundlich durch geringen Berechnungsaufwand | - Liniennummer wird mit den Zieltext-Punkten in der Hofdatei gespeichert
-> AI-Fahrzeuge schildern möglicherweise falsche Liniennummer, wenn sie das Ziel schildern |
- Jede Anzeige mit diesem Script hat die gleiche Auflösung (ließe sich
zwar ändern, aber dann wäre das Hof-Dateien-Chaos perfekt) |
2.3. Busfanat-Vollmatrix
2.3.1. Zusammenfassung
Bei der "Busfanat-Vollmatrix" handelt es sich um die erste bekannte Möglichkeit, eine Vollmatrix in OMSI darzustellen, die mit den M&R-Standard-Hofdateien arbeiten kann. Die erste Version dieser Matrix wurde mit dem Bus "Mercedes-Benz O405N2" von TramDüsseldorf veröffentlicht, in der am 02.06.2013 veröffentlichten Version unterstützt das Script drei Anzeigetypen: Liniennummer, Zielschild ohne Liniennummer und Zielschild mit Liniennummer.
2.3.2. Funktionsablauf
- Auslösen des Wechselzyklus'
Der Anzeigenwechsel wird durch eine Änderung des Zielindex, der zu schildernden Linie oder der Kursnummer ausgelöst. Vor dem Wechsel wartet das Script dann noch, bis der Wechselziel-Timer abgelaufen und die letzte Anzeige vollständig
geschildert ist.
- Auswertung Liniennummer und Kursnummer
Die Liniennummer ist in der Variable IBIS_LinieKurs gespeichert. Der Name ist verwirrend, denn die Variable enthält nur die Liniennummer. Die Kursnummer ist in der Variable IBIS_Linie_suffix gespeichert. Abhängig von der Kursnummer wird die Liniennummer direkt mittels $IntToStr in einen String umgewandelt oder zusätzlich noch mit Buchstaben/Sonderzeichen ergänzt oder auch durch diese ersetzt.
- Beschaffung der Informationen aus der Hofdatei
Bei dieser Matrix werden zwei Strings aus der Hofdatei ausgelesen: Frontanzeige oben und Frontanzeige unten. Da mit dem Systemmacro (M.V.GetTerminusString) nur ein String zum Index in der Hofdatei und nicht zur Zielnummer, die im IBIS eingegeben wird, gesucht werden kann, muss dieser Index zur vom IBIS übergebenen Variable IBIS_TerminusIndex mit dem Systemmacro (M.V.GetTerminusIndex) entsprechend gesucht werden. Nachdem mit dem nun bekannten Index die benötigten Strings aus der Hofdatei geladen wurden, werden die herausgelesenen Strings zunächst auf Steuerzeichen abgeprüft. Nachdem die Steuerzeichen abgearbeitet wurden, wird aus den verbleibenden Strings mittels des Fontfile-Scripts in ein Punktemuster "gerendert", das dann auf den Matrixflächen angezeigt werden kann. Dieses Punktemuster wird, um die FlipDot-Animation zu ermöglichen, in 19 Strings, die jeweils eine Punkte-Zeile der Matrix enthalten, gespeichert.
- Wechselanimation
Sowohl von der derzeit geschilderten, als auch von der zu schildernden Anzeige sind die gerenderten Punktemuster in jeweils 19 Zeilen-Strings vorhanden. Anhand einer Wechsel-Fortschritt-Variable werden die entsprechenden ersten x Zeichen jeden zu schildernden Zeilenstrings mit den bereits geschilderten Zeilenstrings, die um die gleiche Anzahl an Zeichen am Anfang des Strings gekürzt wurden, zusammengefügt. Anschließend werden die fertigen Zeilenstrings, die bereits die Wechsel-Animation enthalten, durch "@"-Zeichen verbunden, die auf der Texttextur zu Zeilenumbrüchen werden, und in die Strings, die zur Erstellung der Texttexturen dienen, gespeichert.
2.3.3. Vor- und Nachteile
+ unterstützt M&R-Standard-Hofdatei (in OMSI1 lässt sich eine für die Busfanat-Vollmatrix formatierte Hofdatei auch vollständig ANNAX-kompatibel gestalten)
+ einzige bekannte Möglichkeit in OMSI1, eine FlipDot-Matrix, die von links nach rechts aktualisiert, darzustellen
+ durch Befehlszeichen in Hofdatei äußerst flexibel einsetzbar
+ durch zahlreiche Optionen in Const-File an verschiedenste Anforderungen anpassbar, unter anderem variable Breiten der Anzeigen
+ Sonderanzeigen möglich - durch erheblichen Berechnungsaufwand performanceunfreundlich
- nicht für OMSI2 optimiert
- Schriftart muss textbasiert geändert werden
- Zeichenanzahl Zieltext auf 25 Zeichen pro Zeile begrenzt (bedingt durch das Fehlen des $CutSpaces-Befehls in OMSI1)
- benötigt je nach Ausführung bis zu 5 Texttexturen
2.4. Krüger-Vollmatrix
2.4.1. Zusammenfassung
Das ab OMSI2 verfügbare Krüger-Matrix-Script von M&R.
2.4.2. Funktionsablauf
- Auslösen des Wechselzyklus'
Der Anzeigenwechsel wird von einer Änderung des Zielindex', der Liniennummer oder des Kurses ausgelöst.
- Auswertung Liniennummer und Kursnummer
Die Liniennummer ist in der Variable IBIS_LinieKurs gespeichert. Der Name ist verwirrend, denn die Variable enthält nur die Liniennummer. Die Kursnummer ist in der Variable IBIS_Linie_suffix gespeichert. Zunächst wird die Liniennummer mittels $IntToStr in einen String umgewandelt. Ist die Kursnummer eine Linienbeeinflussende, wird der erhaltene Linienstring noch entsprechend modifiziert
- Beschaffung der Information aus der Hofdatei
Bei dieser Matrix werden zwei Strings aus der Hofdatei ausgelesen: Frontanzeige oben und Frontanzeige unten. Da mit dem Systemmacro (M.V.GetTerminusString) nur ein String zum Index in der Hofdatei und nicht zur Zielnummer, die im IBIS eingegeben wird, gesucht werden kann, muss dieser Index zur vom IBIS übergebenen Variable IBIS_TerminusIndex mit dem Systemmacro (M.V.GetTerminusIndex) entsprechend gesucht werden. Nachdem mit dem nun bekannten Index die benötigten Strings aus der Hofdatei geladen wurden, kann die Matrix-Textur bearbeitet werden. Zunächst wird aufgrund der Breite der anzuzeigenden Strings (Also die Breite des Textes auf der Textur, nicht die Anzahl der Zeichen) die passendste Schriftart ausgewählt. Danach werden die Texte auf eine temporäre Textur geschrieben.
- Wechselanimation
Die temporäre Zwischentextur wird pixelweise ausgelesen und von links nach rechts auf die anzuzeigende Scripttextur aufgemalt.
2.4.3. Vor- und Nachteile
+ zusammen mit OMSI2 entwickelt | - nicht mit OMSI1 kompatibel |
+ durch neue OMSI2-Script-Funktionen relativ performancefreundlich | - Jede Anzeige mit diesem Script hat die gleiche Auflösung (ließe sich zwar ändern, aber dann wären die Sonderanzeigen-Texturen nicht einheitlich) |
+ unterstützt M&R-Standard-Hofdatei | |
+ Sonderanzeigen möglich |
2.5. Mobitec-Matrix-Script
2.5.1. Zusammenfassung
Diese Variante wurde als erstes im "Volvo 9900" von Toastmeister als "Mobitec-Matrix-Script" veröffentlicht und von Thiago entwickelt.
2.5.2. Funktionsweise
Im Prinzip ist dieses Script ein Rollbandscript ohne Rollanimation. Am Steuergerät wird direkt der Ziel-Index in der Hofdatei, nicht wie beim IBIS eine Zielnummer, ausgewählt und das entsprechende Bild über einen Texturtausch auf die
Anzeige gebracht.
2.5.3. Vor- und Nachteile
+ performancefreundlich, da nur fertige Bilder auf eine Fläche geladen werden | - kleine Änderung der Hof-Dateien erforderlich, wenn das Steuergerät aus dem Volvo 9900 verwendet wird. |
2.6. Rollbänder
Bei OMSI muss man bei den Rollbändern zunächst zwischen Rollbändern mit einer fixen und Rollbändern mit einer script-gesteuerten Abfolge der eingerollten Bilder unterscheiden. Ein Beispiel für eine fixe Abfolge sind die Linienrollbänder der M&R-Standardbusse. Scriptseitig wird hier nur der Index des anzuzeigenden Bildteils angegeben. Ein Beispiel für eine script-gesteuerten Abfolge sind die Zielrollbänder der M&R-Standardbusse. Der Dateipfad der anzuzeigenden Bilder wird aus der Hof-Datei ermittelt. Um den Roll-Effekt zu erziehlen, müssen zwei aufeinanderfolgende Zielbilder gleichzeitig auf zwei verschiedene Faces geladen werden, die sich aber in der 3D-Datei an der exakt gleichen Stelle befinden. Im Anschluss entsteht der Roll-Effekt durch eine Verschiebung der Textur über eine Animationsvariable.
2.6.1. Darstellung der Liniennummer
2.6.1.1. Zusammenfassung
Scriptseitig läuft hier nur eine Variable auf und ab, die den Index der anzuzeigenden Textur angibt.
2.6.1.2. Vor- und Nachteile
+ nur eine 3D-Fläche pro Band benötigt | - Reihenfolge der angezeigten Bilder in cfg vordefiniert. |
2.6.2. Darstellung des Fahrtziels
2.6.2.1. Zusammenfassung
Für die beiden Texturverschiebungen läuft hier jeweils eine Variable. Zusätzlich zur Texturverschiebung erfolgt noch ein Texturtausch, damit nicht immer das selbe Ziel durch die Fläche scrollt.
2.6.2.2. Vor- und Nachteile
+ Reihenfolge der angezeigten Bilder durch Script steuerbar | - zwei 3D-Flächen pro Band benötigt |
3. Quelle
- diverse Scripte in Omsi
4. Autor
Busfanat
Danke an Busfanat, für die freundliche Erlaubnis, diesen Beitrag ins Wiki übertragen zu dürfen.