Page 1 of 1

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

Posted: Thu Nov 05, 2009 6:40 pm
by Alaska Udimo
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

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

Posted: Fri Nov 06, 2009 10:37 am
by Jaco Schaffner
Great idea! It may not be possible at all, but it's a great idea.

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

Posted: Mon Nov 09, 2009 2:20 pm
by Grandma Bates
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....

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

Posted: Thu Nov 19, 2009 8:25 am
by SHIPPOU OUD
Grandma, you know if the script can adapt to heavy lag, and lag spikes?

Sounds interesting ^-^

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

Posted: Thu Nov 19, 2009 10:26 am
by Grandma Bates
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.... ]