VRML and XML

len bullard (cbullard@hiwaay.net)
Wed, 14 Jan 1998 21:18:22 -0600


W. Eliot Kimber wrote:

> I think that could be pretty useful, especially once VRML browsers let
> you associate presentation styles with element types. After all,
> rendering 3-D objects is not fundamentally different in the abstract
> from rendering 2-D objects, it's still a matter of apply presentation
> style. So why shouldn't XSL be just as useful for VRML worlds as for
> 2-D documents?

While it is possible to write a declarative architecture
for the static nodes (eg VRML 1.0), it is a very
different beast from a real time simulation
language. As to associating XSL, how useful is
it to associate a style language with a presentation
language that already includes all of the presentation
information required.

VRML 2.0 is a real time simulation language. The
event model is very interesting. It includes
events, exposed fields, addChildren, etc. as
part of the language. The test is to see if
XML, DOM, DHTML adds anything useful.

If others from the XML community are interested
in this project, it will be conducted on an open list.

Here is a simple VRML 2.0 file so you can discover what
it looks like. Be aware that a VRML instance has
a lot of assumed parts for information that the
browser must explicitly support but which are not
in the instance itself (eg, addChildren). VRML 2.0
was designed for a very efficient syntax.

len

#VRML V2.0 utf8

WorldInfo {

title "Opening Animation"

info [

]

}

DEF FirstNav NavigationInfo {

type ["NONE" ]

headlight FALSE

}

Background{

skyColor 0 0 0

frontUrl["../galaxy/stars.jpg"]

backUrl ["../galaxy/stars.jpg"]

rightUrl ["../galaxy/stars.jpg"]

leftUrl ["../galaxy/stars.jpg"]

topUrl ["../galaxy/stars.jpg"]

bottomUrl ["../galaxy/stars.jpg"]

}

DEF ZoomView Transform {

translation 0 0 500

rotation 0 0 1 0

children [

DEF StartView Viewpoint{

position 0 0 0

orientation 0 0 1 0

fieldOfView 0.7

description "Travelling"

jump TRUE

}

]

}

DEF Title Transform {

translation 0 0 130 #0 0 140

scale 1 1 1

children [

# DEF TitleTouch TouchSensor {}

Shape{

appearance Appearance{

material Material{ }

texture ImageTexture{

url [

"textures/title_1.gif"]

repeatS FALSE

repeatT FALSE

}

textureTransform TextureTransform {

translation 0.01 0.01

scale 0.97 0.97

}

}

geometry IndexedFaceSet{

coord Coordinate{

point[ -250 -118 -40,

0 -118 -40,

0 125 -40,

-250 125 -40]

} #end coord

coordIndex[ 0, 1, 2, 3]

texCoord TextureCoordinate {

point [ -0.01 -0.01, 1.01 -0.01,

1.01 1.01, -0.01 1.01 ]

}

texCoordIndex [ 0, 1, 2, 3]

} #end geometry

}, #end shape

Shape{

appearance Appearance{

material Material { }

texture ImageTexture{

url [

"textures/title_2.gif"]

repeatS FALSE

repeatT FALSE

}

textureTransform TextureTransform {

translation 0.01 0.01

scale 0.98 0.98

}

}

geometry IndexedFaceSet{

coord Coordinate{

point [ 0 -118 -40,

250 -118 -40,

250 125 -40,

0 125 -40]

} #end coord

coordIndex[ 0, 1, 2, 3]

texCoord TextureCoordinate {

point [ -0.01 -0.01, 1.01 -0.01,

1.01 1.01, -0.01 1.01 ]

point [ 0 0, 1 0, 1 1, 0 1 ]

}

texCoordIndex [ 0, 1, 2, 3]

} #end geometry

} #end shape

] #end Children

} #end Transform

DEF Title_PI PositionInterpolator {

key [ 0, 0.25, 0.5, 0.75, 1 ]

keyValue [ 0 0 130, 0 0 180, 0 0 300, 0 0 100000, 0 0 200000 ]

}

