OpenSim Crashes when running a small Vehicle Script

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

OpenSim Crashes when running a small Vehicle Script

Thomas Seuring
OpenSim Crashes when running a small Vehicle Script I've wrote a small, very easy Script to drive a Vehicle. But everytime I get and like to drive, OpenSim crashes.

Any ideas?

Thanks

Tom

BELOW: Crash and Code:


The crash is:

Region (root) # Stacktrace:

  at (wrapper managed-to-native) Ode.NET.d.JointSetLMotorAxis (intptr,int,int,single,single,single) <0x00004>
  at (wrapper managed-to-native) Ode.NET.d.JointSetLMotorAxis (intptr,int,int,single,single,single) <0xffffffff>
  at OpenSim.Region.Physics.OdePlugin.ODEVehicleSettings.SetLinearMotorProperties () <0x001e6>
  at OpenSim.Region.Physics.OdePlugin.ODEVehicleSettings.LinearMotor (single) <0x004aa>
  at OpenSim.Region.Physics.OdePlugin.ODEVehicleSettings.Step (single) <0x0009b>
  at OpenSim.Region.Physics.OdePlugin.OdePrim.Move (single) <0x00b20>
  at OpenSim.Region.Physics.OdePlugin.OdeScene.Simulate (single) <0x0155f>
  at OpenSim.Region.Framework.Scenes.SceneGraph.UpdatePhysics (double) <0x0003c>
  at OpenSim.Region.Framework.Scenes.Scene.Update () <0x004d5>
  at OpenSim.Region.Framework.Scenes.Scene.Heartbeat (object) <0x00018>
  at (wrapper runtime-invoke) object.runtime_invoke_void__this___object (object,intptr,intptr,intptr) <0xffffffff>
Abort trap


The Script is:
// set the vehicle parameters
setupVehicle()
{
    llSetStatus(STATUS_PHYSICS, TRUE);
    llSetVehicleType(VEHICLE_TYPE_CAR);
    
    // The vehicle will get up to full speed in 1 second
    llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
    
    // The motor will become ineffective after 3 seconds.
    llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 3.0);
    
    // Turn off angular and linear deflection
    llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.0);
    llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);

    // Set low linear friction, equal in all directions
    llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 5000.0);
    
    // Set very high angular friction, this vehicle does not
    // like to turn
    llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.1);
}

// stop this object from being a vehicle
noVehicle()
{
    // Turn off physics and vehicle params
    llSetVehicleType(VEHICLE_TYPE_NONE);
    llSetStatus(STATUS_PHYSICS, FALSE);
}

// give this prim a wedge shape and set it to about avatar size
setupObject()
{
    llSetPrimitiveParams([
    PRIM_TYPE,
        PRIM_TYPE_BOX,
        PRIM_HOLE_DEFAULT,
        <0.75, 1.0, 0.0>,
        0.0,
        <0.0, 0.0, 0.0>,
        <1.0, 1.0, 0.0>,
        <0.0, 0.0, 0.0>,
    PRIM_SIZE,
        <4.0, 1.5, 0.5>
        ]);
}

// default state, not a vehicle
default
{
    state_entry()
    {
        noVehicle();
        setupObject();
                
        // Set the location avatars will sit
        llSitTarget(<-1.0, 0.0, 0.5>, ZERO_ROTATION);
    }
    
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            if (llAvatarOnSitTarget() != NULL_KEY)
            {
                // someone is sitting on the object; request permission
                // to take controls
                llRequestPermissions(
                    llAvatarOnSitTarget(),
                    PERMISSION_TAKE_CONTROLS);
            }
        }
    }
    
    run_time_permissions(integer perm)
    {
        // the run time permissions have changed; if script can
        // take controls, do that and go to the vehicle state
        if (perm & PERMISSION_TAKE_CONTROLS)
        {
            llTakeControls(
                CONTROL_FWD | CONTROL_BACK |
                CONTROL_LEFT | CONTROL_RIGHT |
                CONTROL_ROT_LEFT |CONTROL_ROT_RIGHT,
                TRUE, FALSE);
            state vehicle;
        }
    }
}

state vehicle
{
    state_entry()
    {
        setupVehicle();
    }
        
    changed(integer change)
    {
        // If the avatar sitting on this object gets up, stop
        // being a vehicle
        if (change & CHANGED_LINK)
        {
            if (llAvatarOnSitTarget() == NULL_KEY)
            {
                // no one is sitting on the object; stop
                // being a vehicle
                llReleaseControls();
                state default;
            }
        }
    }
    
    control(key from, integer level, integer edge)
    {
        integer pressed = (level & edge);
        vector velocity = ZERO_VECTOR;
        float speed = 15.0;
        
        if (pressed & CONTROL_FWD)
        {
            velocity = <1.0, 0.0, 0.0>;
        }
        else if (pressed & CONTROL_BACK)
        {
            velocity = <-1.0, 0.0, 0.0>;
        }
        else if (pressed & CONTROL_LEFT ||
                 pressed & CONTROL_ROT_LEFT)
        {
            velocity = <0.0, 1.0, 0.0>;
        }
        else if (pressed & CONTROL_RIGHT ||
                 pressed & CONTROL_ROT_RIGHT)
        {
            velocity = <0.0, -1.0, 0.0>;
        }
        if (velocity != ZERO_VECTOR)
        {
            velocity = velocity * speed;
            llSetVehicleVectorParam(
                VEHICLE_LINEAR_MOTOR_DIRECTION,
                velocity);
        }
    }
}

_______________________________________________
Opensim-users mailing list
[hidden email]
https://lists.berlios.de/mailman/listinfo/opensim-users
Reply | Threaded
Open this post in threaded view
|

Re: OpenSim Crashes when running a small Vehicle Script

James Stallings II
OpenSim support for vehicles using LSL is in its very early stages, and has not yet been completely implemented.

For information on bleeding edge work with LSL vehicles on OpenSim, see http://osgrid.org/forums/viewtopic.php?f=19&t=1747&sid=d1081fc8fdba4dae622abb8783a97d02

Cheers
James/Hiro


On Mon, Sep 21, 2009 at 5:31 PM, Thomas Seuring <[hidden email]> wrote:
I've wrote a small, very easy Script to drive a Vehicle. But everytime I get and like to drive, OpenSim crashes.

Any ideas?

Thanks

Tom

BELOW: Crash and Code:


The crash is:

Region (root) # Stacktrace:

  at (wrapper managed-to-native) Ode.NET.d.JointSetLMotorAxis (intptr,int,int,single,single,single) <0x00004>
  at (wrapper managed-to-native) Ode.NET.d.JointSetLMotorAxis (intptr,int,int,single,single,single) <0xffffffff>
  at OpenSim.Region.Physics.OdePlugin.ODEVehicleSettings.SetLinearMotorProperties () <0x001e6>
  at OpenSim.Region.Physics.OdePlugin.ODEVehicleSettings.LinearMotor (single) <0x004aa>
  at OpenSim.Region.Physics.OdePlugin.ODEVehicleSettings.Step (single) <0x0009b>
  at OpenSim.Region.Physics.OdePlugin.OdePrim.Move (single) <0x00b20>
  at OpenSim.Region.Physics.OdePlugin.OdeScene.Simulate (single) <0x0155f>
  at OpenSim.Region.Framework.Scenes.SceneGraph.UpdatePhysics (double) <0x0003c>
  at OpenSim.Region.Framework.Scenes.Scene.Update () <0x004d5>
  at OpenSim.Region.Framework.Scenes.Scene.Heartbeat (object) <0x00018>
  at (wrapper runtime-invoke) object.runtime_invoke_void__this___object (object,intptr,intptr,intptr) <0xffffffff>
Abort trap


The Script is:
// set the vehicle parameters
setupVehicle()
{
    llSetStatus(STATUS_PHYSICS, TRUE);
    llSetVehicleType(VEHICLE_TYPE_CAR);
    
    // The vehicle will get up to full speed in 1 second
    llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
    
    // The motor will become ineffective after 3 seconds.
    llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 3.0);
    
    // Turn off angular and linear deflection
    llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.0);
    llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);

    // Set low linear friction, equal in all directions
    llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 5000.0);
    
    // Set very high angular friction, this vehicle does not
    // like to turn
    llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.1);
}

// stop this object from being a vehicle
noVehicle()
{
    // Turn off physics and vehicle params
    llSetVehicleType(VEHICLE_TYPE_NONE);
    llSetStatus(STATUS_PHYSICS, FALSE);
}

// give this prim a wedge shape and set it to about avatar size
setupObject()
{
    llSetPrimitiveParams([
    PRIM_TYPE,
        PRIM_TYPE_BOX,
        PRIM_HOLE_DEFAULT,
        <0.75, 1.0, 0.0>,
        0.0,
        <0.0, 0.0, 0.0>,
        <1.0, 1.0, 0.0>,
        <0.0, 0.0, 0.0>,
    PRIM_SIZE,
        <4.0, 1.5, 0.5>
        ]);
}

// default state, not a vehicle
default
{
    state_entry()
    {
        noVehicle();
        setupObject();
                
        // Set the location avatars will sit
        llSitTarget(<-1.0, 0.0, 0.5>, ZERO_ROTATION);
    }
    
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            if (llAvatarOnSitTarget() != NULL_KEY)
            {
                // someone is sitting on the object; request permission
                // to take controls
                llRequestPermissions(
                    llAvatarOnSitTarget(),
                    PERMISSION_TAKE_CONTROLS);
            }
        }
    }
    
    run_time_permissions(integer perm)
    {
        // the run time permissions have changed; if script can
        // take controls, do that and go to the vehicle state
        if (perm & PERMISSION_TAKE_CONTROLS)
        {
            llTakeControls(
                CONTROL_FWD | CONTROL_BACK |
                CONTROL_LEFT | CONTROL_RIGHT |
                CONTROL_ROT_LEFT |CONTROL_ROT_RIGHT,
                TRUE, FALSE);
            state vehicle;
        }
    }
}

state vehicle
{
    state_entry()
    {
        setupVehicle();
    }
        
    changed(integer change)
    {
        // If the avatar sitting on this object gets up, stop
        // being a vehicle
        if (change & CHANGED_LINK)
        {
            if (llAvatarOnSitTarget() == NULL_KEY)
            {
                // no one is sitting on the object; stop
                // being a vehicle
                llReleaseControls();
                state default;
            }
        }
    }
    
    control(key from, integer level, integer edge)
    {
        integer pressed = (level & edge);
        vector velocity = ZERO_VECTOR;
        float speed = 15.0;
        
        if (pressed & CONTROL_FWD)
        {
            velocity = <1.0, 0.0, 0.0>;
        }
        else if (pressed & CONTROL_BACK)
        {
            velocity = <-1.0, 0.0, 0.0>;
        }
        else if (pressed & CONTROL_LEFT ||
                 pressed & CONTROL_ROT_LEFT)
        {
            velocity = <0.0, 1.0, 0.0>;
        }
        else if (pressed & CONTROL_RIGHT ||
                 pressed & CONTROL_ROT_RIGHT)
        {
            velocity = <0.0, -1.0, 0.0>;
        }
        if (velocity != ZERO_VECTOR)
        {
            velocity = velocity * speed;
            llSetVehicleVectorParam(
                VEHICLE_LINEAR_MOTOR_DIRECTION,
                velocity);
        }
    }
}

_______________________________________________
Opensim-users mailing list
[hidden email]
https://lists.berlios.de/mailman/listinfo/opensim-users




--
===================================
http://osgrid.org
http://del.icio.us/SPQR
http://twitter.com/jstallings2
http://www.linkedin.com/pub/5/770/a49

_______________________________________________
Opensim-users mailing list
[hidden email]
https://lists.berlios.de/mailman/listinfo/opensim-users