Here's an easy way to make a basic light switch:
The switch is made of 3 parts/prims: The rotor, switch and light source.
The script for the rotor is as follows:
myon_state()
{
rotation rot = llGetRot();
vector vrot = llRot2Euler(rot);
vrot+=<-30*DEG_TO_RAD,0,0>;
rot=llEuler2Rot(vrot);
llSetRot(rot);
}
myoff_state()
{
rotation rot = llGetRot();
vector vrot = llRot2Euler(rot);
vrot+=<30*DEG_TO_RAD,0,0>;
rot=llEuler2Rot(vrot);
llSetRot(rot);
}
default
{
state_entry()
{
myoff_state();
}
link_message(integer sender_num, integer num, string str, key id)
{
if(str=="stop")
{
myoff_state();
}
if(str=="start")
{
myon_state();
}
}
}
The script for the switch is as follows:
integer myswitch;
default
{
state_entry()
{
myswitch=FALSE;
llSetText("Light Switch", <1.0, 1.0, 1.0>, 1.0);
}
touch_start(integer total_number)
{
if(myswitch==FALSE)
{
//Turn Light Bulb ON
llMessageLinked(LINK_ALL_CHILDREN, 0, "start", NULL_KEY);
myswitch=TRUE;
}
else
{
//Turn Light Bulb Off
llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY);
myswitch=FALSE;
}
}
}
And finally, the script for the light source is as follows:
default
{
state_entry()
{
llSetPrimitiveParams([PRIM_FULLBRIGHT,ALL_SIDES,FALSE]);
}
link_message(integer sender_num, integer num, string str, key id)
{
if(str=="stop")
{
llSetPrimitiveParams([PRIM_FULLBRIGHT,ALL_SIDES,FALSE]);
}
if(str=="start")
{
llSetPrimitiveParams([PRIM_FULLBRIGHT,ALL_SIDES,TRUE]);
}
}
}
One you have made these 3 prims and scripted the above, simply link them together into one prim (this can be done by holding down shift or alt and selecting the 3 prims) Once selected, press CTRL-L in order to fuse them into one prim and voila! A lightswitch.
No comments:
Post a Comment