DEF Corona Transform{

children Billboard {

axisOfRotation 0 0 0

children [

DEF FirstLight Transform{

children [

PointLight{

ambientIntensity 1

intensity 0.9

radius 220

}

]

rotation 0 0 -1 0

translation 0 0 200

},

DEF AnotherLight Transform{

children [

PointLight{

ambientIntensity 1

intensity 0.4

radius 710

}

]

rotation 0 0 -1 0

translation 0 0 700

},

DEF DirectSun Group {

children [

DirectionalLight {

direction 0 0 1

intensity 0.9

}

]

},

Shape{

appearance Appearance{

material Material{

}

texture ImageTexture{

url [

"textures/corona_l.gif"]

repeatS FALSE

repeatT FALSE

}

}

geometry IndexedFaceSet{

creaseAngle 1

coord Coordinate{

point[ -249 -118 -40,

3 -118 -40,

3 128 -40,

-249 128 -40]

} #end coord

coordIndex[ 0, 1, 2, 3]

texCoord TextureCoordinate {

point [ -0.01 -0.01, 1.01 -0.01,

1.01 1.01, -0.01 1.01 ]

}

texCoordIndex [ 0, 1, 2, 3]

} #end geometry

}, #end shape

Shape{

appearance Appearance{

material Material{

}

texture ImageTexture{

url [

"textures/corona_r.gif"]

repeatS FALSE

repeatT FALSE

}


}

geometry IndexedFaceSet{

creaseAngle 1

coord Coordinate{

point [ -3 -118 -40,

250 -118 -40,

250 127 -40,

-3 127 -40]

} #end coord

coordIndex[ 0, 1, 2, 3]

texCoord TextureCoordinate {

point [ -0.01 -0.01, 1.01 -0.01,

1.01 1.01, -0.01 1.01 ]

point [ 0 0, 1 0, 1 1, 0 1 ]

}

texCoordIndex [ 0, 1, 2, 3]

} #end geometry

} #end shape

] # end billboard children

} # end billboard

} # end Corona transform

DEF TheSpheres Transform {

children [

DEF Core Transform {

children [

Shape {

appearance Appearance{

material Material {

diffuseColor 1 1 1

emissiveColor 1 1 1

}

}

geometry Sphere{

radius 65

}

}

]

},

DEF Inner Transform{

children [

Shape{

appearance Appearance{

material Material{

diffuseColor 1 1 1

emissiveColor 0.5 0.4 0.2 #0.7 0.6 0.4

ambientIntensity 1

transparency 0.3

shininess 1

}

texture ImageTexture{

url [

"textures/sol_1.gif"]

}

}

geometry Sphere{

radius 69.5

}

}

]

rotation 0 1 0 0

},

DEF Outer Transform{

children [

Shape{

appearance Appearance{

material DEF Shell Material{

diffuseColor 1 1 1

emissiveColor 0.7 0.6 0.4 #0.9 0.8 0.6

ambientIntensity 1

shininess 0

transparency 0.75

}

texture ImageTexture{

url [

"textures/sol_2.gif"]

}

}

geometry Sphere{

radius 80

}

}

]

rotation 0 1 0 0

},

DEF Flares Transform{

children [

Shape{

appearance Appearance{

material DEF FlaresT Material{

diffuseColor 1 1 1

emissiveColor 0.5 0.4 0.25 #0.7 0.6 0.5

ambientIntensity 1

shininess 0.2

transparency 0

}

texture ImageTexture{

url [

"textures/sol_3.gif"]

}

}

geometry DEF FlareSphere Sphere{

radius 75

}

}

]

rotation 0 1 0 0

}

] # end TheSpheres children

rotation 0 1 0 0

}

DEF Inner_TmS TimeSensor{

cycleInterval 20

enabled TRUE

loop TRUE

}

DEF Inner_OI OrientationInterpolator{

key [

0,

0.333333,

0.666667,

1]

keyValue [

0 1 0 0,

0 1 0 2.0944,

0 1 0 4.18879,

0 1 0 6.28319]

}

ROUTE Inner_TmS.fraction_changed TO Inner_OI.set_fraction

ROUTE Inner_OI.value_changed TO Inner.set_rotation

DEF Flares_TmS TimeSensor {

cycleInterval 42

enabled TRUE

loop TRUE

}

DEF FlareExp TimeSensor {

cycleInterval 3

enabled TRUE

loop TRUE

}

DEF Flares_OI OrientationInterpolator{

key [

0,

0.333333,

0.666667,

1]

keyValue [

0 1 0 0,

0 1 0 2.0944,

0 1 0 4.18879,

0 1 0 6.28319]

}

#DEF Flares_SI ScalarInterpolator {

# key [ 0 .5 1 ]

# keyValue [ 65 75 65 ] #0 0.7 0 ]

# }

DEF FlareScale PositionInterpolator {

key [ 0 .5 1 ]

keyValue [

0.9 0.8 0.9

0.85 0.8 0.85

0.9 0.8 0.9

]

}

