Stim/Joint Timing

  • Folgende Situation, ich habe ein Modell mit rotierendem Joint und etwas entfernt davon ein Object, das einen Stim aussendet, dass soll immer dann geschehen, wenn der Joint auf seiner Ausgangsposition ist.


    Ich hoffe mal, dass meine Rechnung stimmt, dass der Stim dann alle
    (Y+Z)/Xms ausgelöst werden soll. [vorerst würde es mir schon reichen zu wissen ob man es so rechnen kann]


    Y=Z sind Joint Winkel
    X Geschwindigkeit


    Nur jetzt ist das Problem, dass der Stim X/2ms zufrüh/spät ausgelöst wird.


    Kann ich irgendwo wie bei Emittern einstellen welche Zeit der Joint oder Stim hat so das ich die beiden aufeinander abstimmen kann?


    ______________________
    Andere Frage zu Joints
    Mit NVAttachMyObj kann ich ja Sachen anhängen. Es gibt anscheinend auch die Möglichkeit die an Joints zu hängen mit NVAttachMyObjJoint
    Wie geht das?

  • na ja auslesen tue ich es nicht, aber halt da wo er im Modell sich befindet wenn keine Joint Option vorgegeben ist bzw. keine Winkelbewegung ausgeführt wird.
    Also Y=Z=0

  • Ich habe dich so verstanden, dass du die Stim über den Joint triggern willst. Daher meine Frage.


    Wenn beide aber zur gleichen Zeit starten und der Joint im Kreis rotiert, dann sollte es so gehen:


    Weglänge des Joints (s) = 2 * Pi * r * |X-Y|/360°


    Schwingdauer des Joints (t) = gesucht


    Geschwindigkeit des Joints (v) = s / t = X


    -> t = s / v


    -> t = (2 * Pi * r * |X-Y|/360°) / X


    (siehe dazu auch Kreissektor)


    Die errechnete Zeit kannst du dann bei dem Stim-Erzeuger einstellen:
    Stim-Objekt -> Act/React -> Source -> Source Editor -> Edit Life Cycle -> Period: Schwingdauer

  • Irgendwie komm ich aber mit der Formel auf nix tolles was wahrscheinlich auch daran liegt, dass DromEd der Radius egal ist -aber vielen Dank für die tolle Herleitung. :D


    Den X Wert den man angibt ist auf alle Fälle Winkel/Zeit.
    Meine Vermutung ist X Grad pro 100ms, es kommt mir aber so vor als ob das einen Tick zu langsam ist.


    Von der Zeit sind ca. 700ms die der Joint vom Ursprung bis zu einer Seite braucht.
    Hab jetzt gerade gesehen, dass der Joint immer in einer Seitenposition anfängt und deswegen nicht synchron mit dem Stim ist.



    Ich füg die Jointbewegung jetzt einfach über ne MetaTrap hinzu und pack da 700ms delay drauf, jetzt gilts halt nur zu schauen ob diese 700ms stimmen.


    EDIT: Habs jetzt mal ne Stunde lang laufen lassen, die 700ms sind zwar nahe dran, aber jetzt nach ner Stunde bemerkt man schon, dass es eindeutig nicht ganz passt

  • Was versuchst Du eigentlich zu erreichen? Willst du eine Präzisionsuhr in Dromed nachbauen? Ich bezeweifle dass Du dafür irgendetwas auch nur annähernd genaues in Thief vorfinden wirst. Es gibt ein TrapTimedRelay Script, womit sich wohl noch am ehesten eine einigermaßen genaue Uhr realisieren lässt. Dieses Script hat bei einigen Thief-Installationen jedoch nicht funktioniert.

  • Klingt jetzt vielleicht etwas komisch. Ich will ein gescheites Pendel bauen, dass dann an einer anderen Stelle einen Stim erzeugt.


    Lustige Idee mit dem Jump Switcher gekoppelt an einen Inverter mit Delay läuft super, so kann ich dann auch die Zeit genau einstellen.


    Wie mache ich es jetzt, das mein StimObject nur bei TurnOn einen Stim aussendet?

  • Der einfachste Weg der mir momentan einfällt:


    1. Nutze als Stim-Objekt eine EmitterTrap
    2. Die EmitterTrap verschießt Objekte, die die eigentliche Stim aussenden (z.b. unsichtbare Projektile, die nach 1s wieder gelöscht werden)
    3. Verlinke dein Pendel mit der EmitterTrap


    Dafür gibt es aber bestimmt auch irgendein elegantes Script...

  • Hab leider kein elegantes Script gefunden, vielleicht weiß ja jemand mehr.


    Danke, das mit der Emitter Trap ist denke ich mal ganz ok. Jetzt muss ich nur noch mein Objekt basteln.


    Das Timing des Emitters muss ich halt jetzt noch hinbekommen, weil gerade werden viel zu viele Objekte oder keins abgefeuert...


    Wie funktioniert den das Skript ReloadTweqEmit wie sende ich ein TweqComplete an meinen Emitter? - dann kann ich die Rate hoch setzen und so kontrollieren, dass immer nur ein Schuss kommt.

  • Du musst bei Tweq -> Emit -> Max Frames den Wert "1" einstellen. Dann schießt er immer nur 1 Projektil ab.


    Bei Tweq -> Emit -> Halt stellst du Stop Tweq ein.


    Wenn du jetzt noch ReloadTweqEmit verwendest, kann dein Emitter beim nächsten TurnOn wieder "feuern".

  • Das mit der Emitter-Trap hat einen Haken, den man bei Verwendung beachten sollte:


    Jedes Objekt in Thief hat eine Object ID. Die Objekt-IDs sind nach oben hin beschränkt. Mit jedem emitierten Objekt greift sich das neue Objekt eine der freien Objekt-IDs. Wird das Objekt zwerstört, wird die Objekt-ID aber nicht wieder freigegeben. Nach und nach werden so immer mehr IDs verbraucht bis keine mehr da sind. Schießt der Spiele z.B. zusätzlich noch mit Pfeilen werden ebenfalls Objekt-IDs verbraucht. Irgendwann sind dann keine mehr da und das Spiel wirft eine Fehlermeldung und steigt eventuell mit einem Absturz des Programms aus.


    Solange Du nicht zu viele Objekte auf diese Art erzeugst dürfte es einem Spieler nicht auffallen, es sei denn er ließe das Spiel über mehrere Tage weiterlaufen (sowas gibt es auch, z.B. im Playstyle CushyTrumpet).

  • Ahh sieht so aus als verschont mich DromEd auch nicht mit Speicherleaks.
    Danke für den Hinweis.


    Wirken die Emitter auch wenn man sie nicht sieht und weit weg ist. [Bei Sim on?]
    oder kann man die Objekte auch manuell zerstören, dass die IDs wieder frei werden?


    Versuche gerade dafür ne Lösung zu finden (eben für den Fall, dass es permanent läuft), wird wohl auf ne RAT und nen TriggerRoom raus laufen.


    Aber so wies grade ist läuft es sehr schön. Wenn ich natürlich auf Emitter verzichten könnte wäre es perfekt.

  • Sinister meint das anders:


    Du kannst Objekte zwar zerstören, den ID-Counter beeinflusst das aber nicht. D.h. wenn der Counter einmal bei 32000 steht, kannst du ihn nicht wieder auf, z.B. 100 setzen. Das nächste erzeugte Objekt bekommt trotzdem eine 32001 als ID zugewiesen.


    Was vielleicht die Lösung wäre:
    Anstelle dem Objekt eine Source zu verpassen, könnte man eine Metaproperty bauen, die die Source hat.
    Wenn das Objekt TurnOn empfängt, wird die Metaproperty hinzugefügt. Bei TurnOff wird die Metaproperty wieder gelöscht. Somit sollte man das ID-Problem umgehen können.