Ladezeit für Waggons. Wer legt sie fest ?

  • Seitdem ich mich mit meinem Schrägaufzug beschäftige , kommt ein Problem zum anderen.

    Was jetzt für mich noch unklar ist :

    Wer oder was bestimmt , wie schnell die Plane , die die Ladung darstellt , nach oben kommt ( also der Wagen gefüllt ist ) ?

    Mein Waggon mit Asche als Transportgut hat eine Animation.

    Aber gleichgültig wieviel Frames ich festlege , der Wagen wird immer gleich schnell gefüllt.

    Und das verstehe ich nicht. :thinking_face:


    Hat da jemand eine Idee ?

    Für einen Rat wäre ich sehr dankbar.

    LG Tilo

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • das hat mich auch immer gestört.

    Hatte das auch bereits mal vor Jahren angefragt.


    Da waren wohl die Skripte in der Industrie für verantwortlich, wie lange ein Wagen zur Beladung fixiert ist, auch wenn mich dieses fixieren auch gewaltig stört...


    Was mir spontan einfällt wäre, dass du das Mesh mit Animation nicht an die Ladung hängst, sondern es nachträglich via Skript startest.


    Der Wagen wird soweit ich weiß immer unmittelbar voll gemacht.

    Du musstest jetzt die Ladung "Asche" unsichtbar machen und via Skript abfragen, ob - und wie voll der Wagen ist und dann die Animation langsam abspielen.

    Wäre zwar nicht perfekt, und die Ki würde die langsamere Animation nicht berücksichtigen, aber naja...


    Anderes fällt mir jetzt nicht ein.

  • Für die Ladezeiten sind sowohl das Script der Industrie, als auch auch das Script des Fahrzeugs zuständig.

    BeginLoad - liefert die Dauer des Ladebeginns

    GetLoadTime - liefert die Dauer des eigentlichen Ladevorgangs

    EndLoad - liefert die Dauer der Ladeendes

    Verwendet wird jeweils der grösserte von beiden Werten (Industrie oder Fahrzeug). Entsprechende Routinen für Unload sind ebenfalls vorhanden. Auf die Dauer der Animation hat keine der Routinen einen direkten Einfluss.


    Nähere Infos findest Du unter http://online.ts2009.com/mediaWiki/index.php/Class_Industry


    Bei EndLoad enthält der Parameter LoadingReport auch die tatsächlich geladene Menge, sodass dort die Zeit von der Lademenge abhängig gewählt werden kann (falls meine Erinnerung richtig ist).

    Für LoadingReport scheint im Wiki kein Eintrag vorhanden zu sein. Die Infos findest Du direkt im Script loadingreport.gs (bei TANE/TRS19 im Programmverzeichnis unter resources\scripts).


    Peter

  • Vielen herzlichen Dank für deine Erklärung , Peter.

    Ich werde das mal durcharbeiten , sobald ich mein Scriptproblem bezüglich Animation gelöst habe ( hoffentlich schaffe ich das auch :astonished_face: ).

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • So ganz bin ich mit dem Thema noch nicht fertig.

    Da man , bei entsprechender Suche , genügend User findet , die das gleiche Problem angesprochen haben , wundert es mich , dass niemand eine Lösung kennt.

    Es geht doch ( jedenfalls in meinem Fall ) nur darum , eine Plane langsamer in einem Wagon hochkommen zu lassen.

    Verweise auf "GetLoadTime" bringen mich nicht recht weiter.

    Ich möchte ja die Ladezeit nicht wissen ( wenn ich das richtig interpretiere ) , sondern verlängern.

    Und wenn es nicht nur ein einzelnes Fahrzeug sein soll , sondern generell die Ladezeiten kürzer sein sollen , was ja wünschenswert wäre , müsste man doch etwas tiefer eingreifen können.

    Leider ist mir das nicht möglich. Ich verstehe zu wenig von Scripten.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • Schon mal versucht der Animation mit mehr Frames zu machen?

    One of the painful signs of years of dumbed-down education is how many people are unable to make a coherent argument. They can vent their emotions, question other people’s motives, make bold assertions, repeat slogans—anything except reason.“ (Thomas Sowell)

  • Die Dauer der Animation der Schüttgutladung hängt von der Anzahl der Frames der Animation ab. Meistens wird wohl eine Animation mit 30 Frames verwendet, woraus sich eine Dauer von 1s ergibt. Die Animationsdauer hängt also vom verwendeten Fahrzeug ab und kann (normalerweise ?) nicht von der Industrie bestimmt werden.


    Peter

  • Vermutlich mache ich etwas grundlegendes falsch.

    Hier mal das geänderte Objekt ( ehemals für Kohlen geeignet ) :

    Die mesh-table in der config:


    mesh-table

    {

    default

    {

    mesh "DR_Om_body/DR_Om_body.lm"

    auto-create 1

    }


    load

    {

    mesh "DR_Om_body/load/load.im"

    anim "DR_Om_body/load/load.kin"

    auto-create 1

    use-parent-bounds 1

    }

    }


    Das in der "om.gs" - File :


    include "vehicle.gs"

    class O_Wagen_zweiachs isclass Vehicle

    {

    float BeginLoad(LoadingReport report)

    {

    return 5.0;

    }

    float BeginUnload(LoadingReport report)

    {

    return 1.0;

    }

    float EndUnload(LoadingReport report)

    {

    Sleep(1.0);

    return 1.0;

    }

    };


    Im Ordner "om Ash" :


    Im Ordner "Body"


    Im Ordner "Load"


    O.a. "load.kin" ist mit 300 FpS gemacht.

    Also hoffte ich auf 10 Sekunden , in der der Wagon gefüllt wird.


    Aber geändert hat sich leider nichts.

    Habe ich da noch einen anderen Fehler drin ?

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

    • Offizieller Beitrag

    Dem Spiel ist egal, wie viele Frames die Animation lang ist. Es wird diese für die vom Script zurückgegebene Zeit abspielen. Da dein Script keine Zeit zurückgibt wird entweder die Ladezeit der Industrie oder für irgendeinen Standardwert abgespielt.


    Probier mal folgenden Codeschnipsel in der .gs Datei vom Wagen hinzuzufügen (Freihändig, hab ich jetzt nicht selbst getestet)



    Ich hab mich noch nicht viel mit Industrien beschäftigt, aber das sollte dem Spiel angeben, beim Ent/Ladevorgang mindestens 10 Sekunden Wartezeit einzuplanen (bestimmt durch return 10.0) und die Animation wird auch manuell über diesen Zeitraum bewegt. Allerdings würde dies den Wagen immer ganz Voll oder ganz leer machen (man sollte aber auch aus dem LoadingReport den Füllstand abfragen und entsprechend die Animation steuern können), und wenn du die Ladung mit ner Queue verknüpft hast, ist das eventuell auch nur an die Ladezeit gekoppelt. In dem Fall nimm einfach mal die Zeilen mit SetMeshAnimationFrame heraus, sodass da nur noch das return drin steht in der Funktion.



    Greets, Mika

    Student in Vollzeit, Straßenbahnfahrer in Teilzeit. Skripte für Trainz wenn Motivation da ist...


    "It's always more fun to share with everyone" -Jack Johnson

  • Schau mal hier hinein. Ich erinnere, dass man bei meinem Gueterwagen variable Beladungszeiten mit SetMeshAnimationSpeed implementiert war.


    gueterwagen.gs

    One of the painful signs of years of dumbed-down education is how many people are unable to make a coherent argument. They can vent their emotions, question other people’s motives, make bold assertions, repeat slogans—anything except reason.“ (Thomas Sowell)

  • Probier mal folgenden Codeschnipsel in der .gs Datei vom Wagen hinzuzufügen (Freihändig, hab ich jetzt nicht selbst getestet)

    Mika , Mika. Was würde ich nur ohne dich machen ?

    Also zunächst ging mal garnichts. Die Ladung kam nicht hoch.

    Dann habe ich mich im WIKI nochmal schlau gemacht.

    Habe die Anim auf 350 Frames begrenzt und dann den Eintrag so gemacht :

    SetMeshAnimationFrame("load", 350.0, 10.0)

    Die Anim wird nun bis zum Frame 350 in 10 Skunden abgespielt.


    Heureka. Jetzt geht es endlich.

    Vielen herzlichen Dank , mein junger Freund.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

    • Offizieller Beitrag

    Ich hab mir den Skript von Mick angesehen, so gehts dann wohl auch und ist unabhängig von der Anzahl der Frames. Dennoch werden hier wohl nur Türen und keine Beladung gesteuert. Ich hatte, da ich im Wiki gelesen habe, SetMeshAnimationSpeed sei nicht mit SetMeshAnimationState kompatibel davon abgesehen, dass zu empfehlen, da ich einfach selbst noch nicht viel mit Industrien programmiert habe.

    Am Ende führen aber bekanntlich alle Wege nach Rom also ists ja auch egal, wie genau das Problem gelöst wurde :)




    Greets, Mika

    • Offizieller Beitrag

    Aber man kann doch auf jeden Fall das Lademesh anders nennen (also nicht load) und dann selber den Ladestand ermitteln und daraus den Frame berechnen, den man anzeigen will?





    Greets, Mika

  • Die Animation der Schüttgutladung im Waggon scheint nicht von einem Script gesteuert zu werden, sondern ist im Trainzcode enthalten.


    Peter

    Ganz so kann es ja nicht sein , Peter.

    Denn sonst würde es ja nicht so ablaufen , wie ich es im Script eingestellt habe.


    Tilo

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)