martes, 13 de mayo de 2008

Ascensor








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: