/AuroraDocs/Vehicles/Boat.lsl

https://bitbucket.org/VirtualReality/software-testing · Unknown · 133 lines · 110 code · 23 blank · 0 comment · 0 complexity · e8e10d671ce5958b27e523d0eb399411 MD5 · raw file

  1. //Simple boat that works with the new SLFeeling Physics Engine (mod from encog)
  2. float forward_power = 25;
  3. float reverse_power = -15;
  4. float turning_ratio = 5.0;
  5. string sit_message = "Ride";
  6. string not_owner_message = "You are not the owner of this vehicle ...";
  7. default
  8. {
  9. state_entry()
  10. {
  11. llSetSitText(sit_message);
  12. llSitTarget(<0.2,0,0.45>, ZERO_ROTATION );
  13. llSetCameraEyeOffset(<-12, 0.0, 5.0>);
  14. llSetCameraAtOffset(<1.0, 0.0, 2.0>);
  15. llSetVehicleFlags(0);
  16. llSetVehicleType(VEHICLE_TYPE_BOAT);
  17. llSetVehicleFlags(VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_HOVER_WATER_ONLY);
  18. llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 1, 1> );
  19. llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 2 );
  20. llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0>);
  21. llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1);
  22. llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.05);
  23. llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1 );
  24. llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 1 );
  25. llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0.5);
  26. llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY,1 );
  27. llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 2.0 );
  28. llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 );
  29. llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5 );
  30. llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 3 );
  31. llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.5 );
  32. llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 );
  33. llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 4 );
  34. llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5 );
  35. llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0.9 );
  36. llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 1 );
  37. llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 7 );
  38. llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, ZERO_ROTATION );
  39. }
  40. changed(integer change)
  41. {
  42. if (change & CHANGED_LINK)
  43. {
  44. key agent = llAvatarOnSitTarget();
  45. if (agent)
  46. {
  47. if (agent != llGetOwner())
  48. {
  49. llSay(0, not_owner_message);
  50. llUnSit(agent);
  51. llPushObject(agent, <0,0,50>, ZERO_VECTOR, FALSE);
  52. }
  53. else
  54. {
  55. llMessageLinked(LINK_ALL_CHILDREN , 0, "start", NULL_KEY);
  56. llSleep(.4);
  57. llSetStatus(STATUS_PHYSICS, TRUE);
  58. llSleep(.1);
  59. llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
  60. }
  61. }
  62. else
  63. {
  64. llSetStatus(STATUS_PHYSICS, FALSE);
  65. llSleep(.1);
  66. llMessageLinked(LINK_ALL_CHILDREN , 0, "stop", NULL_KEY);
  67. llSleep(.4);
  68. llReleaseControls();
  69. llTargetOmega(<0,0,0>,PI,0);
  70. llResetScript();
  71. }
  72. }
  73. }
  74. run_time_permissions(integer perm)
  75. {
  76. if (perm)
  77. {
  78. llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT |
  79. CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
  80. }
  81. }
  82. control(key id, integer level, integer edge)
  83. {
  84. integer reverse=1;
  85. vector angular_motor;
  86. vector vel = llGetVel();
  87. float speed = llVecMag(vel);
  88. if(level & CONTROL_FWD)
  89. {
  90. llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <forward_power,0,0>);
  91. reverse=1;
  92. }
  93. if(level & CONTROL_BACK)
  94. {
  95. llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <reverse_power,0,0>);
  96. reverse = -1;
  97. }
  98. if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
  99. {
  100. angular_motor.z -= speed / turning_ratio * reverse;
  101. angular_motor.x += 20;
  102. }
  103. if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
  104. {
  105. angular_motor.z += speed / turning_ratio * reverse;
  106. angular_motor.x -= 20;
  107. }
  108. llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);
  109. }
  110. }