Jump to content

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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

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

Geschrieben

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

Geschrieben
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

Geschrieben

Hallo Götz,

deine Erklärung macht es nicht wirklich besser:D 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...

Geschrieben
vor 9 Minuten schrieb Kai Brendel:

deine Erklärung macht es nicht wirklich besser

Es war auch nicht meine Absicht, Lua besser zu machen.   9_9
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.

Geschrieben (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 von Kai Brendel
Geschrieben

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

Geschrieben

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...