Para ello se crearon dos esferas de distinto color para representar al electrón (la verde) y al positrón (la roja). A estas se le añadieron los siguientes scripts:
Script 1: Cambio de color al colisionar
default
{
state_entry()
{
llCollisionFilter("BASE", NULL_KEY, FALSE);;
}
collision_start(integer num)
{
llSetColor(<1.0, 1.0, 0.4>, ALL_SIDES);
}
}
Script 2: Cambio de color al tocar
default
{
state_entry()
{
llCollisionFilter("BASE", NULL_KEY, FALSE);;
}
touch_start(integer total_number)
{
llSetColor(<0.0, 1.0, 0.0>, ALL_SIDES);
}
}
El primer script es el esencial ya que es el que al detectar la colisión hacen que cambien de color para representar los fotones. Se puso un filtro para la base, luego se explicará el por qué.
El segundo script se integró más que nada para no tener complicaciones a la hora del montaje del experimento, ya que al colisionar con cualquier cosa las esferas cambiaban de color, entonces tocándolas simplemente se recuperaba el color original.
Se creó una base en forma de "cuenco gigante" transparente y se enlazaron las esferas a lo alto de la base para que rodaran y acabaran colisionando. Por eso como se dijo antes se metió un filtro en el choque para que al colisionar las esferas con la base no cambiasen de color, así lo único con lo que podrían cambiar de color dentro de esa base serían al chocar la una con la otra.
Luego de tener todo enlazado, la base y las esferas, al objeto final se le añadió un script, el de explosión, que básticamente lo que hace es desenlazar objetos, así las esferas empiezan a rodar y colisionan al llegar al fondo de la base y esta colisión provoca el cambio de color.
Script 3: Explosión
integer CHANNEL = 7;
string COMMAND = "collapse";
integer OWNER_ONLY = TRUE;
// Exploding Objects script, by Dale Innis
// Do with this what you will, no rights reserved
// See https://wiki.secondlife.com/wiki/ExplodingObjects for instructions and notes
integer lh = 0;
init() {
llListenRemove(lh);
key who = NULL_KEY;
if (OWNER_ONLY) who = llGetOwner();
lh = llListen(CHANNEL,"",who,COMMAND);
llOwnerSay("To cause collapse, say '"+COMMAND+"' on channel "+(string)CHANNEL);
llRequestPermissions(llGetOwner(),PERMISSION_CHANGE_LINKS);
}
default {
// usual faffing about
state_entry() {
init();
}
on_rez(integer x) {
llResetScript();
}
changed(integer change) {
if (change & CHANGED_OWNER) llResetScript();
}
// the part that actually does something interesting
listen(integer c,string name,key id,string msg) {
llSetStatus(STATUS_PHYSICS,TRUE);
llSetPrimitiveParams([PRIM_TEMP_ON_REZ,TRUE]);
llBreakAllLinks();
}
// faffing about with permissions
run_time_permissions(integer perms) {
if (!(perms & PERMISSION_CHANGE_LINKS)) {
llOwnerSay("Well, the collapsing stuff isn't going to work, then!");
}
}
}
Aquí teneis algunas capturas de pantalla para entenderlo mejor:
Aquí se ve el experimento final.
Este es el "cuenco gigante".
Bueno, en esta captura se había iniciado el script de explosión y las esferas están rodando por el cuenco.
Y finalmente ésta es el resultado de la colisión de ambas esferas.




No hay comentarios:
Publicar un comentario