Archon Short
Forumsgott/göttin
Moinsen, eventuell weiß hier ja jemand Rat
Ich hab eine schöne Tour, die ich mit llSetKeyframedMotion abfahre.
Leider stoppt sie immer am letzten Punkt, wenn ich KFM_LOOP nutze.
Aktuell behelfe ich mir mit einem Timer, der das Script nach Ablauf einer Runde zurücksetzt.
Das ist jedoch nicht Sinn und Zweck der Geschichte, da ich ja auch zwischendrin KFM_CMD_PAUSE nutzen möchte.
Hier die Behelfslösung:
Ich hab eine schöne Tour, die ich mit llSetKeyframedMotion abfahre.
Leider stoppt sie immer am letzten Punkt, wenn ich KFM_LOOP nutze.
Aktuell behelfe ich mir mit einem Timer, der das Script nach Ablauf einer Runde zurücksetzt.
Das ist jedoch nicht Sinn und Zweck der Geschichte, da ich ja auch zwischendrin KFM_CMD_PAUSE nutzen möchte.
Hier die Behelfslösung:
Code:
// HIER DIE DATEN FÜR DIE STRECKE A ZU B EINTRAGEN
// POSITION ROTATION
list L_Wegpunkte_hin = [ <262221.00000, 262233.60000, 24.08972>, <0.00000, 0.00000, 180.00000>, // Start
<262067.90000, 262233.60000, 24.08972>, <0.00000, 0.00000, 180.00000>,
<262055.30000, 262220.50000, 24.08972>, <0.00000, 0.00000, -90.00000>,
<262055.30000, 262066.80000, 24.08972>, <0.00000, 0.00000, -90.00000>,
<262048.80000, 262054.20000, 24.08972>, <0.00000, 0.00000, 180.00000>,
<261997.40000, 262054.20000, 24.08972>, <0.00000, 0.00000, 180.00000>,
<261984.70000, 262046.50000, 24.08972>, <0.00000, 0.00000, -90.00000>,
<261984.70000, 262023.60000, 24.08972>, <0.00000, 0.00000, -90.00000>,
<261991.30000, 262010.80000, 24.08972>, <0.00000, 0.00000, -45.00000>,
<262006.80000, 261995.10000, 24.08972>, <0.00000, 0.00000, -45.00000>,
<262020.70000, 261989.30000, 24.08972>, <0.00000, 0.00000, -0.00001>,
<262036.70000, 261989.30000, 24.08972>, <0.00000, 0.00000, -0.00001>,
<262046.30000, 261985.70000, 24.08972>, <0.00000, 0.00000, -90.00001>,
<262057.90000, 261976.60000, 24.08972>, <0.00000, 0.00000, 0.00000>,
<262225.20000, 261976.60000, 24.08972>, <0.00000, 0.00000, 0.00000>,
<262235.40000, 261986.20000, 24.08972>, <0.00000, 0.00000, 90.00001>,
<262245.90000, 261991.20000, 24.08972>, <0.00000, 0.00000, 0.00000>,
<262262.80000, 261991.20000, 24.08972>, <0.00000, 0.00000, 0.00000>,
<262276.10000, 261995.70000, 24.08972>, <0.00000, 0.00000, 45.00000>,
<262292.70000, 262011.50000, 24.08972>, <0.00000, 0.00000, 45.00000>,
<262297.50000, 262022.20000, 24.08972>, <0.00000, 0.00000, 90.00001>,
<262297.50000, 262042.00000, 24.08972>, <0.00000, 0.00000, 90.00001>,
<262303.60000, 262052.00000, 24.08972>, <0.00000, 0.00000, 0.00000>,
<262344.10000, 262052.00000, 24.08972>, <0.00000, 0.00000, 0.00000>,
<262351.50000, 262057.80000, 24.08972>, <0.00000, 0.00000, 90.00001>,
<262351.50000, 262101.60000, 24.08972>, <0.00000, 0.00000, 90.00001>,
<262346.80000, 262108.20000, 24.08972>, <0.00000, 0.00000, 180.00000>,
<262239.10000, 262108.20000, 24.08972>, <0.00000, 0.00000, 180.00000>,
<262232.70000, 262114.80000, 24.08972>, <0.00000, 0.00000, 90.00001>,
<262232.70000, 262221.30000, 24.08972>, <0.00000, 0.00000, 90.00001>]; // End
// Speed of the vehicle
float F_Geschwindigkeit = 3.1;
list L_aktuelle_Strecke;
float F_sekunden;
Berechne_Fahrt()
{
integer I_Schritt;
list L_USE;
F_sekunden = 0;
L_aktuelle_Strecke=[];
L_USE = L_Wegpunkte_hin;
for(I_Schritt = 0; I_Schritt < llGetListLength(L_USE)-1; I_Schritt = I_Schritt+2)
{
vector v1a;//Position
vector v1b = (vector)llList2String(L_USE,I_Schritt);
vector v2a;//Rotation
vector v2b = (vector)llList2String(L_USE,I_Schritt + 1);
if(I_Schritt == 0)
{
v1a = llGetRegionCorner() + llGetPos();
v2a = llRot2Euler( llGetRot())* RAD_TO_DEG;
}
else
{
v1a = (vector)llList2String(L_USE,I_Schritt-2);
v2a = (vector)llList2String(L_USE,I_Schritt-1);
}
float distance = llVecDist(v1b, v1a);
float seconds = distance / F_Geschwindigkeit;
vector diff_p = v1b - v1a;
vector diff_r = v2b - v2a;
L_aktuelle_Strecke += [diff_p, llEuler2Rot(diff_r* DEG_TO_RAD), seconds];
F_sekunden += seconds;
}
llMessageLinked(LINK_THIS,20,"a",NULL_KEY);
Fahrt_zur_naechsten_Position();
}
Fahrt_zur_naechsten_Position()
{
//llOwnerSay(llList2CSV(L_aktuelle_Strecke));
llSetKeyframedMotion(L_aktuelle_Strecke,[KFM_MODE,KFM_FORWARD]);
llSleep(F_sekunden);
llResetScript();
}
default
{
state_entry()
{
llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_PHYSICS_SHAPE_TYPE, PRIM_PHYSICS_SHAPE_CONVEX]);
Berechne_Fahrt();
}
//link_message(integer s_link, integer s_chan, string s_msg, key id)
//{
//if(s_chan == 100)Berechne_Fahrt();
//}
}