Roll src/third_party/WebKit eac3800:0237a66 (svn 202606:202607)
[chromium-blink-merge.git] / native_client_sdk / src / gonacl_appengine / static / bullet / scenes.js
blob75ff039e352d6defc16d2228a6824c348a448610
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 function randomCubeScene(numObjects, zwidth) {
6 var worldDescription = {};
7 worldDescription.shapes = [];
8 worldDescription.shapes.push({
9 name: 'box',
10 type: 'cube',
11 wx: 1,
12 wy: 1,
13 wz: 1
14 });
15 worldDescription.bodies = [];
16 for ( var i = 0; i < numObjects; i ++ ) {
17 var body = {};
18 body.shape = 'box';
19 body.position = {};
20 body.position.x = Math.random() * 30 - 15;
21 body.position.y = Math.random() * 50 + 10;
22 body.position.z = Math.random() * zwidth - (zwidth/2);
23 body.rotation = {};
24 body.rotation.x = ( Math.random() * 360 ) * Math.PI / 180;
25 body.rotation.y = ( Math.random() * 360 ) * Math.PI / 180;
26 body.rotation.z = ( Math.random() * 360 ) * Math.PI / 180;
27 body.mass = 1.0;
28 body.friction = 0.8;
29 worldDescription.bodies.push(body);
31 return worldDescription;
34 function randomCylinderScene(numObjects, zwidth) {
35 var worldDescription = {};
36 worldDescription.shapes = [];
37 worldDescription.shapes.push({
38 name: 'box',
39 type: 'cylinder',
40 height: 1.0,
41 radius: 0.5
42 });
43 worldDescription.bodies = [];
44 for ( var i = 0; i < numObjects; i ++ ) {
45 var body = {};
46 body.shape = 'box';
47 body.position = {};
48 body.position.x = Math.random() * 30 - 15;
49 body.position.y = Math.random() * 50 + 10;
50 body.position.z = Math.random() * zwidth - (zwidth/2);
51 body.rotation = {};
52 body.rotation.x = ( Math.random() * 360 ) * Math.PI / 180;
53 body.rotation.y = ( Math.random() * 360 ) * Math.PI / 180;
54 body.rotation.z = ( Math.random() * 360 ) * Math.PI / 180;
55 body.mass = 1.0;
56 body.friction = 0.2;
57 worldDescription.bodies.push(body);
59 return worldDescription;
62 function jengaScene(height) {
63 var worldDescription = {};
64 worldDescription.shapes = [];
65 worldDescription.shapes.push({
66 name: 'boxX',
67 type: 'cube',
68 wx: 5,
69 wy: 1,
70 wz: 1
71 });
72 worldDescription.shapes.push({
73 name: 'boxZ',
74 type: 'cube',
75 wx: 1,
76 wy: 1,
77 wz: 5
78 });
79 worldDescription.bodies = [];
80 var baseHeight = 0.55;
81 for (var i = 0; i < height; i++) {
82 var y = i * 1.0 + baseHeight;
83 if (i % 2 == 0) {
84 for (var j = 0; j < 5; j++) {
85 var z = j * 1.0;
86 var x = 2.5;
88 var body = {};
89 body.shape = 'boxX';
90 body.position = {};
91 body.position.x = x;
92 body.position.y = y;
93 body.position.z = z;
94 body.rotation = {};
95 body.rotation.x = 0.0;
96 body.rotation.y = 0.0;
97 body.rotation.z = 0.0;
98 body.mass = 1.0;
99 body.friction = 0.5;
100 worldDescription.bodies.push(body);
102 } else {
103 for (var j = 0; j < 5; j++) {
104 var z = 2.5;
105 var x = j * 1.0;
107 var body = {};
108 body.shape = 'boxZ';
109 body.position = {};
110 body.position.x = x;
111 body.position.y = y;
112 body.position.z = z;
113 body.rotation = {};
114 body.rotation.x = 0.0;
115 body.rotation.y = 0.0;
116 body.rotation.z = 0.0;
117 body.mass = 1.0;
118 body.friction = 0.5;
119 worldDescription.bodies.push(body);
123 return worldDescription;
126 function randomShapeScene(numObjects) {
127 var worldDescription = {};
128 worldDescription.shapes = [];
129 worldDescription.shapes.push({
130 name: 'stick',
131 type: 'cube',
132 wx: 1,
133 wy: 1,
134 wz: 5
136 worldDescription.shapes.push({
137 name: 'tube',
138 type: 'cylinder',
139 radius: 1.0,
140 height: 2.0
142 worldDescription.shapes.push({
143 name: 'sphere',
144 type: 'sphere',
145 radius: 3.0
147 worldDescription.shapes.push({
148 name: 'tri',
149 type: 'convex',
150 points: [
151 [0.0, 0.0, 0.0],
152 [0.0, 1.0, 0.0],
153 [0.0, 0.0, 1.0],
154 [0.0, 0.0, 1.0],
155 [2.0, 5.0, 1.0],
156 [1.0, 1.0, 1.0]
160 var numShapes = 4;
161 worldDescription.bodies = [];
162 for (var i = 0; i < numObjects; i++) {
163 var body = {};
164 if (i % numShapes == 0) {
165 body.shape = 'stick';
166 } else if (i % numShapes == 1) {
167 body.shape = 'tube';
168 } else if (i % numShapes == 2) {
169 body.shape = 'sphere';
170 } else if (i % numShapes == 3) {
171 body.shape = 'tri';
173 body.position = {};
174 body.position.x = Math.random() * 30 - 15;
175 body.position.y = Math.random() * 50 + 1;
176 body.position.z = Math.random() * 10 - 5;
177 body.rotation = {};
178 body.rotation.x = ( Math.random() * 360 ) * Math.PI / 180;
179 body.rotation.y = ( Math.random() * 360 ) * Math.PI / 180;
180 body.rotation.z = ( Math.random() * 360 ) * Math.PI / 180;
181 body.mass = 1.0;
182 body.friction = 0.4;
183 worldDescription.bodies.push(body);
185 return worldDescription;
188 function loadJenga10() {
189 loadWorld(jengaScene(10));
192 function loadJenga20() {
193 loadWorld(jengaScene(20));
196 function loadRandomShapes() {
197 loadWorld(randomShapeScene(100));
200 function load250RandomCubes() {
201 loadWorld(randomCubeScene(250, 10));
204 function load500RandomCylinders() {
205 loadWorld(randomCylinderScene(500, 15));
208 function load1000RandomCubes() {
209 loadWorld(randomCubeScene(1000, 20));
212 function load2000RandomCubes() {
213 loadWorld(randomCubeScene(2000, 20));
216 function loadTextScene(evt) {
217 var txt = evt.target.result;
218 if (txt == undefined) {
219 alert('Could not load file.');
220 return;
222 var sceneDescription;
224 try {
225 sceneDescription = JSON.parse(txt);
226 } catch(e) {
227 alert(e);
228 return;
231 loadWorld(sceneDescription);