• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Avatar drehen

Rebekka Revnik

Superstar
Huhu hab mal wieder Huddeleien mit Rotationen. Und zwar will ich einen Avatar auf nem Posestand drehen, genau um 180 Grad. Den Stand drehen geht leider nicht, weil die Kamera festgemacht ist und die dreht sich ja dann mit. Hab schon mal versucht das letzte verlinkte Prim zu drehen (welcher ja der der Ava ist), aber da tut sich nichts. Geht das überhaupt und wenn ja wie? Oder wie krieg ich die Kamera wieder dahin wo sie vorher war wenn ich den Stand drehe?
Danke schon mal im voraus :)
LG Reb
 
Vermutlich längst erledigt, aber was solls...

PHP:
string  animation;
string  BTN_90      = "90°";
string  BTN_180     = "180°";
string  BTN_270     = "270°";
string  BTN_360     = "360°";
vector  rot_90      = <0,0,90>;
vector  rot_180     = <0,0,180>;
vector  rot_270     = <0,0,270>;
vector  rot_360     = <0,0,0>;
integer menu_channel;
integer menu_handler;
key     av;

// =========================================================================
MoveLinkedAv(key av, rotation avrot)
{
    integer linknum = llGetNumberOfPrims();
    while (av != llGetLinkKey(linknum)) --linknum;
    vector size = llGetAgentSize(av);
    if(size)
    {
        rotation localrot = ZERO_ROTATION;
        if(llGetLinkNumber() > 1) localrot = llGetLocalRot();
        llSetLinkPrimitiveParamsFast(linknum,[PRIM_ROTATION,avrot*localrot/llGetRootRotation()]);
    }
}

default
{
    on_rez(integer num)
    {
        llResetScript();
    }

    state_entry()
    {
        llSitTarget(<0,0,1>,ZERO_ROTATION);
        animation = llGetInventoryName(INVENTORY_ANIMATION, 0); // einfach die erste zur demonstration
        if(animation == "") animation = "stand";
        av = "";
    }

    touch_start(integer num)
    {
        menu_channel = (integer)(llFrand(99999.0) * -1);
        menu_handler = llListen(menu_channel,"","","");
        llDialog(llDetectedKey(0),"AvatarOnSitTargetRotation",[BTN_90,BTN_180,BTN_270,BTN_360],menu_channel);
        llSetTimerEvent(90);
    }

    listen(integer channel, string name, key id, string message)
    {
        llListenRemove(menu_handler);
        llSetTimerEvent(0);
        if     (message == BTN_90)  MoveLinkedAv(av, llEuler2Rot(rot_90*DEG_TO_RAD));
        else if(message == BTN_180) MoveLinkedAv(av, llEuler2Rot(rot_180*DEG_TO_RAD));
        else if(message == BTN_270) MoveLinkedAv(av, llEuler2Rot(rot_270*DEG_TO_RAD));
        else if(message == BTN_360) MoveLinkedAv(av, llEuler2Rot(rot_360*DEG_TO_RAD));
    }

    run_time_permissions(integer perms)
    {
        if (perms & PERMISSION_TRIGGER_ANIMATION)
        {
            llStopAnimation("sit");
            llStartAnimation(animation);
        }
    }

    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            av = llAvatarOnSitTarget();
            if(av) llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);
            else
            {
                if(llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) llStopAnimation(animation);
                llReleaseControls();
            }
        }
    }

    timer()
    {
        llSetTimerEvent(0);
        llListenRemove(menu_handler);
    }
}
Wie du siehst, kann man den sitzenden (verlinkten) avatar (dessen root vector) wie ein ganz gewöhnliches prim drehen oder verschieben.
wichtig ist localpos/localrot, sonst drehst du das rootprim, sprich den ganzen posestand
 
Du könntest mal in der Routine MoveLinkedAv versuchen "llSetLinkPrimitiveParams" statt "llSetLinkPrimitiveParamsFast" zu verwenden, eine Verzögerung stört in dem Anwendungsfall ja vermutlich nicht. Auch diese Funktion wird aber laut Wiki nur partiell unterstützt.
 
Ich hab eigentlich mit den llSetLink-Funktionen nichts negatives feststellen können, auch wenn in der Wiki was anderes steht. Die Einträge da sind wohl schon bissel veraltet.
 
Schade, war halt nur so eine Idee. Die anderen relevanten Befehle sollen ja gemäß Wiki erfolgreich getestet sein. Dann bleibt nur die nervige und zeitintensive Methode, die einzelnen Funktionen in Testscripten selber zu testen ... oder es meldet sich noch wer, der das gleiche Problem gehabt und gelöst hat.

Liebe Grüße, Mareta
 

Users who are viewing this thread

Zurück
Oben Unten