Como solución propongo esta, pero si alguien conoce una solución mejor que lo comente.
El soporte que asciende:
float pasos = 50;//pasos para subir
float paso;//avance por momento
float zpos = 5;//subida máxima desde la posición actual
default
{
state_entry()
{
paso = zpos/pasos;
llSetPos(llGetPos()+<0,0,zpos>);
state a;
}
}
//cerrar
state a
{
state_entry()
{
llSleep(3);
llSetPos(llGetPos()-<0,0,zpos>);
zpos = 0;
}
collision_start(integer a)
{
llSleep(3);
state c;
}
}
//ciclico, subida paso a paso
state c
{
state_entry()
{
llSetPos(llGetPos()+<0,0,paso>);
zpos = zpos + paso;
if (zpos >= 5)
state b;
state d;
}
}
state d
{
state_entry()
{
llSetPos(llGetPos()+<0,0,paso>);
zpos = zpos + paso;
if (zpos >= 5)
state b;
state c;
}
}
//abrir
state b
{
state_entry()
{
llSetTimerEvent(3);
}
timer()
{
llSetTimerEvent(0);
state a;
}
}
La puerta del ascensor:
rotation rotz = <0,0,2,0>;
default
{
state_entry()
{
llSetRot(llGetRot()*rotz);
state a;
}
}
//cerrar
state a
{
state_entry()
{
llSetRot(llGetRot()*rotz);
}
collision_start(integer a)
{
state b;
}
}
//abrir
state b
{
state_entry()
{
llSetTimerEvent(3);
llSetRot(llGetRot()*rotz);
}
timer()
{
state a;
}
}
No hay comentarios:
Publicar un comentario