We need a NCI Cruise Ship! Open Water SIMS here we come!

A place to provide all of NCI and NCI leadership with questions, suggestions, comments, or any other kind of feedback.
Post Reply
Alaska Udimo
Posts: 199
Joined: Sat Sep 05, 2009 10:56 pm
Location: Anchorage, Alaska

We need a NCI Cruise Ship! Open Water SIMS here we come!

Post by Alaska Udimo » Thu Nov 05, 2009 6:40 pm

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

Jaco Schaffner
Posts: 73
Joined: Wed Sep 02, 2009 11:48 pm
Location: Location
Contact:

Re: We need a NCI Cruise Ship! Open Water SIMS here we come!

Post by Jaco Schaffner » Fri Nov 06, 2009 10:37 am

Great idea! It may not be possible at all, but it's a great idea.

Grandma Bates
Posts: 113
Joined: Sun Aug 30, 2009 9:13 pm
Contact:

Re: We need a NCI Cruise Ship! Open Water SIMS here we come!

Post by Grandma Bates » Mon Nov 09, 2009 2:20 pm

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....

SHIPPOU OUD
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!

Post by SHIPPOU OUD » Thu Nov 19, 2009 8:25 am

Grandma, you know if the script can adapt to heavy lag, and lag spikes?

Sounds interesting ^-^
SL Land Specialist
Click me for my blog ( non SL related )

Grandma Bates
Posts: 113
Joined: Sun Aug 30, 2009 9:13 pm
Contact:

Re: We need a NCI Cruise Ship! Open Water SIMS here we come!

Post by Grandma Bates » Thu Nov 19, 2009 10:26 am

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.

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]);
        }
        
    }
    
}
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.

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.... ]

Post Reply