Springe zum Inhalt
Melde dich an, um diesem Inhalt zu folgen  
Gast Klapec

universelles Bahnsteigscript

Empfohlene Beiträge

Gast Klapec

Bahnhöfe bestehen in aller Regel aus mehr als einem Bahnsteig - und vielfach sind diese Bahnsteige in ihrem äußeren Erscheinungsbild nicht symmetrisch. Häufig kombinieren sich in einem Bahnhof Sack- und Durchgangsgleise miteinander. Sogar eine Kombination beider an einem Bahnsteig findet sich in der Realität.

Wollte man einen solchen Bahnhof für Trainz realisieren, so mußte man sehr schnell feststellen, daß frei verfügbare Scripte versagen und man entweder ein solches selber erstellen oder jemanden suchen mußte, der ein solches fertigt. Das gehört ab jetzt der Vergangenheit an - jeder CC kann das Script nun den Gegebenheiten seines Bahnhofes anpassen; und das für jeden einzelnen Bahnsteig separat.

Wesentlich vorteilhafter wäre doch ein einziges Script, das alle erdenklichen Konstellationen, die auftreten können, abdeckt. Da mich die Realisierung eines solchen Scriptes nicht mehr los lies, arbeitete ich mich ersteinmal in die Grundbegriffe des Scriptings und der dazugehörigen Programmiersprache ein, wobei ich rege Unterstützung von Josef Pav und insbesondere von Edgar Wood erhielt. Erleichternd kam natürlich hinzu, daß ich bereits früher in Basic 2 und Assembler komplexe Programme geschrieben habe und auch php in Grundzügen beherrsche.

Aber das nur am Rande. Als Ergebnis meiner mehrwöchigen Arbeit liegt nun ein "frei konfigurierbares" Script vor, das zudem noch eine Performanceverbesserung um den Faktor 25 bis 50 oder sogar noch höher mit sich bringt.

Features

--> Die max. Anzahl der Bahnsteige ist auf 99 begrenzt

--> Jeder Bahnsteig ist für sich selber konfigurierbar

--> Die angezeigte Bahnsteigbezeichnung/Bahnsteignummer im Driverinterface "Fahren Sie nach" beeinflußbar

--> höchstmögliche Performance

Konfigurierbarkeit

In fast allen Fällen sind die Eigenschaften eines Bahnsteiges (Anhalteverhalten des Zuges etc.) nicht von dem Einsatz (Session), sondern vom Bahnhof selber abhängig, woraus resultierend ich mich entschlossen habe, die Konfigurierbarkeit auf der Ebene des Contentcreatings anzusiedeln. Als Beispiel dazu: Es würde keinen Sinn ergeben, wenn der User bei einen Sackbahnhof per Userinterface ein oder mehrere Gleise desselben als Durchgangsgleis definiert.

Das Grundprinzip des Scriptes basiert darauf, daß bei der Initialisierung mehrere Parameter eingelesen werden, die jeden einzelnen Bahnsteig für sich selber in folgenden Punkten definieren:

1. Bahnsteiglänge

ist selbsterklärend und bedarf keiner weiteren Erörterung

2. Anhalteposition

Bahnsteiganfang, Bahnsteigmitte oder Bahnsteigende

3. Sackgleis

gibt an, ob es sich um ein Sackgleis oder ein Durchgangsgleis handelt

dieser Parameter steht in Relation zum Parameter 2. Anhalteposition

4. Bahnsteigbezeichnung und Bahnsteignummer

Für das Interface des Drivermodus kann sowohl die Bahnsteigbezeichnung als auch die fortlaufende Numerierung angepaßt werden.

Beispiele:

"Fahre zu xxx Bahnsteig 1A"

"Fahre zu xxx Bahnsteig 1B"

"Fahre zu xxx Flügelbahnhof Gleis 2"

"Fahre zu xxx Bahnsteig Nummer 4"

usw.

Performance

Trainz (resppective das GenericStation-Script, das nunmal Grundlage jeder Passenger-Industrie ist) springt das Bahnsteigscript jedesmal an, wenn irgendein Waggon des Zuges irgendeinen Trigger des Bahnsteiges erreicht und arbeitet auch die komplette Routine ab. Bei sieben Triggern und 20 Waggons wird die Routine in fast allen bisherigen Scripten also insgesamt 140 mal angesprungen und druchgerechnet. Da für die Berechnung des Anhaltepunktes aber nur ein Waggon und ein einziger Trigger benötigt werden, sind demnach 139 Aufrufe des Scripts unnötig und der Performance nicht gerade sehr einträglich.

