Guten Abend,
Wie soll denn eurer Meinung nach eine Rückgängig-Funktion arbeiten?
Dazu müsste BAHN ja alle Schritte, die gemacht werden (also Symbole bauen/überbauen, Texte schreiben/ändern/löschen, Infotexte schreiben/ändern/löschen, alle möglichen Dateneingaben/-änderungen/-löschungen z.B. an Takt- oder Rangierpunkten usw. usf.) aufzeichnen.
Ganz genau so stelle ich mir das vor.
Der Speicherbedarf wäre allerdings nicht zu verachten.
Es hat dabei nicht viel Sinn, die jeweilige Änderungs-Aktion zu speichern, sondern nur eine Kopie der jeweils vorher vorhandenen Daten.
Beispiel: Weiche wird gelöscht und stattdessen eine Gerade darauf gebaut.
Die Aktion ist "löschen" + "bauen", aber diese Info alleine nützt wenig.
man zeichnet z.B. nur die letzten 20 oder 50 oder 100 Schritte auf (so wie bei "so ziemlich jedem Programm", welches eine Rückgängig-Funktion besitzt,
Kein Programm mit einer Rückgängig-Funktion verfolgt Änderungen beliebig weit in die Vergangenheit.)
Die letzten N Schritte aufzuzeichnen, reicht wohl, wenn N nur genügend groß gewählt ist.
N=10 oder N=100 wären für BAHN m.E. viel zu wenig, also unbrauchbar.
Bei komplexen Aktionen (Fläche löschen, Strecke bauen usw.) kann man auch nichts anderes machen als jeden Teilschritt einzeln zu speichern (d.h. das, was dort vorher war).
Daher müßte wohl mindestens N=10000 oder mehr sein...
Und es ist auch nicht einfach ein Array anzuwenden.
Das geht nur für simple Symbole ohne Funktion, wie Landschaft oder einfache Fahrwege.
Bei Elementen mit einer Funktion (Weichen, Taktpunkte etc.) müssen die Daten auch irgendwohin, ansonsten wäre das Ganze wohl kaum zu gebrauchen.
Nächstes Problem: Müsste, wenn x Aktionen rückgängig gemacht werden, sich nicht eigentlich auch die sim-Zeit zurückstellen?
Das ist ein interessantes Argument!
Das ist sogar das entscheidende Argument.
Im Gegensatz zu Text- oder Grafikprogrammen, mit denen hier verglichen wird, läuft in BAHN eine Simulation ab.
D.h. das Netz ändert sich auch ohne Einwirkung des Nutzers ständig.
Eine zuverlässige UnDo-Operation müßte alles rückgängig machen, d.h. auch die Uhr und alle fahrenden Züge, alle Schaltungen von Signalanlagen usw.
Ansonsten entsteht ein völliges Chaos, wenn z.B. inzwischen ein Zug in die neu gebaute Strecke gefahren ist und diese nun wieder gelöscht werden soll.
Um das zu realisieren, müßte also alles mitprotokolliert werden. Die Aktionen des Nutzers sind dabei der kleinste Teil
(und müßten alle mit exakter Zeitangabe protokolliert werden).
Da würde der Speicher allerdings schon nach wenigen Minuten restlos alle, ganz abgesehen davon, daß die Simulationsgeschwindigkeit kräftig einbrechen würde.
MfG
Jan B.