Kipp- und Neigbarkeit von Mods/Assets

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • Als Laie wollte ich mal die Frage stellen wie aufwändig es ist, bei einer Mod, oder besser einem Asset, die Neig- und Kippbarkeit einzubauen, sodass sich das Objekt um die X-, Y- und Z-Achse drehen lässt.

    Es gibt nur ganz wenige, neben den Vanilla Bäumen und Steinen, bei denen es möglich und bei denen es echt praktisch ist. Insbesondere bei Fahrzeugen oder auch liegenden Baumstämmen wäre das von Vorteil, um sie besser auf einem unebenen Gelände platzieren zu können, ohne dass sie zur Hälfte in der Luft hängen.

  • Warum machst du keine konkreten Angaben zu den Änderungen?

    Ist es ein Riesenaufwand, diese Angaben hier Schritt für Schritt zu erläutern?

    Oder ist es Usus, dass man manchen Mitstreitern hier alles einzeln aus der Nase ziehen muss?


    So sehr ich deine Arbeiten hier schätze, aber diese Art der Infoweitergabe geht besser.

    Gruß aus Köln, Jürgen



    Ein Tag ohne Musik ist möglich, aber sinnlos.

  • Weil die Frage nach dem Aufwand gestellt wurde und der ist nunmal nicht groß.


    Bester Lerneffekt für eigene Umsetzung ist, sich soviel wie möglich .con und .lua aus Mods anzusehen und die Zusammenhänge zu erkennen.


    Das macht auch extrem viel Spaß

  • 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.

  • Yoshi : Wahnsinnstext! Danke! Das schaue ich mir gerne an! Wenn ich die Anpassung für mich im Zweifelsfall dann vornehme, wäre sie beim nächsten Update halt wieder weg. Klar. Daher wäre es bestimmt ganz hilfreich, wenn der jeweilige Mod-/Assetentwickler das vielleicht direkt mit einbauen könnte.

    Es müssen ja noch nichtmal Slider eingebaut werden. Die Rotation lässt sich ja auch über Tasten vornehmen.


    Das mit den Campingwagen ist ein guter Hinweis. Wusste gar nicht, dass sich die auch kippen und neigen lassen.

BlueBrixx