Kai Brendel Geschrieben 28. Februar Geschrieben 28. Februar Moin, habe jetzt schon viel rum probiert mit Ereignissen und Lua, komme aber noch zu keinem Endergebnis... Zug fährt in Depot A ein Ereignis wird ausgelöst Zug wird nach Depot B verschoben Verzögerung z.B. 30s Zug fährt aus Depot B wieder aus Bis zu dem Punkt das der Zug nach Depot B verschoben wird, komme ich... Eine automatische, verzögerte Ausfahrt nicht. Grundsätzlich könnte man das ja auch mit Portalen lösen, möchte mir aber die langen Gleise für die Pause sparen, und wenn man dann mehrere Züge reinschickt, gibt das Stau in Blöcken davor/dahinter... Na ja, das wäre dann halt ein Schattenbahnhof mit Parallelgleisen, und genau das soll ja nicht :-) Gruß Kai
Goetz Geschrieben 28. Februar Geschrieben 28. Februar vor 13 Minuten schrieb Kai Brendel: Bis zu dem Punkt das der Zug nach Depot B verschoben wird, komme ich... Eine automatische, verzögerte Ausfahrt nicht. Schwer zu sagen, warum das bei dir nicht klappt. Denn genau so, wie von dir beschrieben, ist es richtig: von Depot zu Depot.mbp Eventuell hast du in deiner EV einen "Schreibfehler"? (z.B. falscher Parameter ausgewählt) Viele Grüße Götz
Kai Brendel Geschrieben 28. Februar Autor Geschrieben 28. Februar Schon mal Danke für die Anlage, werde ich mir später mal angucken. Manchmal sieht man den Wald ja vor lauter Bäumen nicht
Goetz Geschrieben 28. Februar Geschrieben 28. Februar vor 3 Minuten schrieb Kai Brendel: Manchmal sieht man den Wald ja vor lauter Bäumen nicht Und dann hilft es oft, wenn man zumindest weiß dass das angedachte Konzept richtig ist.
Kai Brendel Geschrieben 3. März Autor Geschrieben 3. März Moin... hatte es grundsätzlich richtig, mir war nur nicht bewusst das es bei Lua einen Punkt (.) und Doppelpunkt (:) gibt. Vor allem nicht das die damit Properties und Methods unterscheiden, kannte ich bisher so nicht... Gerade den Doppelpunkt kannte ich bisher nur von Inheritance...
Goetz Geschrieben 3. März Geschrieben 3. März vor 1 Stunde schrieb Kai Brendel: Vor allem nicht das die damit Properties und Methods unterscheiden Das ist nicht ganz richtig. Eigentlich kennt Lua nur Tabellen. Was Punkt und Doppelpunkt wirklich tun, hatte ich vor einer Weile mal in einem Video erklärt: Bitte sieh mir die teils schrägen Konstrukte in meinem Video nach. Sie sollen dazu dienen, die Zusammenhänge zu verdeutlichen. Natürlich hast du insofern recht, dass dieses Lua Konstrukt "Properties" und "Methods" ähneln soll. Und Neo verwendet es auch so, dass er wirkliche Eigenschaften und Methoden aus seinem MBS so an die Lua Tabellen übergibt, dass sie diesem etwas exotischen Tabellenkonstrukt entsprechen. Viele Grüße Götz
Kai Brendel Geschrieben 3. März Autor Geschrieben 3. März Hallo Götz, deine Erklärung macht es nicht wirklich besser Habe mir gerade mal den "Ansatz" von OOP auf Lua.org (https://www.lua.org/pil/16.html) angesehen, das ist ja nicht mal wirklich OOP, mehr Structs/Unions/Records, mit Function Members, aber egal, LUA ist für das was es tun soll verdammt schnell, thats it...
Goetz Geschrieben 3. März Geschrieben 3. März vor 9 Minuten schrieb Kai Brendel: deine Erklärung macht es nicht wirklich besser Es war auch nicht meine Absicht, Lua besser zu machen. Ich wollte dich vor Missverständnissen bewahren. vor 10 Minuten schrieb Kai Brendel: das ist ja nicht mal wirklich OOP Genau darum ging es mir. Die kindgerechte Form des Videos hat ihre Ursache darin, dass unerfahrene User in einem anderen Forum ziemlich hanebüchenes Zeug zum Doppelpunkt in Lua geschrieben hatten. Denen wollte ich damals auf die Sprünge helfen. vor 4 Minuten schrieb Kai Brendel: LUA ist für das was es tun soll verdammt schnell und es ist explizit dafür ausgelegt, in andere Programme integriert zu werden. Deshalb findest du es in einer Vielzahl von Anwenderprogrammen und Spielen, die von einer Steuerung per Skriptsprache profitieren.
Kai Brendel Geschrieben Samstag um 17:04 Uhr Autor Geschrieben Samstag um 17:04 Uhr (bearbeitet) Da das so wie oben beschrieben funktioniert, wollte ich das Ereignis erweitern, und zwar kann eine Lok bei der Einfahrt in das Depot entscheiden wo sie rauskommen möchte, gelöst über eine Objekt-Variable zur Lok. if not deferredCall then if vehicle.variables[self.name] ~= nil then target = vehicle.variables[self.name] else target = $("Depot Blumenbach 1") end target:add(vehicle) defer(60, "Delay") elseif deferredCall == "Delay" then if target.count > 0 then target:release(0) end end Die Krux daran ist, das "target" global sein muss, sonst klappt das "release" nach 60s nicht. "target" kann aber auch nicht neu ermittelt werden, da im zweiten Aufruf die Variable "vehicle" nicht mehr bekannt ist. Zu Problemen würde das führen: Wenn während der 60s Wartezeit eine zweite Lok einfährt und "target" ändert. Der gleiche Code in einem anderen Depot verwendet wird. Gut, kann man mit einer anderen globalen Variablen lösen Jemand eine Idee dazu? Mfg, Kai Brendel Bearbeitet Samstag um 17:42 Uhr von Kai Brendel
Neo Geschrieben Samstag um 18:05 Uhr Geschrieben Samstag um 18:05 Uhr Lagere den Defer-Aufruf inkl. Defer-Abarbeitung in ein benutzerdefiniertes Ereignis aus, mit target als Parameter. Jeder Aufruf eines benutzerdefnierten Ereignisses speichert seine eigenen Aufrufparameter, damit vermeidest du Seiteneffekte. Auch gehen globale Lua-Variablen bei einer Änderung der EV oder beim Laden der Anlage verloren. Viele Grüße, Neo
Kai Brendel Geschrieben Sonntag um 07:03 Uhr Autor Geschrieben Sonntag um 07:03 Uhr Moin, vielen Dank für den Hinweis, das hat gut funktioniert. Das habe ich gemacht, damit auch andere was davon haben :-) Ein Zug/Fahrzeug betritt virtuelles Depot "Depot Reisenhofen" local target = $("Depot Blumenbach 1") if vehicle.variables[self.name] ~= nil then target = vehicle.variables[self.name] end $("ReleaseFromDepot"):invoke(target, vehicle) Ein benutzerdefiniertes Ereignis ReleaseFromDepot: Parameter target, vehicle (Beide Typ "Objekt") if not deferredCall then target:add(vehicle) defer(60, "Delay") elseif deferredCall == "Delay" then if target.count > 0 then target:release(0) end end Das mit dem wahlfreien Depot klappt natürlich nur, wenn die einfahrende Lok eine Variable (Depot Reisenhofen) hat die genauso heißt wie das Ereignis, damit self.name greift, und diese Variable vom Typ Objekt und auf das andere Depot zeigt. Gruß, Kai
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden