Auch wenn es z.Z. nicht möglich ist einzelnen Modulen ein eigenes Menü (wie bei der ganzen Konstruktion) zu geben, kann man zumindest Varianten mit M und N wählbar machen. Hier wird kurz beschrieben, wie man darauf im Modul-Skript zugreifen kann.
Zunächst muss der updateFn des Moduls die Variable "params" übergeben werden. Es handelt sich dabei um die Parameter, die auch die ganze Construction bei Bau (oder ggf. auch beim Upgrade) zur Verfügung hatte, wie hier erklärt wird. Also: updateFn = function(result, transform, tag, slotId, addModelFn, params, closureParams)
Zusätzlich ist aber auch eine Liste aller bereits platzierten Module enthalten - einschließlich des aktuell zu platzierenden Moduls, sofern es gerade über einen freien Slot gehalten wird (also nicht "frei schwebt"). Auf diese Liste greift man zu mit params.modules und kann sie einer SlotId indizieren. Folglich gibt params.modules[slotId] die Informationen zum eigenen Modul zurück. Folgendes ist darin enthalten:
{
metadata = {
--Metadaten des Moduls
},
name = "dateipfad/name.module", --Dateipfad und -name des Moduls
updateScript = {
fileName = "", --die .scipt-Datei mit der updateFn bei dynamisch erzeugten Modulen (z.B. automatisch generierte Mod-Gleismodule)
params = {}, --Liste von Parametern, für das updateScript (wenn vorhanden)
},
variant = 0, --DAS BRAUCHEN WIR
}
Display More
Der variant-Eintrag ist das, was mit N und M variiert werden kann. Es handelt sich um eine Integer-Variable, die per default 0 ist und mit N und M variiert werden kann (da Integer theoretisch von -2.147.483.648 bis 2.147.483.647 geht, hat man wirklich sehr viele Möglichkeiten).
Möchte man also unterschiedliche Versionen eines Moduls vereinen, kann man das damit tun und mit params.modules[slotId].variant darauf zugreifen.
Die updateFn eines Moduls mit drei Varianten könnte dann z.B. so aussehen:
updateFn = function(result, transform, tag, slotId, addModelFn, params, closureParams)
--gewählte Variante von 3 möglichen, wird zyklisch durchgeschaltet wenn man N oder M gedrückt hält
local variant = params.modules[slotId].variant % 3
if variant==0 then
--alles für die erste Version
...
elseif variant==1 then
--alles für die zweite Version
...
else
--alles für die dritte Version
...
end
end,
Display More
Die Einsatzmöglichkeiten sind vielfältig. Ich habe das beispielsweise verwendet, um unsymmetrische Unter- und Überführungen an Bahnhöfen rotieren zu können (Treppe links, rechts, beides). Da man aber theoretisch über 4.000.000.000 Varianten unterscheiden könnte, fällt euch bestimmt noch mehr ein, was man damit anstellen könnte
Edit:
In der getModelsFn(params), die die frei schwebende Vorschau des Moduls vor der Platzierung liefert, kann man mit params.variant ebenfalls auf die Variante zugreifen und so dort ebenfalls nutzen. Danke an Maverick2002 für den Hinweis!
Noch ein paar Randbemerkungen:
- Sofern man die SlotId eines anderen Moduls kennt, kann man natürlich auf die gleiche Art auch dessen Variante abfragen.
- Wenn jemand einen eleganteren Weg kennt, passe ich diesen Lexikon-Eintrag auch gerne an
- mit dem Befehl debugPrint(...) kann man sich eine beliebige Tabelle in der Konsole ausgeben lassen - das war mir ungemein hilfreich, um herauszufinden, wie ich an solche Modul-Informationen heran komme.
Viel Spaß beim Skripten