ROUTE Flares_TmS.fraction_changed TO Flares_OI.set_fraction

ROUTE Flares_OI.value_changed TO Flares.set_rotation

#ROUTE FlareExp.fraction_changed TO Flares_SI.set_fraction

#ROUTE Flares_SI.value_changed TO FlaresT.transparency

ROUTE FlareExp.fraction_changed TO FlareScale.set_fraction

ROUTE FlareScale.value_changed TO Flares.set_scale

DEF Crash Transform{

rotation 0 1 0 -2.3562

translation 0 0 100000

children [

DEF CrashView Viewpoint{

position 0 400 1000

orientation -1 0 0 0.38051

fieldOfView 0.6

description "The Earth"

jump TRUE

}

#DEF CrashNav NavigationInfo{

# type ["NONE" ]

# avatarSize [0.025, 0.025, 0.025]

# headlight FALSE

#}

DEF EandC Transform{

children [

DEF Earth Transform{

children [

Shape{

appearance Appearance{

material Material{

emissiveColor 0.2 0.2 0.2

diffuseColor 1 1 1

shininess 0.390625

transparency 0

}

texture ImageTexture{

url [

"textures/earth.jpg"]

}

}

geometry Sphere{

radius 63.78

}

}

]

scale 1.003 1 1.003

# 1/127 oblateness

},

DEF Clouds Transform{

children [

Shape{

appearance Appearance{

material Material{

emissiveColor 0.2 0.2 0.2

diffuseColor 1 1 1

shininess 0.390625

}

texture ImageTexture{

url [

"textures/clouds.gif"]

}

}

geometry Sphere{

radius 63.98

# 12 km above sea level

}

}

]

scale 1.04 1.04 1.04

# sorry, added separation needed for VRML browser z-buffer noise.

},

DEF Haze Transform{

children [

Shape{

appearance Appearance{

material DEF HazeT Material{

# emissiveColor 0.35 0.2 0.2

diffuseColor 0.35 0.2 0.2

transparency 1

}

}

geometry Sphere{

radius 64.08

# 12 km above sea level

}

}

]

scale 1.1 1.1 1.1

# sorry, added separation needed for VRML browser z-buffer noise.

}

] # end EandC children

rotation 0 0 1 -.40927971

# 23.45 degree inclination (23 degrees 27 minutes)

scale 2.3 2.3 2.3

},

DEF PlanetLight Transform{

children [

PointLight{

ambientIntensity 0.6

radius 1500

}

]

rotation 0 0 -1 0

translation -600 100 1000

},

DEF Asteroid Transform {

translation 0 0 0

children [

Shape {

appearance Appearance{

material Material{

ambientIntensity 0.05

emissiveColor 0.25 0.15 0.1

diffuseColor 0.8 0.6 0.4

specularColor 0.8 0.6 0.4

shininess 0.5

}

texture ImageTexture { url "textures/asteroid.jpg" }

}

geometry Sphere {

radius 10

}

} #end Shape

] #end children of transform

rotation 0 0 -1 0

scale 1 0.7 0.6

}

DEF ExplodeTrans Transform{

# center 0 -20 -180

children Billboard {

axisOfRotation 0 0 0

children [

DEF GoTouch TouchSensor{}

DEF WhichImage Switch {

whichChoice 0

choice [

Shape {

geometry DEF largeFace IndexedFaceSet {

coord Coordinate {

point[ -100 -100 160,

100 -100 160,

100 100 160,

-100 100 160]

} #end coord

coordIndex[ 0, 1, 2, 3]

} #end geometry

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl01.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl03.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl05.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl09.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl11.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl13.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl15.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl17.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

}, #end shape

Shape {

geometry USE largeFace

appearance Appearance {

material Material{

diffuseColor 0 0 0

transparency 1

}

texture ImageTexture {

url "expl01.gif"

repeatS FALSE

repeatT FALSE

}

} #end appearance

} #end shape

] #end choice

}, #end Switch

] #end children of Billboard

} #end Billboard

# translation 0 20 180

} #end ExplodeTrans transform

] #end Crash children

} #end Crash Transform

DEF BillTime TimeSensor{

loop FALSE

enabled FALSE

cycleInterval 2 #1.8

startTime 0

stopTime 1

}

DEF BillAnimate ScalarInterpolator {

key [ 0, 0.5, 1 ]

keyValue [ 0, 4, 8 ]

}

