Files
LSL-Scripts/JacuzziTub/JacuzziTub-v1.0.lsl
Fred Beckhusen 169fb179da unpacked files
2023-02-14 12:08:06 -06:00

204 lines
7.3 KiB
Plaintext

// Jacuzzi Engine v1.0 by Tech Guy
// Configuration
// Menus
list MainMenu = ["Fill", "Empty", "Steam On", "Steam Off", "Jets On", "Jets Off", "Exit"]; // Main Menu Options
// Variables
integer ListenChannel; // Listen Channel Variable Initializer
integer ListenHandle; // Listen Handle
// Constants
string EMPTY = "";
vector FullSizeWater = <2.11000, 3.06800, 1.2>;
vector NoWater = <2.11000, 3.06800, 0.00073>;
float NumWaterLevels = 30;
list JetLink = [14, 15, 16, 11, 12, 13];
list JetTarget = ["9fdd5d24-7801-4f16-8c85-c9a7d8fff952", "8259c797-bd86-4157-b65d-a68781626864", "b67326c0-d279-4af5-b692-670532c130fe", "f553d16c-26e1-48dd-a553-205bb7d71296", "f8220e96-bbf7-4df2-9588-c8b374c6af9e", "203df0d7-8910-436f-a46a-0a50b854e3ae"];
// System States
integer JetState = FALSE;
integer WaterState = FALSE;
integer SteamState = FALSE;
// Functions
Water(integer ISON){
float StepSize = (FullSizeWater.z - NoWater.z) / NumWaterLevels; // Size to Change prim each Step
integer i;
if(ISON){
llSetLinkTextureAnim(2, TRUE | LOOP, ALL_SIDES, 8, 8, 0.0, 64.0, 24.5 );
llSetLinkAlpha(2, 1.0, ALL_SIDES);
for(i=0;i<=NumWaterLevels;i++){
vector Size = llList2Vector(llGetLinkPrimitiveParams(2, [PRIM_SIZE]), 0);
Size.z = Size.z + StepSize;
llSetLinkPrimitiveParams(2, [PRIM_SIZE, Size]);
}
SteamState = TRUE;
Steam(TRUE);
}else{
Steam(FALSE);
Jets(FALSE);
for(i=0;i<=NumWaterLevels;i++){
vector Size = llList2Vector(llGetLinkPrimitiveParams(2, [PRIM_SIZE]), 0);
Size.z = Size.z - StepSize;
llSetLinkPrimitiveParams(2, [PRIM_SIZE, Size]);
}
llSetLinkAlpha(2, 0.0, ALL_SIDES);
llSetLinkTextureAnim(2, FALSE | LOOP, ALL_SIDES, 8, 8, 0.0, 64.0, 24.5 );
}
}
Steam(integer ISON){
if(ISON){
llLinkParticleSystem(2, [
PSYS_PART_FLAGS,( 0
|PSYS_PART_INTERP_COLOR_MASK
|PSYS_PART_INTERP_SCALE_MASK ),
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE ,
PSYS_PART_START_ALPHA,0.501961,
PSYS_PART_END_ALPHA,0.0117647,
PSYS_PART_START_COLOR,<1,1,1> ,
PSYS_PART_END_COLOR,<1,1,1> ,
PSYS_PART_START_SCALE,<3,3,0>,
PSYS_PART_END_SCALE,<0.1875,0.1875,0>,
PSYS_PART_MAX_AGE,2.14844,
PSYS_SRC_MAX_AGE,0,
PSYS_SRC_ACCEL,<0,0,-0.203125>,
PSYS_SRC_BURST_PART_COUNT,2,
PSYS_SRC_BURST_RADIUS,0.199219,
PSYS_SRC_BURST_RATE,0.046875,
PSYS_SRC_BURST_SPEED_MIN,0.796875,
PSYS_SRC_BURST_SPEED_MAX,1,
PSYS_SRC_ANGLE_BEGIN,0,
PSYS_SRC_ANGLE_END,1.46875,
PSYS_SRC_OMEGA,<0,0,0>,
PSYS_SRC_TEXTURE, (key)"26321045-e218-49c8-9387-e7801c890e27",
PSYS_SRC_TARGET_KEY, (key)"00000000-0000-0000-0000-000000000000"
]);
}else{
llLinkParticleSystem(2, []);
}
}
Jets(integer ISON){
integer i;
if(ISON){
for(i=0;i<=2;i++){
llLinkParticleSystem(llList2Integer(JetLink, i), [
PSYS_PART_FLAGS,( 0
|PSYS_PART_INTERP_COLOR_MASK
|PSYS_PART_INTERP_SCALE_MASK
|PSYS_PART_FOLLOW_SRC_MASK
|PSYS_PART_FOLLOW_VELOCITY_MASK
|PSYS_PART_TARGET_POS_MASK ),
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE_CONE ,
PSYS_PART_START_ALPHA,1,
PSYS_PART_END_ALPHA,0,
PSYS_PART_START_COLOR,<0.501961,0.501961,1> ,
PSYS_PART_END_COLOR,<1,1,1> ,
PSYS_PART_START_SCALE,<0,0,0>,
PSYS_PART_END_SCALE,<0.28125,0.28125,0>,
PSYS_PART_MAX_AGE,3,
PSYS_SRC_MAX_AGE,0,
PSYS_SRC_ACCEL,<0,0,0.046875>,
PSYS_SRC_BURST_PART_COUNT,8,
PSYS_SRC_BURST_RADIUS,0,
PSYS_SRC_BURST_RATE,0.0585938,
PSYS_SRC_BURST_SPEED_MIN,0.5,
PSYS_SRC_BURST_SPEED_MAX,1,
PSYS_SRC_ANGLE_BEGIN,2.09375,
PSYS_SRC_ANGLE_END,0.4375,
PSYS_SRC_OMEGA,<8,1.59375,1>,
PSYS_SRC_TEXTURE, (key)"1c79c1db-7cc0-421f-a363-499725617068",
PSYS_SRC_TARGET_KEY, llList2Key(JetTarget, i)
]);
}
for(i=3;i<=5;i++){
llLinkParticleSystem(llList2Integer(JetLink, i), [
PSYS_PART_FLAGS,( 0
|PSYS_PART_INTERP_COLOR_MASK
|PSYS_PART_INTERP_SCALE_MASK
|PSYS_PART_FOLLOW_SRC_MASK
|PSYS_PART_FOLLOW_VELOCITY_MASK
|PSYS_PART_TARGET_POS_MASK ),
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE_CONE ,
PSYS_PART_START_ALPHA,1,
PSYS_PART_END_ALPHA,0,
PSYS_PART_START_COLOR,<0.501961,0.501961,1> ,
PSYS_PART_END_COLOR,<1,1,1> ,
PSYS_PART_START_SCALE,<0,0,0>,
PSYS_PART_END_SCALE,<0.28125,0.28125,0>,
PSYS_PART_MAX_AGE,3,
PSYS_SRC_MAX_AGE,0,
PSYS_SRC_ACCEL,<0,0,0.046875>,
PSYS_SRC_BURST_PART_COUNT,8,
PSYS_SRC_BURST_RADIUS,0,
PSYS_SRC_BURST_RATE,0.0585938,
PSYS_SRC_BURST_SPEED_MIN,0.5,
PSYS_SRC_BURST_SPEED_MAX,1,
PSYS_SRC_ANGLE_BEGIN,2.09375,
PSYS_SRC_ANGLE_END,0.4375,
PSYS_SRC_OMEGA,<8,1.59375,1>,
PSYS_SRC_TEXTURE, (key)"1c79c1db-7cc0-421f-a363-499725617068",
PSYS_SRC_TARGET_KEY, llList2Key(JetTarget, i)
]);
}
}else{
for(i=0;i<=2;i++){
llLinkParticleSystem(llList2Integer(JetLink, i), []);
}
for(i=3;i<=5;i++){
llLinkParticleSystem(llList2Integer(JetLink, i), []);
}
}
}
default{
state_entry(){
llListenRemove(ListenHandle);
ListenChannel = (integer)(llFrand(-1000000000.0) - 1000000000.0);
}
touch(integer num){
key id = llDetectedKey(0);
llSetTimerEvent(30.0);
ListenHandle = llListen(ListenChannel, EMPTY, EMPTY, EMPTY);
llDialog(id, "Please select option...", MainMenu, ListenChannel);
}
listen(integer channel, string num, key id, string msg){
llSetTimerEvent(30.0);
if(msg=="Fill"){
WaterState = TRUE;
Water(TRUE);
}else if(msg=="Empty"){
WaterState = FALSE;
Water(FALSE);
}else if(msg=="Steam On"){
if(!WaterState){
llSay(0, "You must have water in the tub to turn the Steam On.");
return;
}
Steam(TRUE);
}else if(msg=="Steam Off"){
Steam(FALSE);
}else if(msg=="Jets On"){
if(!WaterState){
llSay(0, "You must have water in the tub to turn the Jets On.");
return;
}
Jets(TRUE);
}else if(msg=="Jets Off"){
Jets(FALSE);
}else{
llSetTimerEvent(0);
llListenRemove(ListenHandle);
}
}
timer(){
llSetTimerEvent(0);
llListenRemove(ListenHandle);
}
}