Animiertes Child.Objekt - hier zusätzliche Lüfter - mit ControlValue aus der Engine.bin ansteuern


Abonniere unseren Kanal auf WhatsApp (klicke hier zum abonnieren).
  • Folgendes Problem, es wurde ein Child-Objekt in der Engine.bin hinzugefügt. Eine GeoPcDx Datei mit zugehöriger BAN Datei. Nun drehen die Lüfter sich immer.
    Meine Bemühungen, diese Bewegung von außen zu beeinflussen (ein- und ausschalten in Abhängigkeit der "RPM"), sind alle fehlgeschlagen. Es fehlt irgendwie "die Brücke" zu dieser GeoPcDx Datei oder es sieht so aus, als kann dann diese BAN Datei diese Animation nicht ausführen, weil irgendwie so etwas wie ein Pfad zu dieser entsprechenden GeoPcDx Datei nicht zu finden ist.


    Zum Verständnis:

    HTML
    <AnimSet>
        <iAnimObjectRenderBlueprint-cAnimation d:id="18258">
            <AnimationID d:type="cDeltaString">Ventilator</AnimationID>
            <AnimationName d:type="cDeltaString">Pfad zur BAN Datei</AnimationName>
            <AnimateInEditor d:type="cDeltaString">eFalse</AnimateInEditor>
        </iAnimObjectRenderBlueprint-cAnimation>
    </AnimSet>


    Lua Anteil


    C++
    p.rpm = Call("GetControlValue", "RPM", 0);
    if(p.rpm ~= p.lastValue_rpm or firstrun == true) then
        if (p.rpm > 10) then
            Call("SetControlValue", "Cooler", 0, 1);
        else
            Call("SetControlValue", "Cooler", 0, 0);
        end
        p.lastValue_rpm = p.rpm;
    end
    firstrun = false

    Für Vorschläge wäre ich dankbar!

  • Schönes Problem ;)

    Ich kann mich erinnern, dazu schon mal etwas im ukts-Forum gelesen zu haben, bin aber bei einer vergleichbaren Problemstellung auch erst einmal nicht weitergekommen.

    Der Ansatz war wohl


    Der "billigste" Workaround wäre, das Child-Objekt zu duplizieren, und dem Duplikat die Animation zu entziehen. Im script kannst Du ja die Sichtbarkeit der child-objekte mit "ActivateNode" einfach steuern: ist die Drehzahl z.B. < 10, dann blendest Du das animierte child aus und das statische child ein bzw. umgekehrt, wenn die Drehzahö steigt.


    Es muss aber auch besser gehen. Ich meine, da war was mit Call(“<ChildName>:AddTime”, “<AnimationID>”, time) - leider habe ich mir bei meinem erfolglosen Versuch keine Notizen gemacht und das ganze irgendwie ohne child-Objekt gelöst.

    "wir müssen unbedingt immer so weiter machen wie immer"

  • Hallo Cotten Eye Joe,


    mir fehlt eine Referenz zur Animation, wenn Du versuchst den Wert von "Cooler" nur an und abzuschalten.

    Mistral hat schon den richtigen Funktionsaufruf, wahrscheinlich muss das ganze etwa so aussehen:


    Call("Cooler:AddTime","Ventilator", [Taktgeber])


    Taktgeber wäre dann eine Mischung aus Drehzahl und verstrichener Zeit. Taktgeber größer = schneller abgespielte Animation bzw Taktgeber kleiner = langsamer abgespielte Animation.


    Du könntest dann auch die gute Idee von Mistral umgehen, im dem Du die Animation erst ab einer bestimmten Drehzahl abspielen lässt.


    Gruß *hi*

  • "Cooler" sieht wie folgt aus und kann nur 0 und 1


    ist nur eine Funktion, um diese Animation ein- oder auszuschalten


    ist dann eingeschaltet, dann habe ich mir gedacht, dass dann per unterschiedlicher Werte von "RPM" vielleicht die Drehzahl im Lua-Script angepasst wird.


    Hm?

  • Also, Dein letzter Auszug aus dem Fahrzeug-Blueprint sagt, dass der Lüfter standardmäßig ausgeschaltet ist. Er wird erst durch das Skript aktiviert, wahrscheinlich schon im ersten Update per Call("SetControlValue", ... auf "1" gesetzt. Ich habe leider keine Ahnung davon, wie man mit einem ergänzenden Skript das originale beeinflussen kann - da bin ich jetzt leider raus... Oder liegt dir das Originalskript als lesbares *.lua vor?


    Du hast sicher den Schalter "-ShowControlStateDialog" beim TS-Start aktiviert, oder? Ist der Kontrollwert für "Cooler" beim Laden des Fahrzeuges auf "1"?

    Wenn ja, könntest Du zum Vortasten auch mal versuchen, den Kontrollwert über den Inputmapper auf eine Taste zu legen - verändert sich beim Tastendruck dann der Kontrollwert?


    Cotten Eye Joe : magst Du uns sagen, um welches Fahrzeug es sich handelt? Dann kann ich mal selbst einen Blick darauf werfen...

    "wir müssen unbedingt immer so weiter machen wie immer"

    Einmal editiert, zuletzt von Mistral ()

  • Mistral ,


    es ist im original Script irgendwas mit Ventilator, jedoch wie üblich verschlüsselt.
    Es ist die BR245 von RSSLO und es sind im GeoPcDx der Lok keine Lüfter verbaut. Es ist zwar eine Animation angedacht, jedoch ist keine BAN Datei mit dabei. Ist wohl nicht rechtzeitig fertiggeworden. Das Ganze im Lua ist auch noch auf Slowakisch - hehe.


    SeKu ,


    ah cool, danke für den Hinweis! Das Child der GeoPcDx Datei ist in einem Blueprint-Script für animierte scenerie Objekte eingetragen - wie die animierten Driver von DTG Fahrzeugen. Ob es da eine andere Möglichkeit gibt, leider k.A. - konnte nichts finden.


    HTML
        <Blueprint>
            <cAnimSceneryBlueprint>
                <Name d:type="cDeltaString">Cooler</Name>
                <BrowseInformation>
  • Kann es sein, dass es mehrere Versionen der 245 gibt? Ich habe die mit der Allgäubahn mitgelieferte...


    Was ich sehe, passt nicht recht mit dem zusammen, was Du beschreibst :/

    - die Benennungen sind unterschiedlich

    - unter den Gittern im Dach sind bei mir keine rotierenden Lüfter

    - es gibt eine ban-Datei; und die Animation (im Control List Dialog die sechste von unten läuft schön in einer Schleife von 0 bis 1 durch - nur zu sehen ist am Modell nichts...)


    Möglicherweise ist es aber auch heute einfach zu heiß, und ich stehe auf der Leitung :S



    "wir müssen unbedingt immer so weiter machen wie immer"

  • Cotten Eye Joe : dann ist das eine andere Lok. Meine scheint weniger detailliert; und die Lüfter habe ich defintiv nicht. Gerade sehe ich, dass ich die Allgäubahn damals auf Steam gekauft habe - vielleicht liegt es daran. Oder die 245 aus Mühldorf - Salzburg ist eine überarbeitete Version. Schade, ich kann da also nicht selbst nachforschen.

    "wir müssen unbedingt immer so weiter machen wie immer"

  • Da gibt es eine Inkonsistenz:


    Im ControlContainerBlueprint-cControlValue von "Cooler", müsste im Feld AnimationID der Wert von "Venti_Anim" zu "Ventilator" geändert werden.

    Jedenfalls heißt er in deinem AnimSet so.


    Kann sein dass sich AnimSceneryBlueprint und ControlContainer beide mit Namen "Cooler" nicht verstehen, vielleicht einen Namen ändern?

  • Die Benennungen der Animation sind identisch.
    Normale Engine.bin, da werden ziemlich weit oben die Animationen eingetragen und das funktioniert dann auch, wenn in der GeoPcDx Datei der Lok diese Animation vom Ersteller implement wurde. Also, habe ich das so auch probiert - nach diesem Schema nachgebaut. Funktioniert jedoch nicht (Anmerkung: Vielleicht habe ich da was falsch gemacht), weil die nun in die Engine.bin eingetragene BAN Datei nicht auf die GeoPcDx im Child zugreifen kann.


    hier mal die Child Datei

    Das funktioniert soweit, der Lüfter dreht sich immer - auch wenn der Motor abgestellt ist.


    Dann habe ich aus dieser Datei die Animation entfernt und in die Engine.bin verlagert - aber dann kann ich das nicht mehr ansteuern. Bewegt sich nichts.

    Es fehlt irgendwie eine Verbindung zwischen der BAN Datei und der Child GeoPcDx Animation

  • O.k. -Du kannst im AnimScenery-Blueprint nur eine Auto-Animation eintragen. Die lässt sich meines Wissens wirklich nicht abschalten. Und ja, die ban muss im child-blueprint liegen, damit es geht.


    Ich hatte stattdessen mal mit dem AnimProceduralScenery-Blueprint experimentiert, weil man da auch nichtautomatisch laufende Animationen eintragen kann. Das könntest Du mal testen.

    "wir müssen unbedingt immer so weiter machen wie immer"