Posts by Yoshi

Willkommen in der Transport Fever Community

Welcome to the fan community of Transport Fever and Train Fever, the economic simulators of Urban Games. The community is free for you to share and inform yourself about the game. We cultivate a friendly and objective interaction with each other and our team will be happy to answer any questions you may have.

 

Registration and use is of course free for you.

 

We wish you a lot of fun and hope for active participation.

The Team of the Transport-Fever Community

    Ich bin mir sicher, dass die Repainter selbst wissen, welche Version sie noch nicht umgesetzt haben. Wie sie auch schon mehrfach betont haben, werden sie sich noch um weitere Varianten kümmern.


    Im Allgemeinen fände ich es toll, wenn öfters über die vorhandenen Varianten kommentiert wird, als über die nicht vorhandenen. Sonst hat man irgendwann das Gefühl, das die Sachen, die man macht eben die falschen sind. Das wäre schade.

    Wenn der Zug länger als der funktionale Bahnsteig ist, wird der Zug immer mit der Spitze am funktionalen Bahnsteigende halten. Wenn der Zug kürzer als der funktionale Bahnsteig ist, wird der Zug sich znetirert an der Halteposition (üblicherweise mittig im Bahnsteig) positionieren.

    Du kannst die Brücken von der Mitte des Gewässers aus in beide Richtungen ziehen, dann ist der Brückenscheitel an der gewünschten Position und Höhe. Dazu mit , und . die Wunschhöhe einstellen, bevor du auf die Karte zum Platzieren klickst.


    Zum nachkorrigieren die Elemente entfernen und neu setzen. Das erfüllt den selben Zweck ;)

    Das wurde vor ein paar Tagen erst behandelt:

    Ja, die sind hier: C:/Program Files (x86)/Steam/userdata/(deine Steam id)/760/remote/1066780

    Ich hab keine Ahnung wie die bei bei Steam auf die clevere Idee kamen als Bezeichnung für Screenshots 760 einzuführen.


    Bitte verzichte auf solche Buchstabenketten, das beeinträchtigt die Lesbarkeit (insbesondere der Überschriften). Gleiches gilt für Satzzeichenhäufungen.

    Auch wenn das ganze mittlerweile völlig offtopic ist. Nein, es ist nicht kompliziert, es ist nur anders als man es von TF1 gewohnt ist. Hintergrund des ganzen ist, dass es mehrere Steamnutzer auf den gleichen Rechner geben kann, die die Mods dann unabhängig voneinander (de-)installieren können.

    Es ist die herkömmliche Konstruktion wie in TF1. Als Grundlage dient eben die Curved Station Mod von Urban Games. Allerdings habe ich eben die Möglichkeit ergänzt, die Bahnsteige mit unterschiedlichen Längen zu bauen. Dazu gibt es entsprechend Parameter.

    sagt eigentlich alles. ;)

    Keine Module, aber flexible Parameter.


    Und die Technik lässt sich auch auf andere Modelle übertragen, d.h. man kann Bahnhöfe mit höheren Bahnsteigen realisieren.

    Nicht abschrecken lassen, es folgt eine Recht ausführliche Wall of Text. Der eigentliche Inhalt ist aber sehr kompakt.


    Im Grunde sind zwei Schritte notwendig:

    • Eingabemöglichkeit für den User schaffen
    • Eingegebene Werte nutzen, um das Objekt zu beeinflussen

    Für den ersten Schritt gibt es bei Konstruktionen die Parameter. Für die Rotation in X- und Y-Richtung lassen sich z.B. Slider nutzen, die ihre Standardstellung in der Mitte bei 0 haben und dann nach links oder rechts für negative oder positive Werte geschoben werden können. Hinweise zu den verschiedenen Parametertypen bekommst du hier:

    Parametertypen in Konstruktionen


    Die Liste der möglichen Slider-Positionen kann man dabei entweder unter values als Liste von Strings, also Buchstabenketten in "-Anführungszeichen angeben, oder man schreibt sich eine kleine lua-Funktion, die mit einer for-Schleife die Strings erzeugt. Mit defaultIndex gibt man den standardmäßig auszuwählenden Eintrag der Liste an. Wichtig ist dabei, dass bei den Parametern der erste Eintrag mit 0 angesprochen wird.


    Für die Auswertung der Parameter kann man in der updateFn, in der die eigentliche Modellplatzierung erfolgt, mit params.<key> auf die vom User ausgewählte Position zurückgreifen. Wenn der Slider also ganz links ist, wird 0 zurückgegeben. Aus der Position müssen wir dann die gewünschte Rotation errechnen.


    Nehmen wir an, unser Slider hat die Möglichkeiten

    "-10°", "-5°", "0°", "+5", "+10°". Dann wäre der geeignete Rechenweg:

    local rotationX = -10 + (params.rotX * 5) (unter der Annahme, dass der auszuwertende Parameter "rotX" als Key hat)


    Nun haben wir die Rotation berechnet. Jetzt geht es darum, die Modelle entsprechend zu rotieren. In Konstruktionen werden die zu platzierenden Modelle in einer result.models-Liste eingetragen. Die Einträge haben zwei Eigenschaften, die id, also den Verweis auf das Modell, und transf, also die Transformationsmatrix zur Beeinflussung der Größe, Rotation und Position des Modells. Für uns ist letztere hier relevant.


    Die Transformationsmatrix ist eine 4*4-Matrix, in der all diese Platzierungseigenschaften verrechnet sind. Das ist meistens etwas umständlich, wenn man es von Hand machen möchte. Um die Umrechnung der einzelnen Parameter in die Matrix besser zu verstehen (notwendig ist es hier nicht unbedingt), kann man sich das Tool hier anschauen:

    Transformationsmatrix


    Da wir ja im Spiel zur Laufzeit (also wenn der User die Konstruktion platzieren möchte) die Eigenschaften verändern wollen, können wir nicht auf das Tool im Lexikon zurückgreifen. Es gibt aber im Ordner res/scripts/ eine Skriptdatei transf.lua die einige ähnliche Funktionen anbietet. Um diese nutzen zu können, muss die Scriptdatei in der Konstruktion geladen werden. Dazu schreibt man an den Beginn der Datei - zumindest ist es so üblich - die Zeile für den Import:

    local transf = require("transf")


    Unten bei dem Eintrag in die result.models-Liste kann man dann

    transf =transf.scaleRotZYXTransl(vec3.new(1,1,1),transf.degToRad(0, rotationY, rotationX), vec3.new(0,0,0)) angeben. Diese Funktion erzeugt dann die notwendige Matrix anhand der übergebenen Parameter.


    Am Besten ist es aber, wenn man es sich, wie die Vorredner empfohlen haben, an bestehenden Beispielen anschaut. Das wäre z.B. bei der Konstruktions-Datei von den Campingwagen aus dem Kleingarten-Paket der Fall.


    Ich hoffe, ich habe alle Codebeispiele richtig geschrieben, bin gerade nur am Handy und habe es aus dem Gedächtnis wiedergegeben.

    Currently, the time until release is 'infinity', as I do not have a planned release day. I have plenty of tasks to do and there are some issues that I'd like to solve before release.