DEF ChangeImage Script {

eventIn SFFloat newValue

eventOut SFInt32 newImageCount

url

"javascript:

function newValue(valueIn){

newImageCount = Math.round(valueIn);

}"

}

DEF CheckTrigger Script {

eventIn SFFloat fromTimer

eventIn SFRotation earthRotation

field SFBool triggerSet FALSE

field SFBool doneOnce FALSE

eventOut SFBool trigger

eventOut SFBool trigger2

eventOut SFTime startIt

# eventOut SFInt32 imageNumber

url

"javascript:

function fromTimer(fractionIn){

if ( doneOnce ) return;

else

if (fractionIn >= 0.85) {

triggerSet = TRUE;

doneOnce = TRUE;

}

}


function earthRotation(newRotation, timestamp){

if ( triggerSet == FALSE ) return;

else

if ( newRotation[3] > 0.4354 ) {

if ( newRotation[3] < 1.1355 ) {

print ('Rotation: ' + newRotation[3]);

trigger = TRUE;

trigger2 = TRUE;

startIt = timestamp;

triggerSet = FALSE;

}

}

}"

}

ROUTE BillTime.fraction_changed TO BillAnimate.set_fraction

ROUTE BillAnimate.value_changed TO ChangeImage.newValue

ROUTE ChangeImage.newImageCount TO WhichImage.set_whichChoice

#/S/SpinEngine{ object Earth enabled TRUE time 23.9 axis 0.000000
1.000000 0.000000 degrees -360.000000 oscillate FALSE repeat TRUE}

#/SI/Start of SpinEngine

DEF Earth_TmS TimeSensor{

cycleInterval 23.9

enabled TRUE

loop TRUE

}

DEF Earth_OI OrientationInterpolator{

key [

0,

0.25

0.5,

0.75,

1]

keyValue [

0 1 0 1.570796327,

0 1 0 3.141592654,

0 1 0 4.71238898,

0 1 0 0,

0 1 0 1.570796327]

}

ROUTE Earth_TmS.fraction_changed TO Earth_OI.set_fraction

ROUTE Earth_OI.value_changed TO Earth.set_rotation

#/SX/End of SpinEngine

#/S/SpinEngine{ object Clouds enabled TRUE time 14.000000 axis 0.000000
1.000000 0.000000 degrees -360.000000 oscillate FALSE repeat TRUE}

#/SI/Start of SpinEngine

DEF Clouds_TmS TimeSensor{

cycleInterval 14

enabled TRUE

loop TRUE

}

DEF Clouds_OI OrientationInterpolator{

key [

0,

0.333333,

0.666667,

1]

keyValue [

0 1 0 0,

0 1 0 2.0944,

0 1 0 4.18879,

0 1 0 6.28319]

}

ROUTE Clouds_TmS.fraction_changed TO Clouds_OI.set_fraction

ROUTE Clouds_OI.value_changed TO Clouds.set_rotation

#/SX/End of SpinEngine

DEF Falling_TmS TimeSensor {

cycleInterval 22

loop FALSE

enabled TRUE

startTime 0

stopTime 0

}

DEF Falling_PI PositionInterpolator {

key [ 0, 0.5, 1 ]

keyValue [ -30 420 1000, -15 190 500, 0 -40 0 ]

}

#/S/SpinEngine{ object Asteroid enabled TRUE time 12.000000 axis
1.000000 0.000000 0.000000 degrees -360.000000 oscillate FALSE repeat
TRUE}

#/SI/Start of SpinEngine

DEF Asteroid_TmS TimeSensor{

cycleInterval 7

enabled TRUE

loop TRUE

}

DEF Asteroid_OI OrientationInterpolator{

key [

0,

0.333333,

0.666667,

1]

keyValue [

1 0 1 0,

1 0 1 2.0944,

1 0 1 4.18879,

1 0 1 6.28319]

}


ROUTE Asteroid_TmS.fraction_changed TO Asteroid_OI.set_fraction

ROUTE Asteroid_OI.value_changed TO Asteroid.set_rotation

#/SX/End of SpinEngine

ROUTE Falling_TmS.fraction_changed TO Falling_PI.set_fraction

ROUTE Falling_PI.value_changed TO Asteroid.set_translation

DEF TitleTimer TimeSensor {

loop FALSE

enabled TRUE

cycleInterval 8

startTime 0

stopTime 0

}

DEF HazeTime TimeSensor{

cycleInterval 12

enabled FALSE

loop FALSE

startTime 0

stopTime 0

}