Das Anspringen des Scriptes durch die übergeordnete Instanz (GenericStation-Script) kann nicht ohne weiteres unterbunden werden, wohl aber in gewissen Rahmen das Abarbeiten des Scriptes. Durch den Aufbau meines Scriptes läßt sich am Einsprungspunkt sehr einfach und schnell berechnen, welcher Trigger als Anhaltepunkt in Frage kommt. Dementsprechend wird die kpl Routine dann entweder abgebrochen oder weiter ausgeführt. Obiges Beispiel zugrundegelegt, finden also gegenüber der sonst üblichen 140 nur noch max 20 Abarbeitungen (in den meisten Fällen sogar nur die Hälfte davon oder noch weniger) der Routine statt, was eine gewaltige Performanceverbesserung mit sich bringt.

Weitere Performanceverbesserungen wurden dadurch erzielt, daß Unterroutinen angelegt wurden, die nur dann angesprungen werden, wenn die Berechnung dieser auch für das Ergebnis benötigt wird. Ferner wurde auf lange If-Sequenzen verzichtet und durch kurze mathematische Berechnungen ersetzt. Schleifen (for-Sequenzen) werden abgebrochen, wenn das Ergebnis erreicht ist. außerdem wurde der Code für den Umfang, den das Script bietet, mit nur wenigen Zeilen extrem kurz gehalten.

Release

Das Script ist nach den ersten umfangreichen Tests voll funktionsfähig und fehlerlos. Weitere Features liegen gedanklich vor; ob diese auch realisiert werden, steht noch nicht fest. Freiwillige Tester werden noch gesucht und können das Script von mir erhalten. Ein endgültiges Release ist vom Ausgang der Tests abhängig und daher nicht innerhalb des nächsten Monates zu erwarten.

Bearbeitet von Klapec

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Yethi

Hallo Klapec

hört sich super an. Würde ich auch gern testen, bin zeitlich aber leider sehr eingeschränkt.

Eine Frage zur Nutzung hätte ich trotzdem noch. Ich habe verstanden dass das Script mit allen Passagierfunktionen zu nutzen ist -- richtig?

Ich freue mich darauf

Otto

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Gast Klapec

@ Yethi

Industien, zu denen auch der SP2-Bahnsteig gehört, basieren auf mehreren einzelnen Elementen, die harmonisch zueinander passen müssen. Im wesentlichen sind dies

-> das Mesh selber, daß die entsprechenden Helper und evtl. Animationen bereitstellt

-> das in Trainz integrierte Generic Script, das die Basisfunktionen übernimmt und die Schnittstelle zum Contenteigenen Script bereitstellt

-> die Config.txt, welche die Funktionen definiert und u. a. als Bindeglied zwischen Genericscript und Mesh anzusehen ist

-> das dem Content beiliegende Script (hier Bahnsteigscript), welches aufgrund der vom Genericscript bereitgestellten Parameter (Funktionsaufrufe) auf den Ablauf des Industriebetriebes steuernd einwirkt. Es regelt im wesentlichen das Anhalten des Zuges, wobei hier natürlich noch weitere Features mit eingebaut werden können, wie z. B. funktionierende Uhren, Fahrzielanzeige (was ich auch noch für die Zukunft in Zusammenarbeit mit Edgar Wood geplant habe), Bahnsteigbezeichnungen, etc. etc.

Die Passagierfunktion wird einzig und alleine durch das übergeodrnete, in Trainz integrierte Script (GenericPassengerStation) in Verbindung mit den entsprechenden Einträgen in der Config.txt bereitgestellt.

Insofern kann ich Deine Frage guten Gewissens mit einem klaren JA beantworten.

Nachdem, wie eingangs erwähnt, mehrere Componenten zusammenpassen müssen, ist es natürlich selbstverständlich, daß ein Testen des Scriptes nur auf CC-Ebene erfolgen kann und sowohl die Mesh zu dem Bahnsteig (Helper für die Trigger müssen neu positioniert werden) als auch Grundkenntnisse der Industriefunktionen (Änderungen in der Config.txt) dringend erforderlich sind. Das von mir erstellte Script kann also nicht durch Ersetzen des in einem x-beliebigen Bahnhof vorhandenen Script eingesetzt werden. Es ist eher für Neukonstruktionen oder Updates vorhandenen Contents vorbehalten, wobei sich der Zeitaufwand für letzteres in Grenzen hält.

Bearbeitet von Klapec

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Gast Bernd Krebs

Guten Tag Klapec:

Das würde ich mal ausprobieren,wenn du nichts dagegen hast.Meine E-Mail Adressesteht im Profil,oder ich kann sie dir ja per PN durchgeben.

Gruß

Bernd

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

Melde dich an, um diesem Inhalt zu folgen  

×

Wichtige Informationen

Nutzungsbedingungen