(25.08.2011 10:05)officercrockey schrieb: Also bei mir sieht das jetzt so aus:
(...)
Ich empfehle, 'mal einen Blick auf das
Zug-Beispiel zu werfen, welches neueren NML-Versionen seit einigen Wochen beiliegt; das führt u.A. die Benutzung des Callbacks für 'articulated vehicles' vor - und nutzt die elegantere Variante, die Callbacks via graphics block zu definieren. Ich habe 'mal was zusammengeschrieben, was nur einen Steuerwagen pro Zug erlauben sollte in der Annahme, dass Bit 2 von bitmask_vehicle_info vom Steuerwagen ausschließlich gesetzt wird (siehe Property unten):
Code:
/* Überprüfen, ob Dosto angehängt werden kann */
switch (FEAT_TRAINS, PARENT, check_vehicle, vehicle_type_id) {
steuerwagen: CB_RESULT_ATTACH_ALLOW; // we already have one of these
dosto_w: CB_RESULT_ATTACH_ALLOW; // können wir immer anhängen (alternativ: hier zu 'nem Switch verlinken,
// der Bedingungen für diesen prüft
CB_RESULT_ATTACH_DISALLOW; // alle anderen Wagen können nicht angehängt werden
}
/* Überprüfen, ob Steuerwagen angehängt werden kann - nur einer möglich pro Zug */
switch (FEAT_TRAINS, PARENT, pruefe_steuerwagen, bitmask_vehicle_info & bitmask(2)) {
0: vehicle_type_switch; // bit is not set. We can allow attachment
CB_RESULT_ATTACH_DISALLOW; // bit is set, we already have one of these
}
item (FEAT_TRAINS, dosto_w) {
property {
bitmask_vehicle_info: bitmask(1);
}
graphics {
can_attach_wagon: pruefe_steuerwagen;
}
}
item (FEAT_TRAINS, my_engine) {
property {
}
graphics {
can_attach_wagon: pruefe_steuerwagen;
}
}
item (FEAT_TRAINS, steuerwagen) {
property {
bitmask_vehicle_info: bitmask(2);
}
graphics {
can_attach_wagon: pruefe_steuerwagen;
}
}
Ich habe das Beispiel jetzt nicht geprüft im Sinne von "funkioniert kompiliert so", aber die Idee wie man eine Überprüfung auf bestimmte Wagon in NML implementieren kann, sollte hierdurch ersichtlich werden können.
Das Vorhandensein des n-ten Bits in bitmask_vehicle_info kann man mittels "(bitmask_vehicle_info & bitmask(n)) > 0" im Argument des Switch-Blocks überprüfen, bzw. man testet, ob das 0 ist wie im obigen Beispiel
Zitat:Das Beispiel von mb...
... hat leider mit NML ausgesprochen wenig zu tun und hier im NML-Thread ist es "ganz leicht" fehl am Platz.