DEF HazeDensity Script {

eventIn SFFloat fromTimer

eventOut SFFloat valueChanged

url [

"javascript:

function fromTimer(fractionIn){

valueChanged = (1 - fractionIn);

}"

]

}

DEF SetStop Script {

eventIn SFTime current

eventOut SFTime StopIt

url [

"javascript:

function current(value){

StopIt = (value + 8);

}"

]

}

DEF SetStart Script {

eventIn SFTime current

eventOut SFBool startIt

eventOut SFTime theTime

eventOut SFTime addedTime

eventOut SFTime startAudio

eventOut SFTime endAudio

eventOut SFTime finalOrbit


url [

"javascript:

function current(value){

startIt = TRUE;

theTime = (value + 6);

addedTime = (value + 22);

startAudio = (value + 2);

endAudio = (value + 114);

finalOrbit = (value + 62); //was + 58

}"

]

}

DEF StartFalling Script {

eventIn SFBool set_theTime

eventOut SFTime theTime_changed

url [

"javascript:

function set_theTime( value, timestamp ){

if ( value == TRUE ) {

theTime_changed = (timestamp + 1);

}

}"

]

}

DEF Zoom_TmS TimeSensor {

enabled FALSE

loop FALSE

startTime 0

stopTime 0

cycleInterval 16

}

DEF Zoom_PI PositionInterpolator {

key [ 0, 0.25, 0.5, 0.75, 1 ]

keyValue [ 0 0 1000, 0 0 6000, 0 0 10000, -35 200 20000, -707.10678 400
99292.89322 ]

}

DEF Zoom_OI OrientationInterpolator {

key [ 0, 0.5, 0.65, 0.75, 1 ]

keyValue [

0 1 0 0

-0.078102 -0.97895 -0.18856 0.4

-0.078102 -0.97895 -0.18856 1.1855

-0.078102 -0.97895 -0.18856 2.3711

-0.078102 -0.97895 -0.18856 2.3711

]

}

DEF TriggerCrash Script {

eventIn SFFloat fromTimer

field SFBool doneOnce FALSE

eventOut SFBool animationEnable

eventOut SFBool viewpointDisable

url [

"javascript:

function fromTimer(fractionIn){

if (fractionIn >= 0.95) {

if (doneOnce == TRUE) return;

else {

doneOnce = TRUE;

animationEnable = TRUE;

viewpointDisable = FALSE;

}

}

else {trigger = FALSE;}

}"

]

}

DEF ErasePrompt Script {

eventIn SFTime timeIn

field MFString name "../blanktxt.html"

field MFString param "target=HTMLTEXT"

eventOut SFTime startNow

url [

"vrmlscript:

function timeIn( value, timestamp ){

if ( value > 0 ) {

startNow = timestamp;

Browser.loadURL ( name, param );

}

}"

]

}

DEF TitleOff Script {

eventIn SFFloat fromTimer

eventOut SFTime timeIt

url [

"javascript:

function fromTimer(fractionIn, timestamp){

if (fractionIn >= 0.3) {

timeIt = (timestamp);

}

}"

]

}

DEF SwitchItOn Script {

eventIn SFBool trigger

eventOut SFBool animationEnable

eventOut SFBool viewpointDisable

url [

"javascript:

function trigger(value){

if (value == TRUE) {

animationEnable = TRUE;

viewpointDisable = FALSE;

}

}"

]

}

DEF aSound Sound {

source DEF TestSound AudioClip {

url "scen01a.wav"

startTime -1

stopTime 0

loop FALSE

}

minBack 100000

minFront 100000

maxBack 100000

maxFront 100000

spatialize FALSE

intensity 1

location 0 0 70000

}

DEF doneHere Script {

eventIn SFBool trigger

field SFBool doneOnce FALSE

field MFString name2 "../l_muse1.html"

field MFString param2 "target=HTMLTEXT"

# field MFString name3 "../museum.html"

# field MFString param3 "target=VRML"

url [

"javascript:

function trigger( value, timestamp ) {

if (value == FALSE) {

Browser.loadURL ( name2, param2 );

// Browser.loadURL ( name3, param3 );

}

}"

]

}

# if ( doneOnce == FALSE ) {

# doneOnce = TRUE;

# return;

# }

# else {

DEF FinalOrbit_TS TimeSensor {

cycleInterval 44

loop TRUE

enabled FALSE

startTime -1

stopTime 0

}

