Vorbereitung
Als erstes müsst ihr die verschiedenfarbigen Teile in diesem Bild erstellen und platzieren:
- Ein Rad (Blau)
- Einen Kolben (Rot)
- Eine Pleuelstange (Grün)
- Eine Verbindungsstange(Gelb)
Man benötigt nicht alle Teile um die Animation darzustellen. Wenn man zB. eine Rangierlokomotive mit lediglich einer Pleuelstange erstellt, braucht man die restlichen Teile nicht erstellen.
Jedes Teil sollte auf die andere Seite der Lokomotive gespiegelt werden, so dass man nur ein Mesh von jedem Teil benötigt, auch wenn in echt die Pleuelstangen aus mechanischen Gründen auf verschiedenen Höhen/Positionen sind.
Man kann für jedes Teil einen anderen Origin (Ursprungspunkt im Modellierungsprogramm) haben, doch dann muss man in der group Datei jedes Teil neu positionieren. Also lasst es uns einfach halten und alles wie im Bild oben dargestellt anwenden.
Den Kolben animieren
Öffne die .msh Datei des Kolbens und suche am Anfang nach
Dann ersetze es mit
local vec2 = require "vec2"
local vehicleutil = require "vehicleutil"
function data() return {
animations = { drive = vehicleutil.makePistonAnim(vec2.new(X1, Y1), vec2.new(X2, Y2), vec2.new(X3, Y3)) },
Ersetze X1 und Y1 mit der Position von WheelCenter in Meter.
Ersetze X2 und Y2 mit der Position von WheelPos0 in Meter.
Ersetze X3 und Y3 mit der Position von PistonPos0 in Meter.
In meinem Fall lauten die Werte:
X1 = 0
Y1 = 0.682405
X2 = 0
Y2 = 0.47
X3 = 2.26
Y3 = 0.9
Nimmt die genauesten Werte, die ihr bekommt! Andernfalls werden die Animationen der Stangen nicht mit denen der Räder übereinstimmen.
Die Pleuelstange animieren
Öffne die .msh Datei der Pleuelstange und suche am Anfang nach
Dann ersetze es mit
local vec2 = require "vec2"
local vehicleutil = require "vehicleutil"
function data() return {
animations = { drive = vehicleutil.makeCouplingRodAnim(vec2.new(X1, Y1), vec2.new(X2, Y2)) },
Ersetze X1 und Y1 mit der Position von WheelCenter in Meter.
Ersetze X2 und Y2 mit der Position von WheelPos0 in Meter.
In meinem Fall lauten die Werte:
X1 = 0
Y1 = 0.682405
X2 = 0
Y2 = 0.47
Nimmt die genauesten Werte, die ihr bekommt! Andernfalls werden die Animationen der Stangen nicht mit denen der Räder übereinstimmen.
Die Verbindungsstange animieren
Öffne die .msh Datei der Verbindungsstange und suche am Anfang nach
Dann ersetze es mit
local vec2 = require "vec2"
local vehicleutil = require "vehicleutil"
function data() return {
animations = { drive = vehicleutil.makeConnectingRodAnim(vec2.new(X1, Y1), vec2.new(X2, Y2), vec2.new(X3, Y3)) },
Ersetze X1 und Y1 mit der Position von WheelCenter in Meter.
Ersetze X2 und Y2 mit der Position von WheelPos0 in Meter.
Ersetze X3 und Y3 mit der Position von PistonPos0 in Meter.
In meinem Fall lauten die Werte:
X1 = 0
Y1 = 0.682405
X2 = 0
Y2 = 0.47
X3 = 2.26
Y3 = 0.9
Nimmt die genauesten Werte, die ihr bekommt! Andernfalls werden die Animationen der Stangen nicht mit denen der Räder übereinstimmen.
Animationen aktivieren
Nun müssen wir noch dem Spiel sagen, dass es die Animationen bei der Fahrt ausführen soll. Dazu schreiben wir in jede GRP/MDL Datei, in der sich eines dieser drei animierten Meshes befindet nach dem "children" Block folgendes:
Die Zahl 1 steht dabei für das Mesh, der "children" Liste , welches animiert werden soll. Haben wir also eine "children" Liste bestehend aus der Lok, drei Rädern, dem Kolben, der Pleuelstange und der Verbindungsstange, dann müssen Einträge mit den Nummern 5, 6 und 7 hinzugefügt werden. Dies wiederholen wir für alle LODs und für alle GRPs in denen sich ein animiertes Mesh befindet. Besitzen wir in der MDL zwei GRP Einträge, einen für die Lok, einen für den Tender, benötigen wir einen Eintrag im "events" Block für die Gruppe Nummer 1.
Wichtig: Auch, wenn die Räder ebenfalls während der Fahrt animiert werden, dürfen diese (sofern sie als "Axle" eingetragen wurden) keinen "events" Eintrag besitzen, sonst stürzt das Spiel ab.
Das wars!
Sobald ihr den Rest der Lokomotive importiert habt, solltet ihr hübsch animierte Pleuelstangen im Spiel vorfinden.
Falls ihr zu diesem Thema Hilfe benötigt, hinterlasst einen Kommentar!