Animation die per .lua gelöst ist verändern

  • Tach Leute,


    ich habe da mal wieder ein kleine Problem. Es geht um eine Animation die per .lua gelöst ist. Beispielsweise hier ein Auszug aus der Combine.lua:


    [lua]
    904 if self.isThreshing and self.rotorFan ~= nil then
    905 rotate(self.rotorFan, dt*0.005, 0, 0);
    906 end;[/lua]
    Jetzt meine Frage: Wie kann ich die Animation ändern? Damit scheint es nämlich nicht zu funktionieren:


    [lua]
    self.rotorFan = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.rotorFan#index"));
    [/lua]
    und:
    [lua]
    if self.isThreshing and self.rotorFan ~= nil then
    rotate(self.rotorFan, dt*0.01, 0, 0);
    end;
    [/lua]
    Bei "0.01" kann ich jeden Wert eingeben, es wird immer die Animation aus der Combine.lua abgespielt, da es sich immer gleich schnell dreht. Auch die Animation mit einem "Backup" der self.rotorFan Variable zu lösen und die originale Variable auf, beispielsweise eine leere Transformgroup zuzuweisen um die Standard Funktion zu umgehen, funktioniert auch nicht. Leider enthält das rotate() keine Variable die man ansteuern könnte um diese dann zu verändern. Gibt es also irgendeine Möglichkeit das ganze zu lösen ohne die xml bzw i3d zu bearbeiten? Zwar könnte man das dann recht einfach lösen, indem man eine komplett neue Variable erstellt und diese dann animiert, jedoch möchte ich das gerne vermeiden und nur per .lua lösen.

  • Ich schneiß mal mein Halbwissen in den Raum ;)


    Solange das Teil auf Standardscript läuft, wird immer dieses verwendet. Um das zu ändern musst du die gesamte Funktion überschreiben. Hier mal am Beispiel startThreshing:


    [lua]self.startThreshing = Utils.overwrittenFunction(self.startThreshing, deinSpeziName.startThreshing);


    function deinSpeziName:startThreshing()


    --Hier Originalfunktion + deine Änderungen


    end;


    [/lua]

  • [lua] load()
    self.rotorFanB = self.rotorFan;


    update()
    self.rotorFan = nil;
    if self.isThreshing and self.rotorFanB ~= nil then
    rotate(self.rotorFanB, dt*0.01, 0, 0);
    end;[/lua]




    Müsste funktionieren, da sobald du self.rotorFan auf nil machst die originale Animation nicht mehr aufgerufen wird.


    webalizer, stimmt so weit, aber wegen der Patches usw. können ja immer Änderungen an den Funktionen passieren und da sollte man Funktionen nur überschreiben wenn es nicht anders geht. Und eine komplette update() Funktion nicht unbedingt, weil da doch die Wahrscheinlichkeit sehr hoch ist dass bei einem Patch etwas geändert wird.

  • Vielen Dank an euch beide. :thumbsup:
    Es funktioniert nun. Ich habe das ganze halt jetzt so wie modelleicher geschrieben hat gelöst. Zwar würde die Lösung von webalizer wohl auch funktionieren, aber die andere schien mir da "eleganter".

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!