DEF FinalOrbit_PI PositionInterpolator {

key [ 0 0.25 0.5 0.75 1 ]

keyValue [

0 400 1000

-1000 0 0

0 -400 -1000

1000 0 0

0 400 1000

]

}

DEF FinalOrbit_OI OrientationInterpolator {

key [ 0 0.25 0.5 0.75 1 ]

keyValue [

1 0 0 -0.38051

0 1 0 -1.5708

# 0 1 0 -3.14159

0 0.98196 -0.18911 3.14159

0 1 0 -4.71239

1 0 0 -0.38051

]

}

ROUTE SetStart.startAudio TO TestSound.startTime

ROUTE SetStart.endAudio TO TestSound.stopTime

ROUTE SetStart.finalOrbit TO FinalOrbit_TS.startTime

ROUTE TestSound.isActive TO doneHere.trigger


ROUTE SetStart.addedTime TO Zoom_TmS.stopTime

ROUTE SetStart.theTime TO Zoom_TmS.startTime

ROUTE SetStart.startIt TO Zoom_TmS.enabled

ROUTE Zoom_TmS.fraction_changed TO Zoom_PI.set_fraction

ROUTE Zoom_PI.value_changed TO ZoomView.set_translation

ROUTE Zoom_TmS.fraction_changed TO Zoom_OI.set_fraction

ROUTE Zoom_OI.value_changed TO ZoomView.set_rotation

ROUTE Zoom_TmS.fraction_changed TO TriggerCrash.fromTimer

#ROUTE TriggerCrash.trigger TO SwitchItOn.trigger

#ROUTE SwitchItOn.animationEnable TO CrashView.set_bind

#ROUTE SwitchItOn.animationEnable TO StartFalling.set_theTime

#ROUTE SwitchItOn.viewpointDisable TO Zoom_TmS.enabled

ROUTE TriggerCrash.animationEnable TO CrashView.set_bind

ROUTE TriggerCrash.animationEnable TO StartFalling.set_theTime

ROUTE TriggerCrash.viewpointDisable TO Zoom_TmS.enabled

ROUTE Falling_TmS.fraction_changed TO CheckTrigger.fromTimer

ROUTE Earth_OI.value_changed TO CheckTrigger.earthRotation

ROUTE CheckTrigger.trigger TO BillTime.enabled

ROUTE CheckTrigger.trigger2 TO HazeTime.enabled

ROUTE CheckTrigger.trigger2 TO FinalOrbit_TS.enabled

#ROUTE CheckTrigger.imageNumber TO WhichImage.set_whichChoice

#ROUTE Falling_TmS.time TO BillTime.startTime

ROUTE CheckTrigger.startIt TO BillTime.startTime

ROUTE StartFalling.theTime_changed TO Falling_TmS.startTime

ROUTE HazeTime.fraction_changed TO HazeDensity.fromTimer

ROUTE HazeDensity.valueChanged TO HazeT.transparency

#ROUTE Falling_TmS.time TO HazeTime.startTime

#ROUTE Falling_TmS.time TO SetStop.current

ROUTE CheckTrigger.startIt TO HazeTime.startTime

ROUTE CheckTrigger.startIt TO SetStop.current

ROUTE SetStop.StopIt TO HazeTime.stopTime

ROUTE FinalOrbit_TS.fraction_changed TO FinalOrbit_PI.set_fraction

ROUTE FinalOrbit_TS.fraction_changed TO FinalOrbit_OI.set_fraction

ROUTE FinalOrbit_PI.value_changed TO CrashView.position

ROUTE FinalOrbit_OI.value_changed TO CrashView.orientation

ROUTE TitleTimer.fraction_changed TO Title_PI.set_fraction

ROUTE Title_PI.value_changed TO Title.set_translation

ROUTE TitleTimer.fraction_changed TO TitleOff.fromTimer

ROUTE TitleOff.timeIt TO SetStart.current

#ROUTE TitleTouch.touchTime TO TitleTimer.startTime

#ROUTE TitleTouch.touchTime TO ErasePrompt.timeIn

#DEF removeWait Script {

# eventIn SFTime triggerTime

# field MFString textURL "../blanktxt.html"

# field MFString textFrame "target=HTMLTEXT"

# url ["javascript:

# function triggerTime( value, timestamp ) {

# if ( value > 0 ) {

# Browser.loadURL( textURL, textFrame );

# }

# }"

# ]

#}

ROUTE ErasePrompt.startNow TO TitleTimer.startTime

ROUTE TestSound.duration_changed TO ErasePrompt.timeIn