1 |
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
|
3 | <X3D profile='Immersive' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'> |
4 | <head> |
5 | <meta name='title' content='Trebuchet.x3d'/> |
6 | <meta name='description' content='Working model of a 14th century Trebuchet Catapult.'/> |
7 | <meta name='creator' content='Joe Roth'/> |
8 | <meta name='created' content='20 June 2001'/> |
9 | <meta name='modified' content='30 November 2024'/> |
10 | <meta name='version' content='7.8'/> |
11 | <meta name=' TODO ' content=' multiple files missing, lost '/> |
12 | <meta name='identifier' content='https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/Trebuchet.x3d'/> |
13 | <meta name='reference' content='http://trebuchet.com'/> |
14 | <meta name='reference' content='http://members.home.net/dimona'/> |
15 | <meta name='subject' content='trebuchet catapult Monty Python'/> |
16 | <meta name='reference' content='Permission granted for use of the VRML chicken I own a copy of Monty Python and the Holy Grail I have requested permission to use for non profit use. No response received. I will use the sound clips under "Fair Use" clause of the DMCA'/> |
17 | <meta name='reference' content='https://www.web3d.org/WorkingGroups/media/textures/nature/leaves_5.jpg.htm'/> |
18 | <meta name='reference' content='http://www.revemonde.net/UniversalMedia/textures/nature/leaves_5.jpg.htm'/> |
19 | <meta name='generator' content='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/> |
20 | <meta name='license' content='../license.html'/> |
21 | </head> |
22 | <Scene> |
23 | <WorldInfo title='Trebuchet.x3d'/> |
24 | <Background groundAngle='1.309 1.570796' groundColor='0.1 0.1 0 0.4 0.25 0.2 0.6 0.6 0.6' skyAngle='1.309 1.57079' skyColor='0 0.2 0.7 0 0.5 1 1 1 1' backUrl=' "../UniversalMediaPanoramas/meadow_2_back.jpg " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/../UniversalMediaPanoramas/meadow_2_back.jpg " "https://www.web3d.org/WorkingGroups/media/textures/panoramas/meadow_2_back.jpg " ' bottomUrl=' "../UniversalMediaPanoramas/meadow_2_bottom.jpg " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/../UniversalMediaPanoramas/meadow_2_bottom.jpg " "https://www.web3d.org/WorkingGroups/media/textures/panoramas/meadow_2_bottom.jpg " ' frontUrl=' "../UniversalMediaPanoramas/meadow_2_front.jpg " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/../UniversalMediaPanoramas/meadow_2_front.jpg " "https://www.web3d.org/WorkingGroups/media/textures/panoramas/meadow_2_front.jpg " ' leftUrl=' "../UniversalMediaPanoramas/meadow_2_left.jpg " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/../UniversalMediaPanoramas/meadow_2_left.jpg " "https://www.web3d.org/WorkingGroups/media/textures/panoramas/meadow_2_left.jpg " ' rightUrl=' "../UniversalMediaPanoramas/meadow_2_right.jpg " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/../UniversalMediaPanoramas/meadow_2_right.jpg " "https://www.web3d.org/WorkingGroups/media/textures/panoramas/meadow_2_right.jpg " ' topUrl=' "../UniversalMediaPanoramas/meadow_2_top.jpg " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/../UniversalMediaPanoramas/meadow_2_top.jpg " "https://www.web3d.org/WorkingGroups/media/textures/panoramas/meadow_2_top.jpg " '/> |
25 | <Sound maxBack='1000' maxFront='1000'> |
26 | <AudioClip DEF='HolyGrail' description='HolyGrail' loop='true' url=' "holygral.mp3" "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/holygral.mp3" '/> |
27 | </Sound> |
28 | <Shape> |
29 | <Box size='10000 1 10000'/> |
30 | <Appearance> |
31 | <ImageTexture url=' "grass.jpg " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/grass.jpg " '/> |
32 | </Appearance> |
33 | </Shape> |
34 | <Transform rotation='0 1 0 1.57' scale='.5 .5 .5' translation='10.5 6.5 4.5'> |
35 | <Shape> |
36 | |
37 | <Material diffuseColor='1 0 0' emissiveColor='1 1 0'/> |
38 | </Appearance> |
39 | <Text string='"Click Sling to Select Projectile"'> |
40 | <FontStyle/> |
41 | </Text> |
42 | </Shape> |
43 | </Transform> |
44 | <Transform rotation='0 1 0 1.57' scale='.5 .5 .5' translation='11 5.5 6'> |
45 |
<!-- Switch
Weight is a DEF node that has 1 USE node: USE_1
<!-- ROUTE information for Weight node: [from WeightScript.whichchoice to whichChoice ] --> <Switch DEF='Weight' whichChoice='0'> |
46 | <Group> |
47 | <Shape> |
48 | <Appearance USE='TextAppearance'/> |
49 | <Text string='"Click Here to Change Counter Weight (50 lbs)"'/> |
50 | </Shape> |
51 | </Group> |
52 | <Group> |
53 | <Shape> |
54 | <Appearance USE='TextAppearance'/> |
55 | <Text string='"Click Here to Change Counter Weight (500 lbs)"'/> |
56 | </Shape> |
57 | </Group> |
58 | <Group> |
59 | <Shape> |
60 | <Appearance USE='TextAppearance'/> |
61 | <Text string='"Click Here to Change Counter Weight (1000 lbs)"'/> |
62 | </Shape> |
63 | </Group> |
64 | <Group> |
65 | <Shape> |
66 | <Appearance USE='TextAppearance'/> |
67 | <Text string='"Click Here to Change Counter Weight (10000 lbs)"'/> |
68 | </Shape> |
69 | </Group> |
70 | </Switch> |
71 |
<!-- TouchSensor
weightselector is a DEF node that has 1 USE node: USE_1
<!-- ROUTE information for weightselector node: [from isActive to WeightScript.set_boolean ] --> <TouchSensor DEF='weightselector' description='weight selector'/> |
72 | <Transform translation='8 0 0'> |
73 | <Shape> |
74 | <Box size='20 1 1'/> |
75 | <Appearance> |
76 | <Material transparency='1'/> |
77 | </Appearance> |
78 | </Shape> |
79 | </Transform> |
80 | </Transform> |
81 | <Transform rotation='0 1 0 1.57' translation='10 .5 4.5'> |
82 | |
83 | <Billboard> |
84 | <Shape> |
85 | <Appearance> |
86 | <Material diffuseColor='1 0 0'/> |
87 | </Appearance> |
88 | <Text string='"LAUNCH"'> |
89 | <FontStyle/> |
90 | </Text> |
91 | </Shape> |
92 | <Transform translation='2 .3 0'> |
93 | <Shape> |
94 | <Box size='5 1 1'/> |
95 | <Appearance> |
96 | <Material transparency='1'/> |
97 | </Appearance> |
98 | </Shape> |
99 | </Transform> |
100 |
<!-- ROUTE information for PigdogMonk node:
[from PigdogMonkScript.whichchoice to whichChoice
]
-->
<Switch DEF='PigdogMonk' whichChoice='-1'> |
101 | <Group> |
102 | <Sound maxBack='1000' maxFront='1000'> |
103 |
<!-- ROUTE information for PigDogSound node:
[from Launch.touchTime to set_startTime
]
-->
<AudioClip DEF='PigDogSound' description='PigDogSound' url=' "pigdog.wav" "http://www.nps.navy.mil/code32/vrml/pigdog.wav" '/> |
104 | </Sound> |
105 | </Group> |
106 | <Group> |
107 | <Sound maxBack='1000' maxFront='1000'> |
108 |
<!-- ROUTE information for MonkSound node:
[from Launch.touchTime to set_startTime
]
-->
<AudioClip DEF='MonkSound' description='MonkSound' url=' "monks.wav" "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/monks.wav" '/> |
109 | <!-- original sound file lost, replacement from https://freesound.org/people/nemaavla/sounds/344683/ --> |
110 | </Sound> |
111 | </Group> |
112 | </Switch> |
113 | </Billboard> |
114 |
<!-- ROUTE information for Launch node:
[from touchTime to clock.set_startTime
]
[from isActive to PigdogMonkScript.set_boolean
]
[from touchTime to PigDogSound.set_startTime
]
[from touchTime to MonkSound.set_startTime
]
-->
<TouchSensor DEF='Launch' description='launch!'/> |
115 | </Transform> |
116 | <Transform> |
117 |
<!-- Switch
projectilename is a DEF node that has 1 USE node: USE_1
<!-- ROUTE information for projectilename node: [from LauncheeScript.whichchoice to whichChoice ] --> <Switch DEF='projectilename' whichChoice='0'> |
118 | <Group> |
119 | <Shape> |
120 | <Appearance USE='TextAppearance'/> |
121 | <Text string='"Bowling Ball (10 lbs)"'> |
122 | <FontStyle size='.5'/> |
123 | </Text> |
124 | </Shape> |
125 | <Sound maxBack='1000' maxFront='1000' priority='1'> |
126 |
<!-- ROUTE information for HolyHandGrenadeSound node:
[from LauncheeChoice.touchTime to set_startTime
]
-->
<AudioClip DEF='HolyHandGrenadeSound' description='HolyHandGrenadeSound' url=' "grenade.wav"'/> |
127 | </Sound> |
128 | </Group> |
129 | <Group> |
130 | <Shape> |
131 | <Appearance USE='TextAppearance'/> |
132 | <Text string='"Cow (1000 lbs)"'> |
133 | <FontStyle size='.5'/> |
134 | </Text> |
135 | </Shape> |
136 | <Sound maxBack='1000' maxFront='1000'> |
137 |
<!-- ROUTE information for CowSound node:
[from LauncheeChoice.touchTime to set_startTime
]
-->
<AudioClip DEF='CowSound' description='CowSound' url=' "lavache.wav"'/> |
138 | </Sound> |
139 | </Group> |
140 | <Group> |
141 | <Shape> |
142 | <Appearance USE='TextAppearance'/> |
143 | <Text string='"Chicken (5 lbs)"'> |
144 | <FontStyle size='.5'/> |
145 | </Text> |
146 | </Shape> |
147 | <Sound maxBack='1000' maxFront='1000' priority='1'> |
148 |
<!-- ROUTE information for HamsterSound node:
[from LauncheeChoice.touchTime to set_startTime
]
-->
<AudioClip DEF='HamsterSound' description='HamsterSound' url=' "hamster.wav"'/> |
149 | </Sound> |
150 | </Group> |
151 | </Switch> |
152 | </Transform> |
153 | </Transform> |
154 | <Transform rotation='0 1 0 -1.67'> |
155 | <Transform DEF='aft' translation='5 5 15'> |
156 | <Transform translation='-2.5 -4.5 -2'> |
157 | <Transform USE='launch'/> |
158 | </Transform> |
159 | </Transform> |
160 | </Transform> |
161 | <Transform translation='0 3 0'> |
162 | |
163 | <Box size='25 1 1'/> |
164 | |
165 |
<!-- ImageTexture
woodTexture is a DEF node that has 1 USE node: USE_1 --> <ImageTexture DEF='woodTexture' url=' "wood.gif " "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/wood.gif " '/> |
166 | </Appearance> |
167 | </Shape> |
168 |
<!-- Transform
angledsupport is a DEF node that has 1 USE node: USE_1 -->
<Transform DEF='angledsupport' rotation='0 0 1 1' translation='-5 10 0'> |
169 | <Shape USE='plank'/> |
170 | </Transform> |
171 |
<!-- Transform
angledsupport2 is a DEF node that has 1 USE node: USE_1 -->
<Transform DEF='angledsupport2' rotation='0 0 1 -1' translation='5 10 0'> |
172 | <Shape USE='plank'/> |
173 | </Transform> |
174 |
<!-- Transform
verticalsupport is a DEF node that has 1 USE node: USE_1 -->
<Transform DEF='verticalsupport' rotation='0 0 1 1.57' scale='.9 1 1' translation='0 11 0'> |
175 | <Shape USE='plank'/> |
176 | <!-- Main Verticle Support --> |
177 | </Transform> |
178 |
<!-- Transform
horizontalsupport is a DEF node that has 2 USE nodes: USE_1, USE_2 -->
<Transform DEF='horizontalsupport' scale='.4 1 1' translation='0 10 0'> |
179 | <Shape USE='plank'/> |
180 | </Transform> |
181 | <Transform rotation='0 0 1 1.57' scale='.6 1 1' translation='0 5 10'> |
182 | <Transform rotation='0 1 0 .4'> |
183 | <Shape USE='plank'/> |
184 | </Transform> |
185 | </Transform> |
186 | |
187 | <Shape> |
188 | <Box size='5 5 .5'/> |
189 | <Appearance USE='wood'/> |
190 | </Shape> |
191 | </Transform> |
192 | <Transform rotation='1 0 0 -1.57' translation='0 0.6 2.5'> |
193 | <Transform rotation='0 0 1 1.57'> |
194 | <Shape> |
195 | <Extrusion beginCap='false' crossSection='1.0 -.38 .92 -.38 .71 -.71 .38 -.92 0.0 -1.0 -.38 -.92 -.71 -.71 -.92 -.38 -1.0 -.38 -1 -1.1 1 -1.1 1.0 -.38' endCap='false' solid='false' spine='0 6 0 0 -11 0'/> |
196 | <Appearance USE='wood'/> |
197 | </Shape> |
198 | </Transform> |
199 | </Transform> |
200 |
<!-- ROUTE information for flinger node:
[from flingerangles.value_changed to set_rotation
]
-->
<Transform DEF='flinger' center='7 0 0' rotation='0 0 1 .82' scale='.9 1 1' translation='-7 18 2.5'> |
201 | <Transform> |
202 | <Shape> |
203 | <Box size='35 1 1'/> |
204 | <Appearance USE='wood'/> |
205 | </Shape> |
206 | <Transform translation='7 0 0'> |
207 | <Shape> |
208 | <Box size='8 2 2'/> |
209 | <Appearance USE='wood'/> |
210 | </Shape> |
211 | </Transform> |
212 | </Transform> |
213 | <Transform rotation='1 0 0 1.57' scale='.2 .2 .2' translation='-15 -1 0'> |
214 | |
215 | <Appearance> |
216 | <Material specularColor='1 1 1'/> |
217 | </Appearance> |
218 | <Extrusion beginCap='false' convex='false' creaseAngle='1.57' crossSection='.90 0.00 0.81 -0.34 0.63 -0.63 0.34 -0.83 0.00 -.9 -0.34 -0.81 -0.63 -0.63 -0.81 -0.34 -.90 -0.00 -0.81 0.34 -0.63 0.63 -0.34 0.81 0.00 .90 0.38 0.81 0.63 0.63 0.81 0.34 .90 0.00' endCap='false' spine='2.00 0.0 0.00 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.00 0.0 2.00 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.00 0.0 0.00 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.00 0.0 -2.00 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.00 0.0 0.00'/> |
219 | </Shape> |
220 | <Transform translation='1 0 2'> |
221 | <Shape> |
222 | |
223 | <ImageTexture USE='woodTexture'/> |
224 | </Appearance> |
225 | <Sphere radius='1.5'/> |
226 | </Shape> |
227 | <!-- knott --> |
228 | </Transform> |
229 | </Transform> |
230 | <!-- The Unicorn --> |
231 | <Transform rotation='0 0 1 1.2' scale='.2 .2 .2' translation='-18.3 0.3 0'> |
232 | <Shape> |
233 | <Cylinder height='10'/> |
234 | <Appearance> |
235 | <Material specularColor='1 1 1'/> |
236 | </Appearance> |
237 | </Shape> |
238 | <Transform translation='0 -2.5 0'> |
239 | <Shape USE='Torus'/> |
240 | <!-- The Unicorn --> |
241 | <Transform translation='-2 -0 0'> |
242 | <Shape> |
243 | <Sphere radius='1.5'/> |
244 | <Appearance USE='rope'/> |
245 | </Shape> |
246 | <!-- Knott --> |
247 | </Transform> |
248 | </Transform> |
249 | <Transform rotation='0 0 1 1.2' translation='15 55 -11'> |
250 | <Transform scale='5 5 5'> |
251 | <Shape> |
252 | <Appearance USE='rope'/> |
253 | <Extrusion beginCap='false' creaseAngle='0.76' crossSection='.100 0.00 0.092 -0.038 0.071 -0.071 0.038 -0.092 0.00 -.100 -0.038 -0.092 -0.071 -0.071 -0.092 -0.038 -.100 -0.00 -0.092 0.038 -0.071 0.071 -0.038 0.092 0.00 .100 0.038 0.092 0.071 0.071 0.092 0.038 .100 0.00' endCap='false' solid='false' spine='-15.2 1.4 2.2 -12 -.8 2.2'/> |
254 | </Shape> |
255 | </Transform> |
256 | </Transform> |
257 | </Transform> |
258 | <Transform rotation='1 0 0 -1.7' translation='-17 -4.5 0'> |
259 | <Transform scale='.2 .2 .2'> |
260 | <Shape USE='Torus'> |
261 | <!-- Knot --> |
262 | </Shape> |
263 | <Transform translation='-1 0 1.7'> |
264 | <Shape> |
265 | <Sphere radius='1.5'/> |
266 | <Appearance USE='rope'/> |
267 | </Shape> |
268 | </Transform> |
269 | </Transform> |
270 | </Transform> |
271 | <Transform DEF='RnS'> |
272 | <Transform DEF='ropes'> |
273 | <Transform rotation='0 0 1 -.82' translation='7 -26 -2.5'> |
274 | <Shape> |
275 | <Appearance USE='rope'/> |
276 | <Extrusion beginCap='false' creaseAngle='0.76' crossSection='.100 0.00 0.092 -0.038 0.071 -0.071 0.038 -0.092 0.00 -.100 -0.038 -0.092 -0.071 -0.071 -0.092 -0.038 -.100 -0.00 -0.092 0.038 -0.071 0.071 -0.038 0.092 0.00 .100 0.038 0.092 0.071 0.071 0.092 0.038 .100 0.00' endCap='false' solid='false' spine='-33 .9 2.5 -18.5 1.9 2.55'/> |
277 | </Shape> |
278 | <Shape> |
279 | <Appearance USE='rope'/> |
280 | <Extrusion beginCap='false' creaseAngle='0.76' crossSection='.100 0.00 0.092 -0.038 0.071 -0.071 0.038 -0.092 0.00 -.100 -0.038 -0.092 -0.071 -0.071 -0.092 -0.038 -.100 -0.00 -0.092 0.038 -0.071 0.071 -0.038 0.092 0.00 .100 0.038 0.092 0.071 0.071 0.092 0.038 .100 0.00' endCap='false' solid='false' spine='-35.7 -.8 2.5 -18.8 -.8 2.55'/> |
281 | </Shape> |
282 | </Transform> |
283 | </Transform> |
284 | <Transform DEF='sling' rotation='0 0 1 -.82' translation='-4 -15.3 0'> |
285 | <Transform> |
286 | <Transform rotation='0 1 0 -1.57' scale='1 1.3 1' translation='.5 0 -1'> |
287 | <Transform rotation='0 0 1 1.57'> |
288 | <Transform scale='.3 .3 .3'> |
289 | |
290 | |
291 | <Material transparency='.5'/> |
292 | </Appearance> |
293 | <Extrusion crossSection='0 0 0 5 .5 7 1 8 2 9 3 11 3.5 11.2 4 11 5 9 6 8 6.5 7 6.7 5 6.7 0 0 0' spine='0 0 0 .1 0 0'/> |
294 | </Shape> |
295 | <Transform scale='.3 .3 .3' translation='0 -3.5 11.5'> |
296 | <Shape USE='Torus'/> |
297 | <Transform translation='0 0 2'> |
298 | <Shape> |
299 | <Appearance USE='rope'/> |
300 | <Sphere radius='1.5'/> |
301 | </Shape> |
302 | </Transform> |
303 | </Transform> |
304 | </Transform> |
305 | <Transform scale='.3 .3 .3' translation='2 0 0'> |
306 | <Shape USE='halfsling'/> |
307 | <Transform scale='.3 .3 .3' translation='0 -3.5 11.3'> |
308 | <Shape USE='Torus'/> |
309 | <Transform translation='0 0 2'> |
310 | <Shape> |
311 | <Appearance USE='rope'/> |
312 | <Sphere radius='1.5'/> |
313 | </Shape> |
314 | </Transform> |
315 | </Transform> |
316 | </Transform> |
317 | <Transform translation='1 -1 0'> |
318 | <Shape> |
319 | <Extrusion beginCap='false' creaseAngle='0.785' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00' endCap='false' solid='false' spine='0 -1 0 0 1 0'/> |
320 | <Appearance USE='clear'/> |
321 | </Shape> |
322 | </Transform> |
323 | </Transform> |
324 |
<!-- TouchSensor
LauncheeChoice is a DEF node that has 1 USE node: USE_1
<!-- ROUTE information for LauncheeChoice node: [from touchTime to HolyHandGrenadeSound.set_startTime ] [from touchTime to CowSound.set_startTime ] [from touchTime to HamsterSound.set_startTime ] [from isActive to LauncheeScript.set_boolean ] --> <TouchSensor DEF='LauncheeChoice' description='launcher choice'/> |
325 | </Transform> |
326 |
<!-- ROUTE information for projectiletransform node:
[from invisiable.value_changed to set_scale
]
-->
<Transform DEF='projectiletransform' scale='.01 .01 .01'> |
327 |
<!-- Switch
projectile is a DEF node that has 1 USE node: USE_1
<!-- ROUTE information for projectile node: [from LauncheeScript.whichchoice to whichChoice ] --> <Switch DEF='projectile' whichChoice='0'> |
328 | <Group> |
329 | <Transform translation='0 .7 0'> |
330 | <Shape> |
331 | <Sphere radius='.7'/> |
332 | |
333 | <Material diffuseColor='0 0 0' specularColor='1 1 1'/> |
334 | </Appearance> |
335 | </Shape> |
336 | </Transform> |
337 | </Group> |
338 | <Group> |
339 | <Transform> |
340 | <Inline url=' "cow.wrl" "http://www.uoguelph.ca/~dchiu/cow.wrl" '/> |
341 | </Transform> |
342 | </Group> |
343 | <Group> |
344 | <Transform rotation='0 1 0 1.57' scale='.4 .4 .4' translation='0 .7 0'> |
345 | <Inline url=' "vrml_ginger.wrl" "http://home.inreach.com/ntamura/vrml/vrml_ginger.wrl" '/> |
346 | </Transform> |
347 | </Group> |
348 | </Switch> |
349 | </Transform> |
350 | </Transform> |
351 | </Transform> |
352 | </Transform> |
353 | </Transform> |
354 | <Transform rotation='1 0 0 1.57' translation='0 18 2.5'> |
355 | <Shape> |
356 | <Cylinder height='8' radius='.4'/> |
357 | <Appearance> |
358 | <Material diffuseColor='0 0 0' specularColor='1 1 1'/> |
359 | </Appearance> |
360 | </Shape> |
361 | <!-- Top Pivot --> |
362 | </Transform> |
363 |
<!-- ROUTE information for verticalweight node:
[from verticalweightpath.value_changed to set_translation
]
-->
<Transform DEF='verticalweight'> |
364 | <Transform translation='4 18 1.8'> |
365 | <Shape> |
366 | <Box size='1 10 .5'/> |
367 | <Appearance USE='wood'/> |
368 | </Shape> |
369 | </Transform> |
370 | <Transform translation='4 18 3.2'> |
371 | <Shape> |
372 | <Box size='1 10 .5'/> |
373 | <Appearance USE='wood'/> |
374 | </Shape> |
375 | </Transform> |
376 | <Transform translation='4 14 2.5'> |
377 | <!-- CounterWeight --> |
378 | <Shape> |
379 | <Cylinder height='4' radius='1.5'/> |
380 | <Appearance> |
381 | <Material diffuseColor='0 0 0' specularColor='1 1 1'/> |
382 | </Appearance> |
383 | </Shape> |
384 | </Transform> |
385 | <Transform rotation='1 0 0 1.57' translation='4 22 2.5'> |
386 | <Shape> |
387 | <Cylinder height='2.5' radius='.3'/> |
388 | <Appearance> |
389 | <Material diffuseColor='0 0 0' specularColor='1 1 1'/> |
390 | </Appearance> |
391 | </Shape> |
392 | </Transform> |
393 | </Transform> |
394 | <Transform rotation='0 0 1 1.57' scale='.2 .2 .2' translation='-11.5 -1 2'> |
395 | |
396 | <Shape USE='Torus'/> |
397 | <Transform rotation='1 0 0 -1.57' translation='0 0 7'> |
398 | <Shape> |
399 | <Cylinder height='10' radius='.7'/> |
400 | <Appearance> |
401 | <Material specularColor='1 1 1'/> |
402 | </Appearance> |
403 | </Shape> |
404 | </Transform> |
405 | </Transform> |
406 | <Transform translation='0 0 7'> |
407 | <Transform USE='screw'/> |
408 | </Transform> |
409 | <!-- Release Pin --> |
410 |
<!-- ROUTE information for Pin node:
[from pinpath.value_changed to set_translation
]
-->
<Transform DEF='Pin' rotation='1 0 0 -1.57' translation='0 0 -3'> |
411 | <Transform USE='screw'/> |
412 | </Transform> |
413 | </Transform> |
414 | <Transform translation='0 0 5'> |
415 | <Shape USE='plank'/> |
416 | <Transform USE='angledsupport'/> |
417 | <Transform USE='angledsupport2'/> |
418 | <Transform USE='verticalsupport'/> |
419 | <Transform USE='horizontalsupport'/> |
420 | <Transform rotation='0 1 0 1.57' scale='.6 1 1' translation='0 -11 -2.5'> |
421 | <Transform USE='horizontalsupport'/> |
422 | </Transform> |
423 | <Transform rotation='0 0 1 -1.57' scale='.6 1 1' translation='0 5 -10'> |
424 | <Transform rotation='0 1 0 .4'> |
425 | <Shape USE='plank'/> |
426 | </Transform> |
427 | </Transform> |
428 | <Transform translation='0 0 .6'> |
429 | <Transform USE='panel'/> |
430 | </Transform> |
431 | </Transform> |
432 | <Transform translation='10 -1 2.5'> |
433 | |
434 | <Box size='1 1 8'/> |
435 | <Appearance USE='wood'/> |
436 | </Shape> |
437 | <Transform rotation='1 0 0 1.57' translation='0 0 4.5'> |
438 | |
439 | <Cylinder radius='2'/> |
440 | <Appearance USE='wood'/> |
441 | </Shape> |
442 | |
443 | <Sphere radius='1.5'/> |
444 | <Appearance USE='black'/> |
445 | </Shape> |
446 | <Transform translation='0 .55 0'> |
447 | |
448 | <Sphere radius='1.5'/> |
449 | <Appearance USE='black'/> |
450 | </Shape> |
451 | </Transform> |
452 | </Transform> |
453 | <Transform rotation='1 0 0 1.57' translation='0 0 -4.5'> |
454 | <Shape USE='wheel'/> |
455 | <Shape USE='tracks'/> |
456 | <Transform translation='0 -.55 0'> |
457 | <Shape USE='hub'/> |
458 | </Transform> |
459 | </Transform> |
460 | </Transform> |
461 | <Transform translation='-10 -1 2.5'> |
462 | <Shape USE='Axle'/> |
463 | <Transform rotation='1 0 0 1.57' translation='0 0 4.5'> |
464 | <Shape USE='wheel'/> |
465 | <Shape USE='tracks'/> |
466 | <Transform translation='0 .55 0'> |
467 | <Shape USE='hub'/> |
468 | </Transform> |
469 | </Transform> |
470 | <Transform rotation='1 0 0 1.57' translation='0 0 -4.5'> |
471 | <Shape USE='wheel'/> |
472 | <Shape USE='tracks'/> |
473 | <Transform translation='0 -.55 0'> |
474 | <Shape USE='hub'/> |
475 | </Transform> |
476 | </Transform> |
477 | <Transform rotation='0 1 0 -.6' translation='0 100 400'> |
478 | <Transform translation='1 3 0'> |
479 | <Viewpoint description='Side'/> |
480 | </Transform> |
481 | <Transform USE='launch'/> |
482 | <Transform> |
483 | <TouchSensor USE='LauncheeChoice'/> |
484 | <Switch USE='projectilename'/> |
485 | <Transform translation='2.5 0 0'> |
486 | <Shape> |
487 | <Box size='5 .5 .5'/> |
488 | <Appearance> |
489 | <Material transparency='1'/> |
490 | </Appearance> |
491 | </Shape> |
492 | </Transform> |
493 | </Transform> |
494 | <Transform scale='.5 .5 .5' translation='0 -1 0'> |
495 | <TouchSensor USE='weightselector'/> |
496 | <Switch USE='Weight'/> |
497 | <Transform translation='8 0 0'> |
498 | <Shape> |
499 | <Box size='17 1 .5'/> |
500 | <Appearance> |
501 | <Material transparency='1'/> |
502 | </Appearance> |
503 | </Shape> |
504 | </Transform> |
505 | </Transform> |
506 | </Transform> |
507 |
<!-- ROUTE information for ProjectileTransform node:
[from Mover.value_changed to set_translation
]
[from Mover.transparent to set_scale
]
-->
<Transform DEF='ProjectileTransform' translation='14.25 1.25 0'> |
508 | <Switch USE='projectile'/> |
509 | <Transform rotation='0 1 0 1.57' translation='0 1 0'> |
510 | <Viewpoint description='Projectile Cam' position='0 0 15'/> |
511 | </Transform> |
512 | </Transform> |
513 | <Transform translation='20 2 0'> |
514 | <Transform DEF='Front' rotation='0 1 0 1.57'> |
515 | <Viewpoint description='Fore'/> |
516 | </Transform> |
517 | </Transform> |
518 | <Transform translation='-8 4 0'> |
519 | <Transform rotation='0 1 0 -1.57'> |
520 | <Viewpoint description='Aft'/> |
521 | </Transform> |
522 | </Transform> |
523 |
<!-- ROUTE information for WeightScript node:
[from weightselector.isActive to set_boolean
]
[from CounterWeight to Mover.set_MassCounterWeight
]
[from whichchoice to Weight.whichChoice
]
-->
<Script DEF='WeightScript'> |
524 | <field name='set_boolean' type='SFBool' accessType='inputOnly'/> |
525 | <field name='whichchoice' type='SFInt32' accessType='outputOnly'/> |
526 | <field name='CounterWeight' type='SFFloat' accessType='outputOnly'/> |
<![CDATA[
ecmascript: function initialize () { whichchoice =0; CounterWeight=100; } function set_boolean ( boolean_input, eventTime) { if ( boolean_input== false ) { return; } // ignore the unclick whichchoice = whichchoice +1; if (whichchoice == 0)CounterWeight=50.00; if (whichchoice == 1)CounterWeight=500.00; if (whichchoice == 2)CounterWeight=1000.00; if (whichchoice == 3)CounterWeight=10000.00; if ( whichchoice ==4 ) { whichchoice = 0; CounterWeight=50; } Browser.println ('CounterWeight ='+CounterWeight); }
]]>
|
|
528 | </Script> |
529 |
<!-- ROUTE information for LauncheeScript node:
[from LauncheeChoice.isActive to set_boolean
]
[from ProjectileWeight to Mover.set_MassProjectileWeight
]
[from whichchoice to projectile.whichChoice
]
[from whichchoice to projectilename.whichChoice
]
-->
<Script DEF='LauncheeScript'> |
530 | <field name='set_boolean' type='SFBool' accessType='inputOnly'/> |
531 | <field name='whichchoice' type='SFInt32' accessType='outputOnly'/> |
532 | <field name='ProjectileWeight' type='SFFloat' accessType='outputOnly'/> |
<![CDATA[
ecmascript: function set_boolean (boolean_input, eventTime) { if ( boolean_input== false ) { return; } // ignore unclick whichchoice = whichchoice +1; if (whichchoice == 0)ProjectileWeight=10.00; if (whichchoice == 1)ProjectileWeight=1000.00; if (whichchoice == 2)ProjectileWeight=5; if ( whichchoice ==3 ) { whichchoice = 0; ProjectileWeight=10.00; } Browser.println ('Projectile Weight'+ProjectileWeight); }
]]>
|
|
534 | </Script> |
535 |
<!-- ROUTE information for PigdogMonkScript node:
[from Launch.isActive to set_boolean
]
[from whichchoice to PigdogMonk.whichChoice
]
-->
<Script DEF='PigdogMonkScript'> |
536 | <field name='set_boolean' type='SFBool' accessType='inputOnly'/> |
537 | <field name='whichchoice' type='SFInt32' accessType='outputOnly'/> |
<![CDATA[
ecmascript: function set_boolean (boolean_input, eventTime) { if ( boolean_input== false ) { return; } // ignore unclick whichchoice = whichchoice +1; if ( whichchoice ==2 ) whichchoice = 0; }
]]>
|
|
539 | </Script> |
540 |
<!-- ROUTE information for Mover node:
[from WeightScript.CounterWeight to set_MassCounterWeight
]
[from LauncheeScript.ProjectileWeight to set_MassProjectileWeight
]
[from clock.fraction_changed to set_fraction
]
[from value_changed to ProjectileTransform.set_translation
]
[from transparent to ProjectileTransform.set_scale
]
-->
<Script DEF='Mover'> |
541 | <field name='set_fraction' type='SFFloat' accessType='inputOnly'/> |
542 | <field name='set_MassCounterWeight' type='SFFloat' accessType='inputOnly'/> |
543 | <field name='set_MassProjectileWeight' type='SFFloat' accessType='inputOnly'/> |
544 | <field name='MassCounterWeight' type='SFFloat' value='1' accessType='initializeOnly'/> |
545 | <field name='MassProjectileWeight' type='SFFloat' value='1' accessType='initializeOnly'/> |
546 | <field name='transparent' type='SFVec3f' accessType='outputOnly'/> |
547 | <field name='value_changed' type='SFVec3f' accessType='outputOnly'/> |
<![CDATA[
ecmascript: function initialize () { MassCounterWeight=100; MassProjectileWeight=10; Browser.println ('MassCounterWeight =' + MassCounterWeight); Browser.println ('MassProjectileWeight =' + MassProjectileWeight); } function set_MassProjectileWeight (value, timestamp) { MassProjectileWeight = value; Browser.println ('new MassProjectileWeight =' + MassProjectileWeight); } function set_MassCounterWeight (value2, timestamp) { MassCounterWeight = value2; Browser.println ('new MassCounterWeight =' + MassCounterWeight); } function set_fraction ( fraction, eventTime ) { var TrebuchetHeight=45; var Height =25; x = (2*(MassCounterWeight/MassProjectileWeight)*Height*fraction)-.5*TrebuchetHeight; // start at TrebuchetHeight and keep along z axis (z=zero) y = (MassCounterWeight/MassProjectileWeight)*Height*Math.sin(fraction*3.14); z = 0; transparent = new SFVec3f (1,1,1); if (y <1.5*TrebuchetHeight )if (x<TrebuchetHeight) { x=x-10; y=y+1; transparent = new SFVec3f(.01, .01, .01); } value_changed = new SFVec3f (x, y, z); Browser.println ('x=' + value_changed[0] + ' y=' + value_changed[1] + ' z=' + value_changed[2]); }
]]>
|
|
549 | </Script> |
550 | </Transform> |
551 | </Transform> |
552 |
<!-- ROUTE information for clock node:
[from Launch.touchTime to set_startTime
]
[from fraction_changed to invisiable.set_fraction
]
[from fraction_changed to Mover.set_fraction
]
[from fraction_changed to flingerangles.set_fraction
]
[from fraction_changed to verticalweightpath.set_fraction
]
[from fraction_changed to pinpath.set_fraction
]
-->
<TimeSensor DEF='clock' cycleInterval='10'/> |
553 |
<!-- ROUTE information for verticalweightpath node:
[from clock.fraction_changed to set_fraction
]
[from value_changed to verticalweight.set_translation
]
-->
<PositionInterpolator DEF='verticalweightpath' key='0 .1 .2 .2 .3 .9' keyValue='1.4 1.6 0 1. -8 0 -3.5 -12 0 -3.5 -12 0 1.2 -8 0 1.4 1.6 0'/> |
554 |
<!-- ROUTE information for flingerangles node:
[from clock.fraction_changed to set_fraction
]
[from value_changed to flinger.set_rotation
]
-->
<OrientationInterpolator DEF='flingerangles' key='0 .1 .2 .2 .3 .9' keyValue='0 0 1 .82 0 0 1 -.77 0 0 1 -1.57 0 0 1 -1.57 0 0 1 -.77 0 0 1 .82'/> |
555 |
<!-- ROUTE information for pinpath node:
[from clock.fraction_changed to set_fraction
]
[from value_changed to Pin.set_translation
]
-->
<PositionInterpolator DEF='pinpath' key='0 .01 .95 1' keyValue='0 0 -3 0 0 -10 0 0 -10 0 0 -3'/> |
556 | <OrientationInterpolator DEF='RnSAngels' key='0 .7 1' keyValue='0 0 1 0 0 0 1 -3.14 0 0 1 0'/> |
557 |
<!-- ROUTE information for invisiable node:
[from clock.fraction_changed to set_fraction
]
[from value_changed to projectiletransform.set_scale
]
-->
<PositionInterpolator DEF='invisiable' key='0 .2 .98 .99' keyValue='1 1 1 .01 .01 .01 .01 .01 .01 1 1 1'/> |
558 | < ROUTE fromNode='clock' fromField='fraction_changed' toNode='invisiable' toField='set_fraction'/> |
559 | < ROUTE fromNode='invisiable' fromField='value_changed' toNode='projectiletransform' toField='set_scale'/> |
560 | < ROUTE fromNode='WeightScript' fromField='CounterWeight' toNode='Mover' toField='set_MassCounterWeight'/> |
561 | < ROUTE fromNode='LauncheeScript' fromField='ProjectileWeight' toNode='Mover' toField='set_MassProjectileWeight'/> |
562 | < ROUTE fromNode='clock' fromField='fraction_changed' toNode='Mover' toField='set_fraction'/> |
563 | < ROUTE fromNode='Mover' fromField='value_changed' toNode='ProjectileTransform' toField='set_translation'/> |
564 | < ROUTE fromNode='Mover' fromField='transparent' toNode='ProjectileTransform' toField='set_scale'/> |
565 | < ROUTE fromNode='Launch' fromField='touchTime' toNode='clock' toField='set_startTime'/> |
566 | < ROUTE fromNode='Launch' fromField='isActive' toNode='PigdogMonkScript' toField='set_boolean'/> |
567 | < ROUTE fromNode='Launch' fromField='touchTime' toNode='PigDogSound' toField='set_startTime'/> |
568 | < ROUTE fromNode='Launch' fromField='touchTime' toNode='MonkSound' toField='set_startTime'/> |
569 | < ROUTE fromNode='PigdogMonkScript' fromField='whichchoice' toNode='PigdogMonk' toField='whichChoice'/> |
570 | < ROUTE fromNode='LauncheeChoice' fromField='touchTime' toNode='HolyHandGrenadeSound' toField='set_startTime'/> |
571 | < ROUTE fromNode='LauncheeChoice' fromField='touchTime' toNode='CowSound' toField='set_startTime'/> |
572 | < ROUTE fromNode='LauncheeChoice' fromField='touchTime' toNode='HamsterSound' toField='set_startTime'/> |
573 | < ROUTE fromNode='LauncheeChoice' fromField='isActive' toNode='LauncheeScript' toField='set_boolean'/> |
574 | < ROUTE fromNode='LauncheeScript' fromField='whichchoice' toNode='projectile' toField='whichChoice'/> |
575 | < ROUTE fromNode='LauncheeScript' fromField='whichchoice' toNode='projectilename' toField='whichChoice'/> |
576 | < ROUTE fromNode='weightselector' fromField='isActive' toNode='WeightScript' toField='set_boolean'/> |
577 | < ROUTE fromNode='WeightScript' fromField='whichchoice' toNode='Weight' toField='whichChoice'/> |
578 | < ROUTE fromNode='clock' fromField='fraction_changed' toNode='flingerangles' toField='set_fraction'/> |
579 | < ROUTE fromNode='flingerangles' fromField='value_changed' toNode='flinger' toField='set_rotation'/> |
580 | < ROUTE fromNode='clock' fromField='fraction_changed' toNode='verticalweightpath' toField='set_fraction'/> |
581 | < ROUTE fromNode='verticalweightpath' fromField='value_changed' toNode='verticalweight' toField='set_translation'/> |
582 | < ROUTE fromNode='clock' fromField='fraction_changed' toNode='pinpath' toField='set_fraction'/> |
583 | < ROUTE fromNode='pinpath' fromField='value_changed' toNode='Pin' toField='set_translation'/> |
584 | </Scene> |
585 | </X3D> |
Event Graph ROUTE Table entries with 26 ROUTE connections total, showing X3D event-model relationships for this scene.
Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.
LauncheeChoice
TouchSensor touchTime SFTime |
HolyHandGrenadeSound
AudioClip set_startTime SFTime |
|||||||||
LauncheeChoice
TouchSensor touchTime SFTime |
CowSound
AudioClip set_startTime SFTime |
|||||||||
LauncheeChoice
TouchSensor touchTime SFTime |
HamsterSound
AudioClip set_startTime SFTime |
|||||||||
LauncheeChoice
TouchSensor isActive SFBool |
LauncheeScript
Script set_boolean SFBool |
then
|
LauncheeScript
Script ProjectileWeight SFFloat |
Mover
Script set_MassProjectileWeight SFFloat |
then
|
Mover
Script transparent SFVec3f |
ProjectileTransform
Transform set_scale SFVec3f |
|||
then
|
Mover
Script value_changed SFVec3f |
ProjectileTransform
Transform set_translation SFVec3f |
||||||||
then
|
LauncheeScript
Script whichchoice SFInt32 |
projectile
Switch whichChoice SFInt32 |
||||||||
then
|
LauncheeScript
Script whichchoice SFInt32 |
projectilename
Switch whichChoice SFInt32 |
weightselector
TouchSensor isActive SFBool |
WeightScript
Script set_boolean SFBool |
then
|
WeightScript
Script CounterWeight SFFloat |
Mover
Script set_MassCounterWeight SFFloat |
then
|
Mover
Script transparent SFVec3f |
ProjectileTransform
Transform set_scale SFVec3f |
|||
then
|
Mover
Script value_changed SFVec3f |
ProjectileTransform
Transform set_translation SFVec3f |
||||||||
then
|
WeightScript
Script whichchoice SFInt32 |
Weight
Switch whichChoice SFInt32 |
Mover
Script value_changed SFVec3f |
ProjectileTransform
Transform set_translation SFVec3f |
|
Mover
Script transparent SFVec3f |
ProjectileTransform
Transform set_scale SFVec3f |
WeightScript
Script CounterWeight SFFloat |
Mover
Script set_MassCounterWeight SFFloat |
then
|
Mover
Script transparent SFVec3f |
ProjectileTransform
Transform set_scale SFVec3f |
||
then
|
Mover
Script value_changed SFVec3f |
ProjectileTransform
Transform set_translation SFVec3f |
||||
WeightScript
Script whichchoice SFInt32 |
Weight
Switch whichChoice SFInt32 |
<!--
Color legend: X3D terminology
<X3dNode
DEF='idName' field='value'/>
matches XML terminology
<XmlElement
DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement)
(Grey background inside box: inserted documentation)
(Magenta background: X3D Extensibility)
-->
<!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->