Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Constraints
#1
Hi Community,
Die Constraints sind ein tolles Werkzeug um die Fahrzeugzusammenstellungen einzuschränken. Ich finde allerdings die Umsetzung aktuell recht unflexibel und unnötig kompliziert (Angabe Prev/next)
Was mich immer wieder an den Constraints stört ist
1. dass man einen Wagen nur einmal oder beliebig oft einsetzen kann, ohne diesen mehrfach zu definieren.
2. dass man in festen Multiple Units immer prev und next angeben muss.

Meine Idee dazu ist recht einfach: Die Fahrzeuge mit ihren restlichen Werten haben erstmal nichts mit der Zusammenstellung zu tun. Also könnte man die Constraints aus den dats der Fahrzeuge raus nehmen und in eine (oder mehrere) dats auslagern. Vorzugsweise sollte diese Datei auch nicht von makeobj übersetz werden, sondern beim Spielstart eingelesen werden.

In der/den Constraints Datei(en) würde man dann alle Constraints definieren und dabei auf die Fahrzeug Objekte verweisen. Auf ein solches Objekt kann mehrfach verwiesen werden. Dadurch würde man es ermöglichen über Constraints Wagenzusammenstellungen aus der Realität abzubilden, ohne gleich das Depot vollzumüllen. In meinem Depot gibt es alleine 16 Wagen für den Eurostar E320...
Man sollte sich nochmal Gedanken drüber machen wie genau man die Constraints dann definieren möchte. Die aktuelle Lösung mit prev/next finde ich eher unpraktisch.

Meine Ideen dazu wäre etwas ähnliches wie einen regulären Ausdruck dafür zu verwenden.
Eine Constraint Zeile wäre dann z.B. etwas wie
"(ICE2_powerHead (ICE2_car|ICE2_post)* ICE2_diningCar
(ICE2_car|ICE2_post)* ICE2_cabTail)* (ICE2_cabHead (ICE2_car|ICE2_post)*
ICE2_diningCar (ICE2_car|ICE2_post)* ICE2_powerTail)*",
Wobei "*" für beliebig häufig, "?" für optional und "|" für oder steht und die ICE_... Objekte alle in einer dat definiert wurden.
Für relativ einfache Constraints wie hier (ein ICE2 besteht aus maximal 2 Teilzügen, wobei niemals 2 Triebköpfe aneinandergekuppelt werden, ein Teilzug kann vorwärts oder rückwärts fahren und enthält immer einen Steuerwagen, einen Speisewagen und einen Triebkopf)
wäre ein solcher Ausdruck auch noch recht übersichtlich. Für komplexere Constraints wird es dann unübersichtlich aber solche komplexen Constraints wären mit dem aktuellen System garnicht erst möglich ohne zig Wagen zu definieren.

Meine andere Idee dazu wäre etwas ähnliches wie die BNF zu verwenden.
Kurzfassung der BNF: Teilzusammenstellungen bekommen einen Namen und
diese kann man an anderer Stelle wieder mit und bzw. oder (rekursiv)
aneinanderketten.

eine BNF zu dem obigen Ausdruck wäre die folgende:
ICE2_CARS:=ICE2_CARS ICE2_CARS|ICE2_car|ICE2_post|_EPSILON_
ICE2_MID:=ICE2_CARS ICE2_diningCar ICE2_CARS
ICE2:=ICE2_powerHead ICE2_MID ICE2_cabHead
ICE2_REVERSE:=ICE2_powerTail ICE2_MID ICE2_cabTail
ICE2_COMP:=ICE2|ICE2_REVERSE|ICE2 ICE2|ICE2 ICE2_REVERSE|ICE2_REVERSE ICE2_REVERSE

wobei _EPSILON_ für "garnichts" steht. Es geht auch ohne das Epsilon aber dadurch wird der Ausdruck länger.
Man
müsste dann festlegen welche dieser Definitionen tatsächlich einen
fahrbaren Zug beschreiben und welche nur Hilfskonstrukte sind.

In beiden Fällen müsste man auch etwas wie ein "nimm alles an" Wort einführen, um zi signalisieren, dass an dieser Stelle alles erlaubt ist. none würde wegfallen. Schön wären noch reservierte Worte, die für alle Loks, alle Güterwagen, alle Postwagen bzw. alle Personenwagen stehen aber ich glaube an dieser Stelle kann das Spiel die nicht sauber voneinander unterscheiden.

Ich selbst habe noch nie in C++ programmiert (Simutrans ist in C++ geschrieben oder?), würde bei dieser Funktion aber so weit wie ich kann mithelfen.

Worüber ich mir noch keine genaueren GEdanken gemacht habe ist die Frage wie man im Falle des regulären Ausdrucks herausfinden kann welche Fahrzeuge als nächstes erlaubt sind.
Zitieren


Nachrichten in diesem Thema
Constraints - von Freahk - 26-10-2016, Wednesday-00:29:32
[Kein Betreff] - von prissi - 26-10-2016, Wednesday-00:45:00
[Kein Betreff] - von Freahk - 26-10-2016, Wednesday-03:46:00
[Kein Betreff] - von Wurzelgnom - 26-10-2016, Wednesday-07:53:35
[Kein Betreff] - von Freahk - 26-10-2016, Wednesday-10:22:26

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste