Hey! I vote we need a NCI Cruise Ship! Sadly, I have no idea if its possible, but I bet there is some way we can build a awesome vehicle that LL can let us sail around the ocean SIMS and have fun. Obviously it shouldn't really be for classes or sandbox use, but who knows? Many things that a Cruise Ship can be might also pose other ideas on new classes that can facilitate a moving vehicle. I was thinking along the lines more of a hangout for those who want something else than a building and land around. Maybe we can look at a water based campus with a small fleet of vehicles going wherever Linden Labs lets us!
Anyways... Most people know I am a Brain-stormer that thinks aloud when ears are around. I hope this made sense enough to catch wind!
Alaska
We need a NCI Cruise Ship! Open Water SIMS here we come!
-
- Posts: 199
- Joined: Sat Sep 05, 2009 10:56 pm
- Location: Anchorage, Alaska
-
- Posts: 74
- Joined: Wed Sep 02, 2009 11:48 pm
- Location: Location
- Contact:
Re: We need a NCI Cruise Ship! Open Water SIMS here we come!
Great idea! It may not be possible at all, but it's a great idea.
-
- Posts: 113
- Joined: Sun Aug 30, 2009 9:13 pm
- Contact:
Re: We need a NCI Cruise Ship! Open Water SIMS here we come!
Instead of a cruise ship how about a floating platform complete with balloons? I have a script that can be adapted that will create a master object and then have the slave objects follow it and maintain the same relevant orientation. the idea would be that a really big platform made up of several objects could slowly float around the ocean sims kind of like the restaurant at the end of the universe....
-
- Posts: 30
- Joined: Mon Aug 31, 2009 1:50 pm
- Location: Clarksville IN USA
Re: We need a NCI Cruise Ship! Open Water SIMS here we come!
Grandma, you know if the script can adapt to heavy lag, and lag spikes?
Sounds interesting ^-^
Sounds interesting ^-^
SL Land Specialist
Click me for my blog ( non SL related )
Click me for my blog ( non SL related )
-
- Posts: 113
- Joined: Sun Aug 30, 2009 9:13 pm
- Contact:
Re: We need a NCI Cruise Ship! Open Water SIMS here we come!
Hello Mr Oud!
The script that I have is for a very simple demo. You have two prims. When you change the master prim the other prim automatically readjusts itself to keep the same orientation. It uses a timer to know when to update. It does not use a sensor to minimize lag.
It does not do anything fancy in the way it moves so it is jumpy. It is just the very basic set up, and I have not tried to figure out how to deal with lag or make it move smoothly. For those kind of issues you would have to look at how they deal with those big yachts.
Here is the master script. Note there is no security built in yet. All it does is identify itself to the slave script.
Here is the slave script. Once it finds the master it sets a timer and continually updates itself. Again, no security no fancy movement. Just the basics.
[Edit: I did the code as a quick demo. Now that I look at it, I suspect that (myOriginalRot/originalRot)*newRot can be changed to originalRot*newRot which would be a little more streamlined. ]
[Edit II & III : This edit has been removed. I put something in here that was incorrect.... ]
The script that I have is for a very simple demo. You have two prims. When you change the master prim the other prim automatically readjusts itself to keep the same orientation. It uses a timer to know when to update. It does not use a sensor to minimize lag.
It does not do anything fancy in the way it moves so it is jumpy. It is just the very basic set up, and I have not tried to figure out how to deal with lag or make it move smoothly. For those kind of issues you would have to look at how they deal with those big yachts.
Here is the master script. Note there is no security built in yet. All it does is identify itself to the slave script.
Code: Select all
integer theChannel = -38881881;
integer theControl;
vector originalPos;
rotation originalRot;
default
{
state_entry()
{
theControl = llListen(theChannel,"",NULL_KEY,"");
llSetText("Master",<1.0,1.0,1.0>,1.0);
originalPos = llGetPos();
originalRot = llGetRot();
}
listen(integer channel,string name,key id,string message) {
if(llGetOwner() != llGetOwnerKey(id)) {
return;
}
if(message == "ping") {
llShout(channel,"home");
originalPos = llGetPos();
originalRot = llGetRot();
}
else if (message == "reset") {
llSetPrimitiveParams([PRIM_POSITION,originalPos,
PRIM_ROTATION,originalRot]);
}
}
}
Code: Select all
integer theChannel = -38881881;
integer theControl;
key home;
rotation originalRot;
vector originalPos;
rotation myOriginalRot;
vector myOriginalPos;
integer follow = FALSE;
default
{
state_entry()
{
theControl = llListen(theChannel,"",NULL_KEY,"");
llSetText("Slave\nTouch me to have me readjust myself",<1.0,1.0,1.0>,1.0);
}
touch_start(integer total_number)
{
if(llGetOwner()==llDetectedKey(0)) {
follow = !follow;
if(follow) {
llShout(theChannel,"ping");
} else {
llShout(theChannel,"reset");
llSetPrimitiveParams([PRIM_POSITION,myOriginalPos,
PRIM_ROTATION,myOriginalRot]);
llSetTimerEvent(0.0);
llSay(0,"Not following anymore");
llSetText("Slave\nTouch me to have me readjust myself",<1.0,1.0,1.0>,1.0);
}
}
}
listen(integer channel,string name,key id,string message) {
list info;
if(llGetOwner() != llGetOwnerKey(id)) {
return;
}
if(message == "home") {
home = id;
llSay(0,"My home: " + llKey2Name(home));
llSetTimerEvent(1.0);
llSetText("Slave\nChange the master and I will change",<1.0,1.0,1.0>,1.0);
info = llGetObjectDetails(home,[OBJECT_POS,OBJECT_ROT]);
originalRot = llList2Rot(info,1);
originalPos = llList2Vector(info,0);
myOriginalRot = llGetRot();
myOriginalPos = llGetPos();
}
}
// offSet*originalRot=myOriginalRot;
// originalRot*newDiff=newRot;
// => offSet*newRot = (myOriginalRot/originalRot)*newRot
// => newDiff = (ZERO_ROTATION/originalRot)*newRot
timer() {
list info = llGetObjectDetails(home,[OBJECT_POS,OBJECT_ROT]);
vector newPos = llList2Vector(info,0);
rotation newRot = llList2Rot(info,1);
rotation newDiff;
newDiff = (ZERO_ROTATION/originalRot)*newRot;
llSetPrimitiveParams([PRIM_POSITION,
newPos+(myOriginalPos-originalPos)*newDiff,
PRIM_ROTATION,
(myOriginalRot/originalRot)*newRot]);
}
}
[Edit: I did the code as a quick demo. Now that I look at it, I suspect that (myOriginalRot/originalRot)*newRot can be changed to originalRot*newRot which would be a little more streamlined. ]
[Edit II & III : This edit has been removed. I put something in here that was incorrect.... ]