home *** CD-ROM | disk | FTP | other *** search
/ Late Night VRML 2.0 with Java CD-ROM / code.zip / Ch11 / submarine / Submarine.wrl < prev   
Text File  |  1997-03-30  |  5KB  |  237 lines

  1. #VRML V2.0 utf8
  2.  
  3. WorldInfo {
  4.   info    [ "Created in CosmoWorlds",
  5.         "Packaged by CosmoPackage" ]
  6. }
  7. Background {
  8.   skyColor    0.04 0.04 0.47
  9. }
  10. DEF VIEW1 Viewpoint {
  11.   position    0 10 30
  12.   orientation    0 0 1  0.6
  13.   description    "Main View"
  14. }
  15. Fog {
  16.   color    0.04 0.04 0.47
  17.   fogType    "EXPONENTIAL"
  18.   visibilityRange    80
  19. }
  20. DEF BG_Sound Sound {
  21.   source    AudioClip {
  22.     url    "ambientsea.wav"
  23.     loop    TRUE
  24.     startTime    1
  25.   }
  26.  
  27.   minFront    20
  28.   maxFront    600
  29.   minBack    20
  30.   maxBack    600
  31. }
  32. DEF ROV Group {
  33.   children    DEF ROV_MODEL Transform {
  34.     children    Transform {
  35.       children    [
  36.     Inline {
  37.       url    "sub.wrl"
  38.     }
  39.     DEF SOUND_ROTATE Sound {
  40.       source    DEF AUDIO_ROTATE AudioClip {
  41.         url    "rovmove.wav"
  42.         loop    FALSE
  43.         startTime    0
  44.       }
  45.  
  46.       intensity    3
  47.       location    0.5 0 0
  48.       minFront    3
  49.       maxFront    50
  50.       minBack    3
  51.       maxBack    50
  52.     }
  53.     DEF SOUND_MOVE Sound {
  54.       source    DEF AUDIO_MOVE AudioClip {
  55.         url    "rovspeed2.wav"
  56.         loop    FALSE
  57.         startTime    0
  58.       }
  59.  
  60.       minFront    3
  61.       maxFront    50
  62.       minBack    3
  63.       maxBack    50
  64.     }
  65.       ]
  66.       translation    0 1 0
  67.       rotation    0 1 0  1
  68.     }
  69.  
  70.     translation    0 0 0
  71.     rotation    0 0 1  0
  72.   }
  73.  
  74. }
  75. DEF MAIN_CLOCK TimeSensor {
  76.   cycleInterval    10
  77.   loop    TRUE
  78. }
  79. DEF ROT_CLOCK TimeSensor {
  80.   cycleInterval    8
  81.   loop    FALSE
  82.   startTime    0
  83. }
  84. DEF MOVE_CLOCK TimeSensor {
  85.   cycleInterval    8
  86.   loop    FALSE
  87.   startTime    0
  88. }
  89. DEF ROTATE_ROV OrientationInterpolator {
  90.   key    [ 0, 1 ]
  91.   keyValue    [ 0 0 1  0,
  92.         0 -1 0  1.57 ]
  93. }
  94. DEF POSITION_ROV PositionInterpolator {
  95.   key    [ 0, 1 ]
  96.   keyValue    [ 0 1 0,
  97.         -15 1 -15 ]
  98. }
  99. DEF MOVE Script {
  100.   eventOut  SFRotation  rotation
  101.   eventOut  SFVec3f  position
  102.   eventOut  SFTime  rotateTrigger
  103.   eventOut  SFTime  moveTrigger
  104.   eventIn  SFFloat  set_fraction
  105.   eventIn  SFTime  set_cycle
  106.   eventIn  SFVec3f  set_movement
  107.   eventIn  SFRotation  set_subRotation
  108.   field  SFInt32  phase    0
  109.   field  SFBool  flip    FALSE
  110.   url    "vrmlscript:
  111.  
  112. function set_cycle(cycle, eventTime){
  113.    phase = phase + 1;
  114.    if(phase == 9) phase = 1;
  115. }
  116.  
  117.  
  118. function set_subRotation(subRotation, eventTime) {
  119.    rotation[0] = 0.0;
  120.    rotation[1] = 1.0;
  121.    rotation[2] = 0.0;
  122.  
  123.    if(phase == 1) {
  124.       rotation[3] = -subRotation[3];
  125.    }
  126.    
  127.    else if(phase == 3) {
  128.       rotation[3] = -1.57 + - subRotation[3];
  129.    }
  130.    
  131.    else if(phase == 5) {
  132.      rotation[3] = -2 * 1.57 - subRotation[3];
  133.    }
  134.    
  135.    else if(phase == 7) {
  136.       rotation[3] = -3 *1.57 - subRotation[3];
  137.    }
  138. }
  139.  
  140.  
  141. function set_movement(movement, eventTime){
  142.    if(phase == 2) {
  143.       position[0] = movement[0];
  144.       position[1] = movement[1];
  145.       position[2] = 15.0 + movement[2];
  146.    }
  147.  
  148.    else if(phase == 4) {
  149.       position[0]  = -15.0 -movement[0];
  150.       position[1]  = movement[1];
  151.       position[2]  = movement[2];   
  152.    }
  153.    else if(phase == 6) {
  154.       position[0]  = -movement[0];
  155.       position[1]  = movement[1];
  156.       position[2]  = -15.0 -movement[2];   
  157.    }
  158.    else if(phase == 8) {
  159.       position[0]  = 15.0 +movement[0];
  160.       position[1]  = movement[1];
  161.       position[2]  = -movement[2];   
  162.    }
  163. }
  164.  
  165.  
  166. function set_fraction(fraction, eventTime){
  167. // Based on the phase, move and rotate differently, by starting and stopping
  168. // the rotation driven clock.
  169.    if(phase == 1) { // First phase, rotate.
  170.       if(!flip) {
  171.          rotateTrigger = eventTime;
  172.          flip = TRUE;
  173.       }
  174.    }
  175.    else if(phase == 2) { // Phase two, move in to the left.
  176.     if(flip){
  177.        moveTrigger = eventTime;
  178.        flip = FALSE;
  179.         }
  180.    }
  181.    else if(phase == 3) { // Phase three, rotate again.
  182.         if(!flip){
  183.            rotateTrigger = eventTime;
  184.            flip = TRUE;
  185.         }
  186.    }
  187.  
  188.    else if(phase == 4) { // Phase four, move inwards, to the middle
  189.         if(flip){
  190.            moveTrigger = eventTime;
  191.            flip = FALSE;
  192.         }
  193.    }
  194.  
  195.    else if(phase == 5) { // Phase five, rotate again.
  196.         if(!flip){
  197.             rotateTrigger = eventTime;
  198.             flip = TRUE;
  199.         }
  200.    }
  201.  
  202.    else if(phase == 6) { // Phase six, move towards, to the right.
  203.         if(flip){
  204.             moveTrigger = eventTime;
  205.             flip = FALSE;
  206.         }
  207.     }
  208.      
  209.    else if(phase == 7) { // Phase seven, rotate again.
  210.         if(!flip){
  211.             rotateTrigger = eventTime;
  212.              flip = TRUE;
  213.         }
  214.    }
  215.    
  216.    else if(phase == 8) { // Phase eight, move towards, to the middle.
  217.         if(flip){
  218.             moveTrigger = eventTime; 
  219.             flip = FALSE;
  220.         }
  221.    }   
  222.  
  223. }"
  224. }
  225. ROUTE MOVE.rotateTrigger TO AUDIO_ROTATE.set_startTime
  226. ROUTE MOVE.moveTrigger TO AUDIO_MOVE.set_startTime
  227. ROUTE MOVE.position TO ROV_MODEL.set_translation
  228. ROUTE MOVE.rotation TO ROV_MODEL.set_rotation
  229. ROUTE MOVE.rotateTrigger TO ROT_CLOCK.set_startTime
  230. ROUTE MOVE.moveTrigger TO MOVE_CLOCK.set_startTime
  231. ROUTE ROT_CLOCK.fraction_changed TO ROTATE_ROV.set_fraction
  232. ROUTE MOVE_CLOCK.fraction_changed TO POSITION_ROV.set_fraction
  233. ROUTE MAIN_CLOCK.fraction_changed TO MOVE.set_fraction
  234. ROUTE MAIN_CLOCK.cycleTime TO MOVE.set_cycle
  235. ROUTE POSITION_ROV.value_changed TO MOVE.set_movement
  236. ROUTE ROTATE_ROV.value_changed TO MOVE.set_subRotation
  237.