├── .gitignore
├── LICENSE
├── README.md
├── assets
├── css
│ ├── game.css
│ └── mobile.css
├── fonts
│ ├── plm65__c-webfont.eot
│ ├── plm65__c-webfont.ttf
│ ├── plm65__c-webfont.woff
│ ├── plm75__c-webfont.eot
│ ├── plm75__c-webfont.ttf
│ └── plm75__c-webfont.woff
├── img
│ ├── 0.png
│ ├── 1.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ ├── 18.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── 7.png
│ ├── 8.png
│ ├── 9.png
│ ├── DT.png
│ ├── avers.png
│ ├── background5.jpg
│ ├── chromeexperiments.png
│ ├── doge.png
│ ├── fav.gif
│ ├── fav.png
│ ├── fav2.gif
│ ├── fbb.png
│ ├── fbw.png
│ ├── filters.svg
│ ├── gpb.png
│ ├── gpw.png
│ ├── head.png
│ ├── head0.png
│ ├── hotdot.png
│ ├── left.png
│ ├── logo.svg
│ ├── mobilereset.jpg
│ ├── nogame.jpg
│ ├── poster.jpg
│ ├── right.png
│ ├── sphere.png
│ ├── twb.png
│ ├── tww.png
│ ├── vcheck.png
│ ├── vkb.png
│ └── vkw.png
├── index.html
├── js
│ ├── DT.min.js
│ ├── DT.min.map
│ ├── mobile.min.js
│ ├── mobile.min.map
│ ├── myYepnope.min.js
│ ├── myYepnope.min.map
│ └── vendor
│ │ ├── jquery.min.js
│ │ ├── jquery.min.map
│ │ ├── three.min.js
│ │ └── yepnope.1.5.4-min.js
├── m
│ └── index.html
├── objects
│ ├── bonusE1.obj
│ ├── bonusE2.obj
│ ├── bonusH1.obj
│ ├── bonusH2.obj
│ ├── bonusI.obj
│ └── shield.obj
└── sounds
│ ├── catchBonus0.mp3
│ ├── catchBonus0.ogg
│ ├── catchBonus1.mp3
│ ├── catchBonus1.ogg
│ ├── catchBonus2.mp3
│ ├── catchBonus2.ogg
│ ├── coin.mp3
│ ├── coin.ogg
│ ├── fun.mp3
│ ├── fun.ogg
│ ├── gameover.mp3
│ ├── gameover.ogg
│ ├── intro.mp3
│ ├── intro.ogg
│ ├── invulner.mp3
│ ├── invulner.ogg
│ ├── loop.mp3
│ ├── main.mp3
│ ├── main.ogg
│ ├── muv8.mp3
│ ├── muv8.ogg
│ ├── pause.mp3
│ ├── pause.ogg
│ ├── stoneDestroy.mp3
│ ├── stoneDestroy.ogg
│ ├── stoneMiss.mp3
│ └── stoneMiss.ogg
├── assets_source
├── Gruntfile.js
├── js
│ ├── DT.js
│ ├── DT.js.map
│ ├── init.js
│ ├── mobile.js
│ ├── myYepnope.js
│ └── vendor
│ │ ├── BadTVShader.js
│ │ ├── BufferLoader.js
│ │ ├── CopyShader.js
│ │ ├── CurveExtras.js
│ │ ├── Detector.js
│ │ ├── EffectComposer.js
│ │ ├── MaskPass.js
│ │ ├── OBJLoader.js
│ │ ├── RenderPass.js
│ │ ├── ShaderPass.js
│ │ ├── Stats.js
│ │ ├── THREEx.FullScreen.js
│ │ ├── favico-0.3.4.min.js
│ │ ├── fireworks-bundle.js
│ │ ├── headtrackr.min.js
│ │ ├── jquery.min.js
│ │ ├── jquery.qrcode.min.js
│ │ ├── three.min.js
│ │ ├── threex.rendererstats.js
│ │ ├── threex.windowresize.js
│ │ └── yepnope.1.5.4-min.js
├── package.json
└── scss
│ ├── game.scss
│ └── mobile.scss
├── package.json
└── server.js
/.gitignore:
--------------------------------------------------------------------------------
1 | ideas
2 | node_modules
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 deemidroll
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Digital Trip
2 | ============
3 |
4 | Play static version
5 |
6 | Server-side features (mobile controls, dogecoins) are not available in static version. Full version is on master branch.
7 |
8 | Description
9 | -----------
10 |
11 | A story about the latest technologies through a short browser game. It's a fully 3d, based on WebGL, with camera controls, bonuses & cryptocoins. Fancy soundtrack enhances the experience. So the purpose of this non-profit open source project is industry promotion. Enjoy!
12 |
13 | Tecnology
14 | ---------
15 | - WebGL (a JavaScript API for rendering interactive 3D and 2D graphics without the use of plug-ins)
16 | - THREE.js (JavaScript Library which makes WebGL simpler)
17 |
18 | - Web Audio API (JavaScript API which gives full control over sound)
19 |
20 | - WebSocket (a protocol providing full-duplex communications channels over a single TCP connection)
21 | - socket.io (a JavaScript library for realtime web applications)
22 |
23 | - getUserMedia (a JavaScript API, which permits web applications access the user’s webcam and microphone)
24 | - headtrackr.js (a JavaScript library for real-time face tracking and head tracking, tracking the position of a users head in relation to the computer screen, via a web camera and the webRTC/getUserMedia standard)
25 |
26 | - deviceOrientation (an event that fired when fresh data is available from an orientation sensor about the current orientation of the device as compared to the Earth coordinate frame)
27 |
28 | - Dogecoin (an open source peer-to-peer digital currency, favored by Shiba Inus worldwide.)
29 |
30 |
31 | Made in Hot Dot, presentation and credits.
32 | Licensed under MIT.
33 |
--------------------------------------------------------------------------------
/assets/css/game.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'plumbcbold';
3 | src: url('../fonts/plm75__c-webfont.eot');
4 | src: url('../fonts/plm75__c-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/plm75__c-webfont.woff') format('woff'), url('../fonts/plm75__c-webfont.ttf') format('truetype');
5 | font-weight: normal;
6 | font-style: normal; }
7 |
8 | @font-face {
9 | font-family: 'plumbmediumcmediumc';
10 | src: url('../fonts/plm65__c-webfont.eot');
11 | src: url('../fonts/plm65__c-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/plm65__c-webfont.woff') format('woff'), url('../fonts/plm65__c-webfont.ttf') format('truetype');
12 | font-weight: normal;
13 | font-style: normal; }
14 |
15 | body {
16 | font-family: "plumbmediumcmediumc", "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
17 | font-weight: 300;
18 | text-transform: uppercase;
19 | margin: 0px;
20 | background-color: #000000;
21 | overflow: hidden;
22 | color: #eee;
23 | text-align: center;
24 | -webkit-font-smoothing: antialiased;
25 | -moz-osx-font-smoothing: grayscale; }
26 |
27 | .score, .bonus {
28 | position: absolute; }
29 |
30 | .hit, .game_over, .pause, .share, .loader, .choose_control, #nogame, .mobile_choosen, .webcam_choosen {
31 | width: 100%;
32 | height: 100%;
33 | display: none;
34 | position: absolute;
35 | left: 0;
36 | top: 0;
37 | text-align: center; }
38 |
39 | .mobile_choosen, .webcam_choosen {
40 | /*display: table;*/
41 | background-color: #000;
42 | z-index: 4; }
43 |
44 | .webcamcontrol {
45 | width: 100%;
46 | height: 100%;
47 | position: absolute;
48 | left: 0;
49 | top: 0;
50 | text-align: center; }
51 |
52 | #compare, #overlay {
53 | z-index: 4;
54 | display: none;
55 | position: absolute;
56 | left: 50%;
57 | top: 10px;
58 | margin-left: -61px;
59 | border: 2px solid white; }
60 |
61 | #overlay {
62 | z-index: 5; }
63 |
64 | .hit {
65 | /*display: table;*/
66 | background-color: #BE463C; }
67 |
68 | .game_over {
69 | /*display: table;*/
70 | z-index: 3; }
71 |
72 | .choose_control {
73 | display: none;
74 | background-color: #000;
75 | z-index: 1; }
76 |
77 | .change_controls {
78 | width: 250px;
79 | height: 36px;
80 | background-color: #fd5439;
81 | position: relative;
82 | left: 50%;
83 | margin-left: -125px;
84 | padding-top: 15px;
85 | font-size: 18px;
86 | letter-spacing: 0.1em;
87 | cursor: pointer;
88 | z-index: 10;
89 | -webkit-transition: background-color 0.4s ease-out 0;
90 | -moz-transition: background-color 0.4s ease-out 0;
91 | -o-transition: background-color 0.4s ease-out 0;
92 | transition: background-color 0.4s ease-out 0; }
93 | .change_controls:hover {
94 | color: #000;
95 | background-color: #fff;
96 | -webkit-transition: background-color 0.4s ease-out 0;
97 | -moz-transition: background-color 0.4s ease-out 0;
98 | -o-transition: background-color 0.4s ease-out 0;
99 | transition: background-color 0.4s ease-out 0; }
100 |
101 | .social {
102 | width: 280px;
103 | height: 52px;
104 | position: relative;
105 | left: 50%;
106 | margin-left: -140px; }
107 | .social > a:first-child div {
108 | background: #4e68b2 url(../img/fbw.png) 50% 50% no-repeat; }
109 | .social > a:first-child div:hover {
110 | background-image: url(../img/fbb.png); }
111 | .social > a:nth-child(2) div {
112 | background: #4195de url(../img/tww.png) 50% 50% no-repeat; }
113 | .social > a:nth-child(2) div:hover {
114 | background-image: url(../img/twb.png); }
115 | .social > a:nth-child(3) div {
116 | background: #38658f url(../img/vkw.png) 50% 50% no-repeat; }
117 | .social > a:nth-child(3) div:hover {
118 | background-image: url(../img/vkb.png); }
119 | .social > a:last-child div {
120 | margin: 0;
121 | background: #ce2f1c url(../img/gpw.png) 50% 50% no-repeat; }
122 | .social > a:last-child div:hover {
123 | background-image: url(../img/gpb.png); }
124 | .social > a div {
125 | width: 52px;
126 | height: 100%;
127 | float: left;
128 | margin-right: 24px;
129 | cursor: pointer;
130 | -webkit-transition: background-color 0.4s ease-out 0;
131 | -moz-transition: background-color 0.4s ease-out 0;
132 | -o-transition: background-color 0.4s ease-out 0;
133 | transition: background-color 0.4s ease-out 0; }
134 | .social > a div:hover {
135 | color: #000;
136 | background-color: #fff;
137 | -webkit-transition: background-color 0.4s ease-out 0;
138 | -moz-transition: background-color 0.4s ease-out 0;
139 | -o-transition: background-color 0.4s ease-out 0;
140 | transition: background-color 0.4s ease-out 0; }
141 |
142 | .pause_control {
143 | width: 280px;
144 | height: 37px;
145 | margin-left: -140px;
146 | background-color: #222;
147 | color: #fff;
148 | -webkit-transition: background-color 0.4s ease-out 0;
149 | -moz-transition: background-color 0.4s ease-out 0;
150 | -o-transition: background-color 0.4s ease-out 0;
151 | transition: background-color 0.4s ease-out 0; }
152 | .pause_control:hover {
153 | color: #000;
154 | background-color: #fff;
155 | -webkit-transition: background-color 0.4s ease-out 0;
156 | -moz-transition: background-color 0.4s ease-out 0;
157 | -o-transition: background-color 0.4s ease-out 0;
158 | transition: background-color 0.4s ease-out 0; }
159 |
160 | .gameover_control {
161 | background-color: #272727;
162 | display: inline-block;
163 | position: static;
164 | margin-right: 4px;
165 | margin-top: 50px;
166 | margin-left: 0;
167 | -webkit-transition: background-color 0.4s ease-out 0;
168 | -moz-transition: background-color 0.4s ease-out 0;
169 | -o-transition: background-color 0.4s ease-out 0;
170 | transition: background-color 0.4s ease-out 0; }
171 | .gameover_control:hover {
172 | color: #000;
173 | background-color: #fff;
174 | -webkit-transition: background-color 0.4s ease-out 0;
175 | -moz-transition: background-color 0.4s ease-out 0;
176 | -o-transition: background-color 0.4s ease-out 0;
177 | transition: background-color 0.4s ease-out 0; }
178 |
179 | .resume {
180 | width: 280px;
181 | height: 37px;
182 | background-color: #fd5439;
183 | color: #000000;
184 | position: relative;
185 | left: 50%;
186 | margin-left: -140px;
187 | padding-top: 15px;
188 | font-size: 18px;
189 | letter-spacing: 0.1em;
190 | cursor: pointer;
191 | z-index: 10;
192 | margin-bottom: 7px;
193 | margin-top: 38px;
194 | -webkit-transition: background-color 0.4s ease-out 0;
195 | -moz-transition: background-color 0.4s ease-out 0;
196 | -o-transition: background-color 0.4s ease-out 0;
197 | transition: background-color 0.4s ease-out 0; }
198 | .resume:hover {
199 | color: #000;
200 | background-color: #fff;
201 | -webkit-transition: background-color 0.4s ease-out 0;
202 | -moz-transition: background-color 0.4s ease-out 0;
203 | -o-transition: background-color 0.4s ease-out 0;
204 | transition: background-color 0.4s ease-out 0; }
205 |
206 | .back {
207 | position: absolute;
208 | left: 0;
209 | top: 0;
210 | width: 100%;
211 | height: 100%;
212 | z-index: -1; }
213 |
214 | .restart {
215 | width: 188px;
216 | height: 36px;
217 | background-color: #272727;
218 | padding-top: 15px;
219 | font-size: 18px;
220 | letter-spacing: 0.1em;
221 | cursor: pointer;
222 | z-index: 10;
223 | display: inline-block;
224 | -webkit-transition: background-color 0.4s ease-out 0;
225 | -moz-transition: background-color 0.4s ease-out 0;
226 | -o-transition: background-color 0.4s ease-out 0;
227 | transition: background-color 0.4s ease-out 0; }
228 | .restart:hover {
229 | color: #000;
230 | background-color: #fff;
231 | -webkit-transition: background-color 0.4s ease-out 0;
232 | -moz-transition: background-color 0.4s ease-out 0;
233 | -o-transition: background-color 0.4s ease-out 0;
234 | transition: background-color 0.4s ease-out 0; }
235 |
236 | .bigfont {
237 | font-size: 3em; }
238 |
239 | .block {
240 | display: block; }
241 |
242 | .gameTimer {
243 | position: absolute;
244 | opacity: 0.5;
245 | left: 170px;
246 | top: 5px;
247 | font-size: 32px;
248 | z-index: 4; }
249 |
250 | #loader {
251 | z-index: 5; }
252 |
253 | #nogame {
254 | display: none;
255 | z-index: 4;
256 | background-color: #fafafa;
257 | background: #fafafa url(../img/nogame.jpg) 0 0 no-repeat;
258 | background-size: cover;
259 | overflow: hidden; }
260 | #nogame > .cont > img {
261 | position: absolute;
262 | top: 50%;
263 | left: 50%;
264 | margin-left: -765px;
265 | margin-top: -498px;
266 | z-index: -1; }
267 | #nogame > .cont > .nogame1 {
268 | color: #fafafa;
269 | font-size: 60px;
270 | letter-spacing: 0.08em; }
271 | #nogame > .cont > .nogame2 {
272 | padding-top: 200px;
273 | color: #fafafa;
274 | font-size: 18px;
275 | letter-spacing: 0.1em; }
276 | #nogame > .cont > .nogame2 > a {
277 | color: #fd5439;
278 | text-decoration: none; }
279 | #nogame > .cont > .nogame2 > a:hover {
280 | text-decoration: underline; }
281 |
282 |
283 | .loader span {
284 | color: #fff;
285 | font-size: 5em;
286 | z-index: 3; }
287 |
288 | #interface {
289 | display: none; }
290 |
291 | #footer {
292 | display: none;
293 | position: absolute;
294 | bottom: 0;
295 | left: 0;
296 | background-color: rgba(0, 0, 0, 0.5);
297 | width: 100%;
298 | height: 84px;
299 | z-index: 5; }
300 | #footer > span {
301 | font-size: 12px;
302 | font-family: 'plumbcbold';
303 | padding-top: 35px;
304 | padding-left: 35px;
305 | padding-right: 9px; }
306 |
307 | .loadImg {
308 | position: absolute;
309 | top: 50%;
310 | left: 50%;
311 | margin-left: -530px;
312 | margin-top: -350px; }
313 |
314 | .gameover_bg {
315 | position: absolute;
316 | top: 50%;
317 | left: 50%;
318 | margin-left: -765px;
319 | margin-top: -498px;
320 | z-index: -1; }
321 |
322 | .coins {
323 | margin-bottom: 100px; }
324 |
325 | .gameover_message {
326 | color: #fff;
327 | font-size: 40px;
328 | letter-spacing: 0.1em;
329 | line-height: 53px;
330 | margin-bottom: 20px; }
331 |
332 | #gameovermessage {
333 | color: #fff;
334 | font-size: 20px;
335 | letter-spacing: 0.1em;
336 | line-height: 53px;
337 | margin-top: 20px;
338 | position: absolute;
339 | text-align: center;
340 | width: 100%; }
341 |
342 | .left {
343 | float: left;
344 | letter-spacing: 0.29em; }
345 |
346 | .right {
347 | float: right;
348 | letter-spacing: 0.01em; }
349 | .right > a, .right span {
350 | margin-right: 16px; }
351 |
352 | .hotdot {
353 | display: inline-block;
354 | vertical-align: middle; }
355 |
356 | .pause, .share {
357 | /*display: table;*/
358 | background-color: rgba(0, 0, 0, 0.5);
359 | z-index: 4; }
360 |
361 | .menu {
362 | display: inline-block;
363 | width: 300px;
364 | height: 400px;
365 | border: 1px #ffffff solid;
366 | background-color: #363636; }
367 |
368 | .menu hr {
369 | /*color: #595959;*/
370 | /*background: #595959;*/
371 | width: 75%;
372 | /*height: 1px;*/ }
373 |
374 | .menu span {
375 | margin-bottom: 15px;
376 | margin-top: 15px;
377 | font-size: 1.25em; }
378 |
379 | .cont {
380 | display: table-cell;
381 | vertical-align: middle; }
382 |
383 | .error {
384 | font-size: 5em; }
385 |
386 | .helthbar, .score, .bonus {
387 | bottom: 30px; }
388 |
389 | .helthbar {
390 | border: 1px #eee solid;
391 | background-color: #000;
392 | width: 30%;
393 | height: 20px;
394 | left: 35%;
395 | padding: 1px; }
396 |
397 | .helth {
398 | width: 100%;
399 | height: 100%;
400 | background-color: #BE463C; }
401 |
402 | .music_button, .menu_button, .fs_button {
403 | width: 40px;
404 | height: 40px;
405 | border: 1px #ffffff solid;
406 | font-size: 32px;
407 | text-align: center;
408 | cursor: pointer; }
409 |
410 | .fs_button {
411 | z-index: 2;
412 | right: 120px;
413 | top: 30px; }
414 |
415 | .music_button {
416 | z-index: 2;
417 | right: 75px;
418 | top: 30px; }
419 |
420 | .menu_button {
421 | z-index: 0;
422 | right: 30px;
423 | top: 30px; }
424 |
425 | .bonus {
426 | height: 30px;
427 | right: 30px;
428 | font-size: 2em; }
429 |
430 | .score {
431 | width: 207px;
432 | height: 30px;
433 | left: 0;
434 | font-size: 40px;
435 | bottom: 125px;
436 | text-align: right;
437 | color: #fff; }
438 | .score > span {
439 | vertical-align: middle; }
440 | .score > img {
441 | display: inline-block;
442 | vertical-align: middle;
443 | margin-left: 5px; }
444 |
445 | .color {
446 | width: 100px;
447 | height: 100px;
448 | background-color: #fff;
449 | position: absolute;
450 | top: 50%;
451 | right: 0; }
452 |
453 | a {
454 | color: #fd5439; }
455 |
456 | a:hover {
457 | color: #fff; }
458 |
459 | .button:hover {
460 | cursor: pointer; }
461 |
462 | #loader {
463 | display: none; }
464 |
465 | #webgl-error-message {
466 | z-index: 5; }
467 |
468 | #qrcode canvas {
469 | border: 5px solid white; }
470 |
471 | #qrcode {
472 | margin-top: 10px;
473 | margin-bottom: 20px; }
474 |
475 | .logo {
476 | margin-top: 50px;
477 | margin-bottom: 10px;
478 | height: 130px;
479 | overflow: hidden;
480 | z-index: 2;
481 | width: 100%; }
482 | .logo > img {
483 | height: 110px; }
484 |
485 | .byhotdot {
486 | margin-top: -17px;
487 | font-size: 12px;
488 | letter-spacing: 0.15em; }
489 |
490 | .message {
491 | color: #fd5439;
492 | font-size: 30px;
493 | letter-spacing: 0.15em;
494 | margin-top: 153px; }
495 |
496 | .mobile_message {
497 | font-size: 30px;
498 | line-height: 1.5em;
499 | letter-spacing: 0.1em; }
500 |
501 | .webcam_message {
502 | font-size: 40px;
503 | line-height: 1.2em;
504 | letter-spacing: 0.1em; }
505 |
506 | .turn_to_start {
507 | position: relative;
508 | width: 100%;
509 | height: 260px;
510 | font-size: 40px; }
511 | .turn_to_start > span {
512 | position: absolute;
513 | bottom: 50px;
514 | left: 0;
515 | width: 100%; }
516 |
517 | #head {
518 | position: absolute;
519 | top: 50px;
520 | left: 50%;
521 | margin-left: -72px;
522 | display: none; }
523 |
524 | #left_v_check {
525 | position: absolute;
526 | bottom: 50px;
527 | left: 100px;
528 | display: none; }
529 |
530 | #right_v_check {
531 | position: absolute;
532 | bottom: 50px;
533 | right: 100px;
534 | display: none; }
535 |
536 | .mobile_message span {
537 | text-transform: lowercase; }
538 |
539 | .controls {
540 | font-size: 16px;
541 | letter-spacing: 0.2em;
542 | margin-top: -10px; }
543 | .controls div:hover .rect {
544 | background-color: #fff;
545 | -webkit-transition: background-color 0.4s ease-out 0;
546 | -moz-transition: background-color 0.4s ease-out 0;
547 | -o-transition: background-color 0.4s ease-out 0;
548 | transition: background-color 0.4s ease-out 0; }
549 | .controls div:hover .rect .quad {
550 | background-color: #000;
551 | -webkit-transition: background-color 0.4s ease-out 0;
552 | -moz-transition: background-color 0.4s ease-out 0;
553 | -o-transition: background-color 0.4s ease-out 0;
554 | transition: background-color 0.4s ease-out 0; }
555 | .controls .rect {
556 | position: relative;
557 | background-color: #fd5439;
558 | -webkit-transition: background-color 0.4s ease-out 0;
559 | -moz-transition: background-color 0.4s ease-out 0;
560 | -o-transition: background-color 0.4s ease-out 0;
561 | transition: background-color 0.4s ease-out 0; }
562 | .controls .rect > .quad {
563 | background-color: #fff;
564 | -webkit-transition: background-color 0.4s ease-out 0;
565 | -moz-transition: background-color 0.4s ease-out 0;
566 | -o-transition: background-color 0.4s ease-out 0;
567 | transition: background-color 0.4s ease-out 0;
568 | position: absolute;
569 | width: 7px;
570 | height: 7px; }
571 | .controls > .choose_wasd .rect {
572 | width: 112px;
573 | height: 46px;
574 | margin: 52px auto; }
575 | .controls > .choose_wasd .rect .quad1 {
576 | bottom: 17px;
577 | right: 38px; }
578 | .controls > .choose_wasd .rect .quad2 {
579 | bottom: 8px;
580 | right: 47px; }
581 | .controls > .choose_wasd .rect .quad3 {
582 | bottom: 8px;
583 | right: 38px; }
584 | .controls > .choose_wasd .rect .quad4 {
585 | bottom: 8px;
586 | right: 29px; }
587 | .controls > .choose_mobile .rect {
588 | margin: 34px auto;
589 | width: 51px;
590 | height: 82px; }
591 | .controls > .choose_mobile .rect .quad {
592 | bottom: 7px;
593 | right: 21px;
594 | width: 8px;
595 | height: 8px; }
596 | .controls > .choose_webcam .rect {
597 | margin: 43px auto;
598 | width: 89px;
599 | height: 63px; }
600 | .controls > .choose_webcam .rect .quad {
601 | top: 8px;
602 | right: 40px;
603 | width: 8px;
604 | height: 8px; }
605 | .controls > div {
606 | display: inline-block;
607 | position: relative;
608 | width: 125px;
609 | height: 150px; }
610 | .controls > div > span {
611 | position: absolute;
612 | bottom: 0;
613 | left: 0;
614 | width: 100%; }
615 |
616 | .red {
617 | color: #fd5439; }
618 |
619 | .logoLoadControlContainer {
620 | position: absolute;
621 | left: 0;
622 | top: 0;
623 | width: 100%;
624 | height: 100%;
625 | z-index: 1; }
626 |
627 | .buttons {
628 | display: none; }
629 |
630 | #dogecoin {
631 | border: 2px solid #fff;
632 | color: #fff;
633 | width: 226px;
634 | margin-right: 5px;
635 | height: 47px;
636 | background-color: transparent;
637 | font-size: 19px;
638 | font-family: 'plumbmediumcmediumc';
639 | -webkit-font-smoothing: antialiased;
640 | -moz-osx-font-smoothing: grayscale;
641 | padding-left: 18px;
642 | letter-spacing: 0.05em; }
643 |
644 | #wow {
645 | background-color: #fd5439;
646 | border: none;
647 | color: #fff;
648 | height: 52px;
649 | font-size: 24px;
650 | width: 94px;
651 | font-family: 'plumbmediumcmediumc';
652 | -webkit-font-smoothing: antialiased;
653 | -moz-osx-font-smoothing: grayscale;
654 | cursor: pointer;
655 | -webkit-transition: background-color 0.4s ease-out 0;
656 | -moz-transition: background-color 0.4s ease-out 0;
657 | -o-transition: background-color 0.4s ease-out 0;
658 | transition: background-color 0.4s ease-out 0; }
659 | #wow:hover {
660 | color: #000;
661 | background-color: #fff;
662 | -webkit-transition: background-color 0.4s ease-out 0;
663 | -moz-transition: background-color 0.4s ease-out 0;
664 | -o-transition: background-color 0.4s ease-out 0;
665 | transition: background-color 0.4s ease-out 0; }
666 |
667 | .show-table {
668 | display: table; }
669 |
670 | a.chromeexperiments {
671 | display: block;
672 | position: absolute;
673 | bottom: 75px;
674 | left: 35px;
675 | margin: 0;
676 | padding: 0; }
677 | a.chromeexperiments img {
678 | margin: 0;
679 | padding: 0; }
680 |
--------------------------------------------------------------------------------
/assets/css/mobile.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'plumbmediumcmediumc';
3 | src: url('../fonts/plm65__c-webfont.eot');
4 | src: url('../fonts/plm65__c-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/plm65__c-webfont.woff') format('woff'), url('../fonts/plm65__c-webfont.ttf') format('truetype');
5 | font-weight: normal;
6 | font-style: normal; }
7 |
8 | body, html {
9 | padding: 0;
10 | margin: 0;
11 | color: #eee;
12 | width: 100%;
13 | height: 100%;
14 | font-family: 'plumbmediumcmediumc', "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
15 | font-weight: 300;
16 | margin: 0px;
17 | background-color: #000000;
18 | overflow: hidden;
19 | text-align: center;
20 | text-transform: uppercase; }
21 |
22 | #controller {
23 | width: 100%;
24 | height: 100%;
25 | background-color: #000;
26 | display: table; }
27 |
28 | #turnLeft {
29 | position: absolute;
30 | bottom: 0;
31 | left: 0;
32 | width: 33%;
33 | height: 100%;
34 | background-color: #000;
35 | z-index: 1; }
36 | #turnLeft > img {
37 | position: absolute;
38 | left: 10%;
39 | top: 50%;
40 | margin-top: -50px;
41 | height: 100px; }
42 |
43 | #turnRight {
44 | position: absolute;
45 | bottom: 0;
46 | right: 0;
47 | width: 33%;
48 | height: 100%;
49 | background-color: #000;
50 | z-index: 1; }
51 | #turnRight > img {
52 | position: absolute;
53 | right: 10%;
54 | top: 50%;
55 | margin-top: -50px;
56 | height: 100px; }
57 |
58 | #sphere {
59 | position: absolute;
60 | bottom: 0;
61 | right: 33%;
62 | width: 33%;
63 | height: 100%;
64 | background-color: #000;
65 | z-index: 2; }
66 | #sphere > img {
67 | position: absolute;
68 | left: 50%;
69 | top: 50%;
70 | margin-left: -70px;
71 | margin-top: -70px;
72 | height: 140px; }
73 |
74 | #socket, #wheel, #preparetostart, #gameover {
75 | width: 100%;
76 | height: 100%;
77 | display: table-cell;
78 | vertical-align: middle;
79 | text-align: center;
80 | overflow: hidden;
81 | display: none; }
82 |
83 | #socket {
84 | z-index: 2;
85 | display: table-cell; }
86 |
87 | #status, #status_fail {
88 | width: 100%;
89 | text-align: center;
90 | position: absolute;
91 | z-index: 3; }
92 |
93 | #status_fail {
94 | top: 10%;
95 | color: red; }
96 |
97 | #preparetostart {
98 | display: none; }
99 | #preparetostart > #start > .push {
100 | position: absolute;
101 | width: 100%;
102 | top: 50%;
103 | font-size: 25px;
104 | margin-top: -0.5em;
105 | text-align: center;
106 | z-index: 1;
107 | color: rgba(255, 255, 255, 0.5); }
108 |
109 | #wheel {
110 | display: none;
111 | z-index: 1;
112 | background-color: #000; }
113 |
114 | #hotdot {
115 | position: absolute;
116 | left: 50%;
117 | margin-left: -10px;
118 | bottom: 20px; }
119 |
120 | #gameCodeInput {
121 | width: 210px;
122 | height: 40px;
123 | background-color: #000;
124 | border: 2px solid #69ffd3;
125 | color: #FFF;
126 | padding-left: 10px;
127 | font-size: 14px;
128 | font-family: 'plumbmediumcmediumc';
129 | letter-spacing: 0.15em;
130 | vertical-align: middle;
131 | text-transform: uppercase;
132 | border-radius: 0;
133 | box-sizing: border-box;
134 | margin: 10px 6px; }
135 |
136 | #connect {
137 | height: 40px;
138 | width: 100px;
139 | background-color: #fd5439;
140 | color: #fff;
141 | font-size: 14px;
142 | font-family: 'plumbmediumcmediumc';
143 | letter-spacing: 0.15em;
144 | border: none;
145 | vertical-align: middle;
146 | text-transform: uppercase;
147 | margin: 10px 6px; }
148 |
149 | #start {
150 | position: absolute;
151 | top: 0;
152 | left: 0;
153 | width: 100%;
154 | height: 100%;
155 | background-color: #000;
156 | z-index: 1; }
157 | #start > img {
158 | position: absolute;
159 | left: 50%;
160 | top: 50%;
161 | margin-left: -70px;
162 | margin-top: -70px;
163 | height: 140px; }
164 |
165 | #gameover {
166 | display: none;
167 | position: absolute;
168 | top: 0;
169 | left: 0;
170 | background-color: #000;
171 | background: #000 url(../img/mobilereset.jpg) 0 0 no-repeat;
172 | width: 100%;
173 | height: 100%;
174 | z-index: 1; }
175 | #gameover > #restart {
176 | position: absolute;
177 | left: 50%;
178 | top: 50%;
179 | width: 190px;
180 | height: 62px;
181 | margin-left: -95px;
182 | margin-top: -31px;
183 | background-color: #000;
184 | border: none;
185 | border-radius: 0;
186 | color: #fff;
187 | font-size: 26px;
188 | font-family: 'plumbmediumcmediumc';
189 | letter-spacing: 0.15em;
190 | text-transform: uppercase; }
191 |
--------------------------------------------------------------------------------
/assets/fonts/plm65__c-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/fonts/plm65__c-webfont.eot
--------------------------------------------------------------------------------
/assets/fonts/plm65__c-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/fonts/plm65__c-webfont.ttf
--------------------------------------------------------------------------------
/assets/fonts/plm65__c-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/fonts/plm65__c-webfont.woff
--------------------------------------------------------------------------------
/assets/fonts/plm75__c-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/fonts/plm75__c-webfont.eot
--------------------------------------------------------------------------------
/assets/fonts/plm75__c-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/fonts/plm75__c-webfont.ttf
--------------------------------------------------------------------------------
/assets/fonts/plm75__c-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/fonts/plm75__c-webfont.woff
--------------------------------------------------------------------------------
/assets/img/0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/0.png
--------------------------------------------------------------------------------
/assets/img/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/1.png
--------------------------------------------------------------------------------
/assets/img/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/10.png
--------------------------------------------------------------------------------
/assets/img/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/11.png
--------------------------------------------------------------------------------
/assets/img/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/12.png
--------------------------------------------------------------------------------
/assets/img/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/13.png
--------------------------------------------------------------------------------
/assets/img/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/14.png
--------------------------------------------------------------------------------
/assets/img/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/15.png
--------------------------------------------------------------------------------
/assets/img/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/16.png
--------------------------------------------------------------------------------
/assets/img/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/17.png
--------------------------------------------------------------------------------
/assets/img/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/18.png
--------------------------------------------------------------------------------
/assets/img/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/2.png
--------------------------------------------------------------------------------
/assets/img/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/3.png
--------------------------------------------------------------------------------
/assets/img/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/4.png
--------------------------------------------------------------------------------
/assets/img/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/5.png
--------------------------------------------------------------------------------
/assets/img/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/6.png
--------------------------------------------------------------------------------
/assets/img/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/7.png
--------------------------------------------------------------------------------
/assets/img/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/8.png
--------------------------------------------------------------------------------
/assets/img/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/9.png
--------------------------------------------------------------------------------
/assets/img/DT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/DT.png
--------------------------------------------------------------------------------
/assets/img/avers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/avers.png
--------------------------------------------------------------------------------
/assets/img/background5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/background5.jpg
--------------------------------------------------------------------------------
/assets/img/chromeexperiments.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/chromeexperiments.png
--------------------------------------------------------------------------------
/assets/img/doge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/doge.png
--------------------------------------------------------------------------------
/assets/img/fav.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/fav.gif
--------------------------------------------------------------------------------
/assets/img/fav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/fav.png
--------------------------------------------------------------------------------
/assets/img/fav2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/fav2.gif
--------------------------------------------------------------------------------
/assets/img/fbb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/fbb.png
--------------------------------------------------------------------------------
/assets/img/fbw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/fbw.png
--------------------------------------------------------------------------------
/assets/img/filters.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/img/gpb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/gpb.png
--------------------------------------------------------------------------------
/assets/img/gpw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/gpw.png
--------------------------------------------------------------------------------
/assets/img/head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/head.png
--------------------------------------------------------------------------------
/assets/img/head0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/head0.png
--------------------------------------------------------------------------------
/assets/img/hotdot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/hotdot.png
--------------------------------------------------------------------------------
/assets/img/left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/left.png
--------------------------------------------------------------------------------
/assets/img/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
31 |
--------------------------------------------------------------------------------
/assets/img/mobilereset.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/mobilereset.jpg
--------------------------------------------------------------------------------
/assets/img/nogame.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/nogame.jpg
--------------------------------------------------------------------------------
/assets/img/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/poster.jpg
--------------------------------------------------------------------------------
/assets/img/right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/right.png
--------------------------------------------------------------------------------
/assets/img/sphere.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/sphere.png
--------------------------------------------------------------------------------
/assets/img/twb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/twb.png
--------------------------------------------------------------------------------
/assets/img/tww.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/tww.png
--------------------------------------------------------------------------------
/assets/img/vcheck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/vcheck.png
--------------------------------------------------------------------------------
/assets/img/vkb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/vkb.png
--------------------------------------------------------------------------------
/assets/img/vkw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/img/vkw.png
--------------------------------------------------------------------------------
/assets/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Digital Trip
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
0
24 |

25 |
26 |
27 |
28 |
29 |
30 |
36 |
37 |
38 |
39 |
40 |
your web browser actually
doesn't support webgl
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |

49 |
50 |
by hot dot
51 |
choose controls
52 |
72 |

73 |
74 |
75 |
76 |
77 |
78 |
Please open
with your phone or use qr code below
79 |
80 |
change controls
81 |
82 |
83 |
84 |
85 |
86 |
87 |
Please allow access
to your webcam
88 |
94 |
change controls
95 |
96 |
97 |
98 |
99 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
resume
115 |
change controls
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
resume
130 |
131 |
132 |
133 |
134 |
135 |
140 |
141 |
142 |
143 |
144 |
145 |
Such Ð
146 |
147 |
148 |
149 |
150 |
change controls
151 |
restart
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
--------------------------------------------------------------------------------
/assets/js/mobile.min.js:
--------------------------------------------------------------------------------
1 | /* Created by deemidroll | deemidroll@gmail.com | 2014 */
2 | $(function(){function a(b){!i&&b.gamma&&(i=!0),window.removeEventListener("deviceorientation",a,!1),window.removeEventListener("MozOrientation",a,!1)}var b=window.location.origin,c=window.location.hash,d=($("#controller"),$("#gameCodeInput")),e=$("#wheel"),f=$("#gameover"),g=$("#preparetostart"),h=$("#status"),i=!1,j=function(a){var b=document.createElement("div");a="on"+a;var c=a in b;return c||(b.setAttribute(a,"return;"),c="function"==typeof b[a]),b=null,c};window.addEventListener("deviceorientation",a,!1),window.addEventListener("MozOrientation",a,!1),setTimeout(function(){i?h.html("tilt your device to control"):($("#btnLeft").on("touchstart",function(){socket.emit("click",{click:"toTheLeft"})}),$("#btnRight").on("touchstart",function(){socket.emit("click",{click:"toTheRight"})}),h.html("push buttons to control")),j("touchstart")||h.html("sorry your device not supported")},1e3);var k=function(a){socket=io.connect(b),socket.on("welcome",function(){socket.emit("device",{type:"controller",gameCode:a})}),socket.on("message",function(a){"vibr"===a.type&&navigator.vibrate(a.time),"gameover"===a.type&&(e.css({display:"none"}),f.css({display:"table-cell"})),"resetGame"===a.type&&(f.css({display:"none"}),e.css({display:"table-cell"}))}),socket.on("connected",function(){function a(a){var b,c=a.alpha,d=a.beta,e=a.gamma,f=window.orientation;0===f&&(b=e),90===f&&(b=d),-90===f&&(b=-d),socket.emit("turn",{turn:b,g:c})}$("#socket").css({display:"none"}),g.css({display:"table-cell"}),$("#start").click(function(){socket.emit("start",{}),$(this).unbind("click"),g.css({display:"none"}),e.css({display:"table-cell"}),$("#audioloop").trigger("play")}),document.addEventListener("touchmove",function(a){a.preventDefault()},!1),window.addEventListener("deviceorientation",a,!1),window.addEventListener("MozOrientation",a,!1),$("#btnSphere").on("touchstart",function(){socket.emit("click",{click:"pause"}),$("#audioloop").trigger("play")}),$("#restart").click(function(){socket.emit("click",{click:"restart"}),f.css({display:"none"}),e.css({display:"table-cell"}),$("#audioloop").trigger("play")})}),socket.on("fail",function(){$("#status_fail").html("Failed to connect! Check address and code and reload!")}),$(document).unbind("keyup",l)};c&&(k(c.slice(1)),$("#socket").hide());var l=function(a){var b=a.keyCode;13===b&&k(d.val())};$("#connect").click(function(){k(d.val())}),$(document).bind("keyup",l)});
3 | //# sourceMappingURL=mobile.min.map
--------------------------------------------------------------------------------
/assets/js/mobile.min.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"mobile.min.js","sources":["js/vendor/jquery.qrcode.min.js","js/vendor/fireworks-bundle.js"],"names":[],"mappings":";AAAA,EAAA,WCCA,QAAA,GAAA,IACA,GAAA,EAAA,QAAA,GAAA,GACA,OAAA,oBAAA,oBAAA,GAAA,GACA,OAAA,oBAAA,iBAAA,GAAA,GDFA,GAAA,GAAA,OAAA,SAAA,OACA,EAAA,OAAA,SAAA,KAMA,GADA,EAAA,eACA,EAAA,mBACA,EAAA,EAAA,UACA,EAAA,EAAA,aACA,EAAA,EAAA,mBACA,EAAA,EAAA,WACA,GAAA,EAIA,EAAA,SAAA,GACA,GAAA,GAAA,SAAA,cAAA,MACA,GAAA,KAAA,CACA,IAAA,GAAA,IAAA,EAMA,OALA,KACA,EAAA,aAAA,EAAA,WACA,EAAA,kBAAA,GAAA,IAEA,EAAA,KACA,ECrBA,QAAA,iBAAA,oBAAA,GAAA,GACA,OAAA,iBAAA,iBAAA,GAAA,GACA,WAAA,WACA,EASA,EAAA,KAAA,gCARA,EAAA,YAAA,GAAA,aAAA,WACA,OAAA,KAAA,SAAA,MAAA,gBAEA,EAAA,aAAA,GAAA,aAAA,WACA,OAAA,KAAA,SAAA,MAAA,iBAEA,EAAA,KAAA,4BAIA,EAAA,eACA,EAAA,KAAA,oCAEA,IAEA,IAAA,GAAA,SAAA,GACA,OAAA,GAAA,QAAA,GAEA,OAAA,GAAA,UAAA,WAEA,OAAA,KAAA,UAAA,KAAA,aAAA,SAAA,MAEA,OAAA,GAAA,UAAA,SAAA,GACA,SAAA,EAAA,MAEA,UAAA,QAAA,EAAA,MAEA,aAAA,EAAA,OAEA,EAAA,KAAA,QAAA,SACA,EAAA,KAAA,QAAA,gBAEA,cAAA,EAAA,OAEA,EAAA,KAAA,QAAA,SACA,EAAA,KAAA,QAAA,kBAIA,OAAA,GAAA,YAAA,WAiBA,QAAA,GAAA,GACA,GAGA,GAHA,EAAA,EAAA,MACA,EAAA,EAAA,KACA,EAAA,EAAA,MAEA,EAAA,OAAA,WACA,KAAA,IAAA,EAAA,GACA,KAAA,IAAA,EAAA,GACA,MAAA,IAAA,GAAA,GACA,OAAA,KAAA,QAAA,KAAA,EAAA,EAAA,IAxBA,EAAA,WAAA,KAAA,QAAA,SACA,EAAA,KAAA,QAAA,eACA,EAAA,UAAA,MAAA,WACA,OAAA,KAAA,YACA,EAAA,MAAA,OAAA,SACA,EAAA,KAAA,QAAA,SACA,EAAA,KAAA,QAAA,eAEA,EAAA,cAAA,QAAA,UAGA,SAAA,iBAAA,YAAA,SAAA,GACA,EAAA,mBACA,GAcA,OAAA,iBAAA,oBAAA,GAAA,GACA,OAAA,iBAAA,iBAAA,GAAA,GACA,EAAA,cAAA,GAAA,aAAA,WACA,OAAA,KAAA,SAAA,MAAA,UACA,EAAA,cAAA,QAAA,UAEA,EAAA,YAAA,MAAA,WACA,OAAA,KAAA,SAAA,MAAA,YACA,EAAA,KAAA,QAAA,SACA,EAAA,KAAA,QAAA,eACA,EAAA,cAAA,QAAA,YAGA,OAAA,GAAA,OAAA,WACA,EAAA,gBAAA,KAAA,2DAEA,EAAA,UAAA,OAAA,QAAA,GAEA,KACA,EAAA,EAAA,MAAA,IACA,EAAA,WAAA,OAEA,IAAA,GAAA,SAAA,GACA,GAAA,GAAA,EAAA,OACA,MAAA,GACA,EAAA,EAAA,OAGA,GAAA,YAAA,MAAA,WACA,EAAA,EAAA,SAEA,EAAA,UAAA,KAAA,QAAA","sourcesContent":[null,null]}
--------------------------------------------------------------------------------
/assets/js/myYepnope.min.js:
--------------------------------------------------------------------------------
1 | /* Created by deemidroll | deemidroll@gmail.com | 2014 */
2 | $(function(){var a,b=document.getElementById("checkwebgl");if(a=window.WebGLRenderingContext&&(b.getContext("webgl")||b.getContext("webGlCanvas")||b.getContext("moz-webgl")||b.getContext("webkit-3d")||b.getContext("experimental-webgl"))?!0:!1){var c,d=$("body"),e=$(".choose_control"),f=100,g=4;void 0===d[0].style.webkitFilter?(c=!1,e.css({filter:'url(\'data:image/svg+xml;utf8,#blur-overlay')"})):(c=!0,d[0].style.webkitFilter="blur("+f+"px)"),$("#loader").css({display:"table"}),e.css({display:"table"}),yepnope.loadCounter=0,yepnope.percent=0,yepnope.showLoading=function(a){yepnope.percent+=f/g,yepnope.loadCounter+=1,$(".loader").animate({minWidth:Math.round(yepnope.percent)+"px"},{duration:1e3,progress:function(){var b=100*parseInt($(".loader").css("minWidth"),10)/f;$("title").html(Math.floor(b)+"% digital trip"),c&&(d[0].style.webkitFilter="blur("+(f-b)+"px)"),c||b%20!==0||e.css({filter:'url(\'data:image/svg+xml;utf8,#blur-overlay')"}),100===b&&($("title").html("digital trip"),c||b%20!==0||e.css({filter:'url(\'data:image/svg+xml;utf8,#blur-overlay\')'}))},complete:function(){a===g&&DT.runApp()}})},yepnope([{load:["js/vendor/three.min.js","js/DT.min.js","../socket.io/socket.io.js"],callback:{}}])}else $("#nogame").css({display:"table"})});
3 | //# sourceMappingURL=myYepnope.min.map
--------------------------------------------------------------------------------
/assets/js/myYepnope.min.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"myYepnope.min.js","sources":["js/vendor/jquery.qrcode.min.js","js/vendor/fireworks-bundle.js"],"names":[],"mappings":";AAAA,EAAA,WACA,GAAA,GACA,EAAA,SAAA,eAAA,aAWA,IALA,EALA,OAAA,wBAGA,EAAA,WAAA,UAAA,EAAA,WAAA,gBAAA,EAAA,WAAA,cAAA,EAAA,WAAA,cAAA,EAAA,WAAA,wBAEA,GAHA,EAQA,CACA,GAIA,GAJA,EAAA,EAAA,QACA,EAAA,EAAA,mBACA,EAAA,IACA,EAAA,CAGA,UAAA,EAAA,GAAA,MAAA,cACA,GAAA,EACA,EAAA,KAAA,OAAA,iIAAA,EAAA,yCAEA,GAAA,EACA,EAAA,GAAA,MAAA,aAAA,QAAA,EAAA,2CCzBA,EAAA,KAAA,QAAA,UAEA,QAAA,YAAA,EACA,QAAA,QAAA,EACA,QAAA,YAAA,SAAA,GACA,QAAA,SAAA,EAAA,EACA,QAAA,aAAA,EAEA,EAAA,WAAA,SAAA,SAAA,KAAA,MAAA,QAAA,SAAA,OACA,SAAA,IACA,SAAA,WACA,GAAA,GAAA,IAAA,SAAA,EAAA,WAAA,IAAA,YAAA,IAAA,CACA,GAAA,SAAA,KAAA,KAAA,MAAA,GAAA,kBACA,IACA,EAAA,GAAA,MAAA,aAAA,SAAA,EAAA,GAAA,OAEA,GAAA,EAAA,KAAA,GACA,EAAA,KAAA,OAAA,kIAAA,EAAA,GAAA,EAAA,GAAA,GAAA,uCAEA,MAAA,IACA,EAAA,SAAA,KAAA,gBACA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,OAAA,wKAGA,SAAA,WACA,IAAA,GACA,GAAA,aAKA,UACA,MACA,yBACA,eACA,6BAEA,mBAGA,GAAA,WAAA,KAAA,QAAA","sourcesContent":[null,null]}
--------------------------------------------------------------------------------
/assets/js/vendor/yepnope.1.5.4-min.js:
--------------------------------------------------------------------------------
1 | /*yepnope1.5.x|WTFPL*/
2 | (function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f
2 |
3 |
4 | digital trip mobile
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
start

41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/assets/objects/shield.obj:
--------------------------------------------------------------------------------
1 | # Blender v2.69 (sub 0) OBJ File: ''
2 | # www.blender.org
3 | mtllib shield5.mtl
4 | v 3.566043 -2.169689 -1.870790
5 | v 3.692634 -2.170709 -1.743620
6 | v 3.556507 -2.296890 -1.742066
7 | v -2.313433 -2.296923 -1.755292
8 | v -2.361920 -2.347214 -1.761918
9 | v -2.520455 -2.166229 -1.881297
10 | v -2.188015 -4.333909 -1.757575
11 | v -2.114091 -4.421419 -1.750901
12 | v -2.305903 -4.495983 -1.876311
13 | v -0.429337 -4.915584 -2.186739
14 | v -0.314214 -4.912241 -2.176280
15 | v -0.314959 -5.052517 -2.354450
16 | v 1.509362 -4.442739 -1.751290
17 | v 1.582553 -4.357444 -1.757806
18 | v 1.701610 -4.521033 -1.876652
19 | v 1.684193 -3.050564 -1.743659
20 | v 1.822465 -2.922831 -1.743659
21 | v 1.813022 -3.051315 -1.872306
22 | v 3.511641 -2.926631 -1.744375
23 | v 3.631464 -3.057841 -1.744375
24 | v 3.499640 -3.057908 -1.875559
25 | v 3.390035 -5.803533 -1.743399
26 | v 3.264151 -5.954840 -1.741316
27 | v 3.265495 -5.827251 -1.867105
28 | v -0.204804 -6.871816 -2.194416
29 | v -0.315409 -6.877708 -2.179532
30 | v -0.315451 -6.783573 -2.351320
31 | v -3.917227 -5.931209 -1.741338
32 | v -4.041688 -5.779063 -1.743395
33 | v -3.917365 -5.803658 -1.867201
34 | v -4.450400 -0.480582 -1.744304
35 | v -4.332766 -0.351059 -1.742895
36 | v -4.321109 -0.480849 -1.874092
37 | v 1.899891 -0.344999 -1.753995
38 | v 1.965232 -0.287136 -1.760276
39 | v 2.087910 -0.474742 -1.879763
40 | v 2.087915 1.175112 -1.761897
41 | v 2.038959 1.225989 -1.755772
42 | v 2.245039 1.357643 -1.881705
43 | v -4.540389 1.225881 -1.742151
44 | v -4.674968 1.352551 -1.743665
45 | v -4.548069 1.353339 -1.871172
46 | v -4.805141 3.089217 -1.744294
47 | v -4.686948 3.218896 -1.743041
48 | v -4.675702 3.088992 -1.874161
49 | v 4.045227 3.088345 -1.874483
50 | v 4.058593 3.218479 -1.743150
51 | v 4.175073 3.088676 -1.744382
52 | v 3.692634 -2.170706 0.147880
53 | v 3.563915 -2.169760 0.276337
54 | v 3.553000 -2.298019 0.147880
55 | v -2.308814 -2.289448 0.166174
56 | v -2.513285 -2.154766 0.288125
57 | v -2.361920 -2.347214 0.166174
58 | v -2.188015 -4.333909 0.161829
59 | v -2.301575 -4.505680 0.283296
60 | v -2.110357 -4.429282 0.161829
61 | v -0.314260 -4.916698 0.146535
62 | v -0.324272 -5.040629 0.253196
63 | v -0.250628 -4.923632 0.156524
64 | v 1.505612 -4.450410 0.162059
65 | v 1.697166 -4.530626 0.283554
66 | v 1.582553 -4.357446 0.162059
67 | v 1.684193 -3.050564 0.147915
68 | v 1.813022 -3.051315 0.276561
69 | v 1.822465 -2.922832 0.147915
70 | v 3.511641 -2.926631 0.148630
71 | v 3.499640 -3.057908 0.279814
72 | v 3.631464 -3.057841 0.148630
73 | v 3.390035 -5.803534 0.147652
74 | v 3.263386 -5.827666 0.272750
75 | v 3.260391 -5.956559 0.147652
76 | v -0.315404 -6.875576 0.134620
77 | v -0.324429 -6.777991 0.267610
78 | v -0.420001 -6.868240 0.149790
79 | v -3.913511 -5.932945 0.147648
80 | v -3.915270 -5.804086 0.272836
81 | v -4.041688 -5.779064 0.147648
82 | v -4.450400 -0.480582 0.148561
83 | v -4.318908 -0.480582 0.279563
84 | v -4.329212 -0.349495 0.148561
85 | v 1.895041 -0.351795 0.164533
86 | v 2.081551 -0.483835 0.286308
87 | v 1.965232 -0.287136 0.164533
88 | v 2.087915 1.175112 0.166154
89 | v 2.238842 1.367629 0.288104
90 | v 2.034609 1.232979 0.166154
91 | v -4.536951 1.224743 0.147922
92 | v -4.546117 1.353268 0.276605
93 | v -4.674968 1.352551 0.147922
94 | v -4.805141 3.089216 0.148553
95 | v -4.673694 3.089224 0.279530
96 | v -4.683768 3.220286 0.148553
97 | v 4.055428 3.219900 0.148641
98 | v 4.043203 3.088599 0.279849
99 | v 4.175073 3.088676 0.148641
100 | v -0.318142 -2.304274 -2.191092
101 | v -0.317415 -2.204289 -2.346444
102 | v -0.315192 -2.290937 0.172839
103 | v -0.315191 -2.190938 0.272839
104 | v -0.423193 -4.921835 0.156521
105 | v -0.338456 -5.071457 0.277263
106 | v -0.243996 -4.917950 -2.187640
107 | v -0.333866 -5.062684 0.272837
108 | v -0.209117 -6.868713 0.149790
109 | v -0.314346 -6.776314 0.270234
110 | v -0.424243 -6.871418 -2.194231
111 | v -0.333379 -6.771159 0.272836
112 | v -0.311938 -0.348367 -2.244082
113 | v -0.312856 -0.448347 -2.358216
114 | v -0.315191 -0.352826 0.172839
115 | v -0.315191 -0.452826 0.272839
116 | v -0.312360 1.224552 -2.231767
117 | v -0.313110 1.324538 -2.355252
118 | v -0.315191 1.231521 0.172839
119 | v -0.315191 1.331520 0.272839
120 | v -0.315192 3.225076 -2.225497
121 | v -0.315191 3.125077 -2.353801
122 | v -0.315191 3.216913 0.172841
123 | v -0.315191 3.116913 0.272840
124 | v 3.549274 -2.153702 -1.731205
125 | v -0.315191 -2.170227 -2.214658
126 | v 3.549274 -2.153702 0.135461
127 | v -0.315191 -2.170227 0.152128
128 | v -2.442208 -2.220109 0.135461
129 | v -2.442208 -2.220109 -1.731205
130 | v -2.255096 -4.467833 -1.731207
131 | v -2.255096 -4.467834 0.135460
132 | v -0.330248 -5.047666 -2.192320
133 | v -0.334695 -5.092554 0.168793
134 | v 1.649619 -4.491272 -1.731207
135 | v 1.649619 -4.491273 0.135460
136 | v 1.827447 -3.066931 -1.731205
137 | v 1.827447 -3.066931 0.135460
138 | v 3.489796 -3.066898 -1.731205
139 | v 3.489796 -3.066898 0.135460
140 | v 3.242291 -5.809793 -1.731207
141 | v 3.242291 -5.809794 0.135460
142 | v -0.314639 -6.754944 -2.200165
143 | v -0.314748 -6.728929 0.168793
144 | v -3.894101 -5.786452 -1.731207
145 | v -3.894101 -5.786453 0.135460
146 | v -4.308612 -0.490100 -1.731205
147 | v -4.308612 -0.490101 0.135462
148 | v -0.315191 -0.473536 -2.235270
149 | v -0.315191 -0.473537 0.152128
150 | v 2.026109 -0.423649 0.135462
151 | v 2.026109 -0.423648 -1.731205
152 | v 2.167970 1.302344 -1.731205
153 | v 2.167970 1.302343 0.135462
154 | v -0.315191 1.352232 -2.230592
155 | v -0.315191 1.352231 0.152129
156 | v -4.531735 1.368800 0.135462
157 | v -4.531735 1.368800 -1.731205
158 | v -4.663338 3.079634 -1.731204
159 | v -4.663338 3.079634 0.135463
160 | v -0.315191 3.096204 -2.228176
161 | v -0.315191 3.096203 0.152130
162 | v 4.033419 3.079678 0.135463
163 | v 4.033419 3.079678 -1.731204
164 | usemtl None
165 | s off
166 | f 1 2 3
167 | f 4 5 6
168 | f 7 8 9
169 | f 10 11 12
170 | f 13 14 15
171 | f 16 17 18
172 | f 19 20 21
173 | f 22 23 24
174 | f 25 26 27
175 | f 28 29 30
176 | f 31 32 33
177 | f 34 35 36
178 | f 37 38 39
179 | f 40 41 42
180 | f 43 44 45
181 | f 46 47 48
182 | f 49 50 51
183 | f 52 53 54
184 | f 55 56 57
185 | f 58 59 60
186 | f 61 62 63
187 | f 64 65 66
188 | f 67 68 69
189 | f 70 71 72
190 | f 73 74 75
191 | f 76 77 78
192 | f 79 80 81
193 | f 82 83 84
194 | f 85 86 87
195 | f 88 89 90
196 | f 91 92 93
197 | f 94 95 96
198 | f 98 1 3 97
199 | f 3 2 49 51
200 | f 52 54 5 4
201 | f 99 100 53 52
202 | f 7 9 6 5
203 | f 55 57 8 7
204 | f 54 53 56 55
205 | f 10 101 58 11
206 | f 57 56 102 101
207 | f 13 15 12 103
208 | f 61 63 14 13
209 | f 62 60 59 104
210 | f 60 62 61
211 | f 16 18 15 14
212 | f 64 66 17 16
213 | f 63 62 65 64
214 | f 19 21 18 17
215 | f 67 69 20 19
216 | f 66 65 68 67
217 | f 22 24 21 20
218 | f 70 72 23 22
219 | f 69 68 71 70
220 | f 25 27 24 23
221 | f 25 105 73 26
222 | f 72 71 106 105
223 | f 28 30 27 107
224 | f 76 78 29 28
225 | f 77 75 74 108
226 | f 75 77 76
227 | f 31 33 30 29
228 | f 79 81 32 31
229 | f 78 77 80 79
230 | f 32 109 110 33
231 | f 82 84 35 34
232 | f 111 112 83 82
233 | f 37 39 36 35
234 | f 85 87 38 37
235 | f 84 83 86 85
236 | f 113 114 39 38
237 | f 88 90 41 40
238 | f 88 115 116 89
239 | f 43 45 42 41
240 | f 91 93 44 43
241 | f 90 89 92 91
242 | f 44 117 118 45
243 | f 94 96 48 47
244 | f 94 119 120 95
245 | f 2 1 46 48
246 | f 96 95 50 49
247 | f 11 103 12
248 | f 26 107 27
249 | f 102 59 58 101
250 | f 106 74 73 105
251 | f 97 4 6 98
252 | f 100 99 51 50
253 | f 11 58 60 103
254 | f 59 102 104
255 | f 26 73 75 107
256 | f 74 106 108
257 | f 109 34 36 110
258 | f 112 111 81 80
259 | f 114 113 40 42
260 | f 115 87 86 116
261 | f 118 117 47 46
262 | f 120 119 93 92
263 | f 10 12 9 8
264 | f 97 3 121 122
265 | f 3 51 123 121
266 | f 51 99 124 123
267 | f 99 52 125 124
268 | f 52 4 126 125
269 | f 4 97 122 126
270 | f 7 5 126 127
271 | f 5 54 125 126
272 | f 54 55 128 125
273 | f 55 7 127 128
274 | f 10 8 127 129
275 | f 8 57 128 127
276 | f 57 101 130 128
277 | f 101 10 129 130
278 | f 13 103 129 131
279 | f 103 60 130 129
280 | f 60 61 132 130
281 | f 61 13 131 132
282 | f 16 14 131 133
283 | f 14 63 132 131
284 | f 63 64 134 132
285 | f 64 16 133 134
286 | f 19 17 133 135
287 | f 17 66 134 133
288 | f 66 67 136 134
289 | f 67 19 135 136
290 | f 22 20 135 137
291 | f 20 69 136 135
292 | f 69 70 138 136
293 | f 70 22 137 138
294 | f 25 23 137 139
295 | f 23 72 138 137
296 | f 72 105 140 138
297 | f 105 25 139 140
298 | f 28 107 139 141
299 | f 107 75 140 139
300 | f 75 76 142 140
301 | f 76 28 141 142
302 | f 31 29 141 143
303 | f 29 78 142 141
304 | f 78 79 144 142
305 | f 79 31 143 144
306 | f 109 32 143 145
307 | f 32 81 144 143
308 | f 81 111 146 144
309 | f 111 82 147 146
310 | f 82 34 148 147
311 | f 34 109 145 148
312 | f 37 35 148 149
313 | f 35 84 147 148
314 | f 84 85 150 147
315 | f 85 37 149 150
316 | f 113 38 149 151
317 | f 38 87 150 149
318 | f 87 115 152 150
319 | f 115 88 153 152
320 | f 88 40 154 153
321 | f 40 113 151 154
322 | f 43 41 154 155
323 | f 41 90 153 154
324 | f 90 91 156 153
325 | f 91 43 155 156
326 | f 117 44 155 157
327 | f 44 93 156 155
328 | f 93 119 158 156
329 | f 119 94 159 158
330 | f 94 47 160 159
331 | f 47 117 157 160
332 | f 2 48 160 121
333 | f 48 96 159 160
334 | f 96 49 123 159
335 | f 49 2 121 123
336 | f 1 98 122 121
337 | f 98 6 126 122
338 | f 6 9 127 126
339 | f 9 12 129 127
340 | f 12 15 131 129
341 | f 15 18 133 131
342 | f 18 21 135 133
343 | f 21 24 137 135
344 | f 24 27 139 137
345 | f 27 30 141 139
346 | f 30 33 143 141
347 | f 33 110 145 143
348 | f 110 36 148 145
349 | f 36 39 149 148
350 | f 39 114 151 149
351 | f 114 42 154 151
352 | f 42 45 155 154
353 | f 45 118 157 155
354 | f 118 46 160 157
355 | f 46 1 121 160
356 | f 53 100 124 125
357 | f 100 50 123 124
358 | f 50 95 159 123
359 | f 95 120 158 159
360 | f 120 92 156 158
361 | f 92 89 153 156
362 | f 89 116 152 153
363 | f 116 86 150 152
364 | f 86 83 147 150
365 | f 83 112 146 147
366 | f 112 80 144 146
367 | f 80 77 142 144
368 | f 77 108 140 142
369 | f 108 106 140
370 | f 106 71 138 140
371 | f 71 68 136 138
372 | f 68 65 134 136
373 | f 65 62 132 134
374 | f 62 104 130 132
375 | f 104 102 130
376 | f 102 56 128 130
377 | f 56 53 125 128
378 | v -0.319083 -9.834706 0.088397
379 | v -0.319083 -9.834706 1.911597
380 | v -0.404336 -9.822839 1.911597
381 | v -0.404336 -9.822839 0.088397
382 | v -0.233518 -9.734917 -0.000003
383 | v -0.318836 -9.746306 -0.000003
384 | v -0.316033 -8.744308 -0.000002
385 | v -0.230715 -8.732917 -0.000002
386 | v -0.233765 -9.823317 0.088397
387 | v -0.233765 -9.823317 1.911597
388 | v -0.404088 -9.734439 -0.000003
389 | v -0.401286 -8.732440 -0.000002
390 | v -5.017029 -7.390148 0.022098
391 | v -5.046782 -7.413828 0.091589
392 | v -0.315843 -8.676476 0.090900
393 | v -0.401100 -8.666141 0.022098
394 | v -6.091434 4.870564 0.022102
395 | v -6.118335 4.894203 0.092282
396 | v -0.420162 4.877737 0.022102
397 | v -0.420175 4.916982 0.091171
398 | v 4.332985 -7.432482 0.022098
399 | v 4.362653 -7.456258 0.091592
400 | v 5.454807 4.894170 0.092282
401 | v 5.427886 4.870553 0.022102
402 | v -0.230530 -8.666617 0.022098
403 | v -0.243317 4.916983 0.091170
404 | v -0.243362 4.877737 0.022102
405 | v -0.315848 -8.678008 0.022098
406 | v -0.331762 4.877737 0.022102
407 | v -0.331713 4.944037 0.000002
408 | v -0.243313 4.944037 0.000002
409 | v -0.420113 4.944037 0.000002
410 | v -5.067964 -7.432590 -0.000002
411 | v -6.140324 4.915346 0.000002
412 | v 5.476806 4.915302 0.000002
413 | v 4.383771 -7.475102 -0.000002
414 | v -0.331746 4.915648 0.091636
415 | v -0.404274 -9.800738 0.022097
416 | v -6.046819 -8.248263 0.022098
417 | v -5.995885 -8.205821 -0.000002
418 | v 5.361355 -8.295485 0.022098
419 | v -0.233704 -9.801216 0.022097
420 | v 5.310569 -8.252866 -0.000002
421 | v 6.638573 5.977992 0.022102
422 | v 6.589653 5.933243 0.000002
423 | v -7.251564 5.933198 0.000002
424 | v -7.300454 5.977981 0.022102
425 | v -0.419352 5.970808 0.022102
426 | v -0.419401 5.904508 0.000002
427 | v -0.242552 5.970808 0.022102
428 | v -0.242601 5.904508 0.000002
429 | v -0.319021 -9.812606 0.022097
430 | v -0.330952 5.970808 0.022102
431 | v -0.331001 5.904508 0.000002
432 | v -5.978577 -8.285909 0.088398
433 | v -6.012698 -8.267086 0.055248
434 | v 5.327144 -8.314098 0.055248
435 | v 5.292934 -8.332712 0.088398
436 | v 6.642797 5.941425 0.055252
437 | v 6.647021 5.904858 0.088402
438 | v 5.386143 -8.221642 0.088398
439 | v 5.373749 -8.258564 0.055248
440 | v -7.264403 5.985444 0.055252
441 | v -7.228351 5.992908 0.088402
442 | v -0.419336 5.992908 0.088402
443 | v -6.059177 -8.211308 0.055248
444 | v -6.071537 -8.174351 0.088398
445 | v -7.309011 5.904847 0.088402
446 | v -7.304733 5.941414 0.055252
447 | v -0.242536 5.992908 0.088402
448 | v 6.566480 5.992908 0.088402
449 | v 6.602526 5.985449 0.055252
450 | v -0.330936 5.992908 0.088402
451 | v 6.624928 5.904857 1.977902
452 | v 5.364797 -8.227397 1.977898
453 | v 5.386143 -8.221642 1.911598
454 | v 6.647021 5.904858 1.911602
455 | v 6.550824 5.816803 2.000002
456 | v 5.300762 -8.244659 1.999998
457 | v -0.314916 -8.342708 -0.636575
458 | v -0.357135 -8.314749 -0.612173
459 | v -0.357146 -8.292673 -0.635177
460 | v -0.272728 -8.314988 -0.612086
461 | v -0.272681 -8.337064 -0.589081
462 | v -0.399354 -8.286791 -0.587771
463 | v -4.697095 -7.123153 0.048864
464 | v -4.636465 -7.071443 0.013369
465 | v -0.399377 -8.242640 -0.633779
466 | v -5.721357 4.531281 0.049345
467 | v -5.650086 4.465083 0.015282
468 | v -0.418055 4.531266 -1.134652
469 | v -0.417927 4.465022 -1.154040
470 | v -0.245444 4.531266 -1.134650
471 | v 5.057323 4.531281 0.049314
472 | v 4.985970 4.465078 0.015161
473 | v -0.245399 4.465022 -1.154037
474 | v 4.013536 -7.164001 0.048850
475 | v 3.953002 -7.111996 0.013314
476 | v -0.230540 -8.287269 -0.587596
477 | v -0.230635 -8.243117 -0.633604
478 | v -0.331750 4.531267 -1.144275
479 | v -0.331663 4.465023 -1.163648
480 | v -0.357124 -8.336824 -0.589169
481 | v -0.399332 -8.330942 -0.541763
482 | v -0.272775 -8.292912 -0.635090
483 | v -0.230446 -8.331420 -0.541587
484 | v -4.717306 -7.140390 0.119629
485 | v -5.745113 4.553348 0.119632
486 | v -0.418182 4.553348 -1.069256
487 | v -0.245376 4.553348 -1.069254
488 | v 5.081108 4.553348 0.119632
489 | v 4.033714 -7.181335 0.119628
490 | v -0.331779 4.553348 -1.078883
491 | v -7.284567 5.963429 0.055252
492 | v -7.291238 5.954318 1.961332
493 | v -7.292717 5.970891 1.911602
494 | v -7.309011 5.904847 1.911602
495 | v -7.268682 5.948878 0.088402
496 | v -7.228351 5.992908 1.911602
497 | v -7.226323 5.970808 1.977908
498 | v -0.419336 5.970808 1.977902
499 | v -0.419336 5.992908 1.911602
500 | v -6.050223 -8.180224 1.977898
501 | v -7.286804 5.904592 1.977902
502 | v -6.071537 -8.174352 1.911598
503 | v -0.242536 5.992908 1.911602
504 | v -0.242536 5.970808 1.977902
505 | v 6.492698 5.970893 1.994263
506 | v 6.544384 5.992908 1.977050
507 | v -0.330936 5.970808 1.977902
508 | v -0.330936 5.992908 1.911602
509 | v -7.220241 5.904508 2.000003
510 | v -0.419336 5.904508 2.000003
511 | v -5.986282 -8.197845 1.999998
512 | v -0.242536 5.904508 2.000003
513 | v 6.470252 5.904850 2.000003
514 | v -0.330936 5.904508 2.000003
515 | v 6.622662 5.963437 0.055252
516 | v 6.606750 5.948883 0.088402
517 | v 6.635669 5.970894 1.908804
518 | v 6.608718 5.970894 1.977689
519 | v 6.534595 5.882841 2.000002
520 | v 6.568939 5.960809 1.990703
521 | v 6.585896 5.992908 1.900408
522 | v -6.035938 -8.239197 0.055248
523 | v 5.350446 -8.286331 0.055248
524 | v -5.997294 -8.280748 1.900403
525 | v -6.049106 -8.244981 1.908799
526 | v -6.025056 -8.230129 0.088398
527 | v -0.399983 -9.801764 1.977897
528 | v -5.977805 -8.264637 1.982752
529 | v -5.967785 -8.288884 1.931014
530 | v 5.339538 -8.277178 0.088398
531 | v 5.363597 -8.292171 1.908799
532 | v 5.311680 -8.327657 1.900403
533 | v 5.292189 -8.311428 1.982752
534 | v -0.238000 -9.802218 1.977897
535 | v 5.282125 -8.335628 1.931014
536 | v -0.319023 -9.813188 1.977897
537 | v 5.346981 -8.296653 1.965544
538 | v -6.032515 -8.249555 1.965544
539 | v -0.386925 -9.738544 1.999997
540 | v -0.250704 -9.738925 1.999997
541 | v -0.318842 -9.748632 1.999997
542 | v 5.309234 -8.328316 1.928481
543 | v -5.994852 -8.281421 1.928481
544 | v -0.419405 5.884943 0.102820
545 | v -7.214220 5.888121 0.095234
546 | v 6.558011 5.900733 0.100346
547 | v -0.242532 5.883731 0.105801
548 | v -0.330968 5.885462 0.107448
549 | v -7.205345 5.891054 1.897927
550 | v -0.419336 5.898038 1.879980
551 | v -0.242394 5.900921 1.872376
552 | v 6.526717 5.871633 1.907143
553 | v -0.330936 5.898038 1.879980
554 | v 5.271754 -8.227908 1.900313
555 | v -0.419336 5.872887 1.905133
556 | v -5.961861 -8.175270 1.900140
557 | v -0.242476 5.878351 1.903484
558 | v -0.330936 5.872883 1.905134
559 | v -0.318753 -9.716875 1.902528
560 | v -0.318768 -9.721805 0.100625
561 | v -5.958999 -8.177328 0.099925
562 | v 5.273728 -8.224211 0.099921
563 | v -0.319417 -8.238572 -0.583050
564 | v -0.320231 -8.288486 -0.584491
565 | v -0.320171 -8.282723 -0.537041
566 | v -0.314861 -8.224503 -0.527509
567 | v -4.621706 -7.065105 0.132869
568 | v -5.645470 4.474213 0.134851
569 | v -0.407455 4.448235 -1.048210
570 | v -0.255987 4.448209 -1.048217
571 | v 4.981370 4.474234 0.134788
572 | v 3.938283 -7.105750 0.132877
573 | v -0.331722 4.447775 -1.057280
574 | usemtl None
575 | s off
576 | f 161 162 163 164
577 | f 165 166 167 168
578 | f 162 161 169 170
579 | f 171 172 167 166
580 | f 173 174 175 176
581 | f 177 178 174 173
582 | f 179 180 178 177
583 | f 181 182 183 184
584 | f 185 175 182 181
585 | f 184 183 186 187
586 | f 175 185 188
587 | f 187 189 190 191
588 | f 188 176 175
589 | f 189 179 192 190
590 | f 172 193 173 176
591 | f 193 194 177 173
592 | f 177 194 192 179
593 | f 195 196 181 184
594 | f 196 168 185 181
595 | f 191 195 184 187
596 | f 185 167 188
597 | f 197 189 187 186
598 | f 188 167 176
599 | f 180 179 189 197
600 | f 198 199 200 171
601 | f 201 202 165 203
602 | f 204 201 203 205
603 | f 206 207 208 209
604 | f 199 207 206 200
605 | f 210 204 205 211
606 | f 202 212 166 165
607 | f 208 213 214 209
608 | f 166 212 198 171
609 | f 213 210 211 214
610 | f 198 164 215 216
611 | f 217 218 169 202
612 | f 219 220 221 222
613 | f 223 224 225 208
614 | f 226 227 228 229
615 | f 210 230 231 232
616 | f 202 161 212
617 | f 225 233 213 208
618 | f 212 161 198
619 | f 233 230 210 213
620 | f 234 235 236 237
621 | f 238 239 235 234
622 | f 240 241 242
623 | f 240 243 244
624 | f 245 246 247 248
625 | f 246 249 250 247
626 | f 250 249 251 252
627 | f 253 254 255 256
628 | f 254 257 258 255
629 | f 258 257 259 260
630 | f 252 251 261 262
631 | f 261 253 256 262
632 | f 263 241 240
633 | f 245 241 263 264
634 | f 245 248 242 241
635 | f 265 243 240
636 | f 259 243 265 260
637 | f 259 266 244 243
638 | f 264 267 246 245
639 | f 267 268 249 246
640 | f 249 268 269 251
641 | f 270 271 254 253
642 | f 271 272 257 254
643 | f 272 266 259 257
644 | f 251 269 273 261
645 | f 273 270 253 261
646 | f 223 207 274
647 | f 278 276 279 224
648 | f 280 281 282 279
649 | f 283 284 277 285
650 | f 286 287 288 289
651 | f 281 290 291 282
652 | f 290 287 286 291
653 | f 207 229 274
654 | f 229 278 274
655 | f 274 278 223
656 | f 284 280 275
657 | f 275 280 276
658 | f 228 277 276 278
659 | f 292 293 281 280
660 | f 294 292 284 283
661 | f 295 296 288 287
662 | f 293 297 290 281
663 | f 297 295 287 290
664 | f 219 204 298
665 | f 299 300 237 220
666 | f 300 301 234 237
667 | f 302 303 288 296
668 | f 288 303 301 289
669 | f 204 232 298
670 | f 232 299 298
671 | f 298 299 219
672 | f 299 231 304 300
673 | f 304 289 301 300
674 | f 234 303 302 238
675 | f 303 234 301
676 | f 226 199 305
677 | f 217 201 306
678 | f 310 311 312 163
679 | f 313 314 315 218
680 | f 316 317 170 318
681 | f 317 319 162 170
682 | f 162 319 310 163
683 | f 316 320 235 239
684 | f 235 320 314 236
685 | f 308 321 283 285
686 | f 283 321 311 294
687 | f 199 216 305
688 | f 216 309 305
689 | f 305 309 226
690 | f 201 222 306
691 | f 222 313 306
692 | f 306 313 217
693 | f 322 294 311 310
694 | f 221 236 314 313
695 | f 316 239 323 317
696 | f 317 323 324 319
697 | f 324 322 310 319
698 | f 316 318 325 320
699 | f 325 315 314 320
700 | f 308 307 326 321
701 | f 326 312 311 321
702 | f 327 225 224 328
703 | f 329 231 230 330
704 | f 331 233 225 327
705 | f 330 230 233 331
706 | f 328 224 279 332
707 | f 332 279 282 333
708 | f 334 286 289 335
709 | f 333 282 291 336
710 | f 336 291 286 334
711 | f 335 304 231 329
712 | f 304 335 289
713 | f 337 239 238 335
714 | f 338 293 292 332
715 | f 332 292 294 339
716 | f 335 296 295 340
717 | f 341 297 293 338
718 | f 340 295 297 341
719 | f 296 335 302
720 | f 302 335 238
721 | f 339 294 322 342
722 | f 342 323 239 337
723 | f 323 342 324
724 | f 324 342 322
725 | f 343 165 168 175
726 | f 175 172 171 343
727 | f 186 191 190 197
728 | f 197 190 192 180
729 | f 174 193 172 175
730 | f 178 194 193 174
731 | f 180 192 194 178
732 | f 182 196 195 183
733 | f 175 168 196 182
734 | f 183 195 191 186
735 | f 343 171 200 344
736 | f 345 203 165 343
737 | f 329 205 203 345
738 | f 328 206 209 327
739 | f 344 200 206 328
740 | f 330 211 205 329
741 | f 327 209 214 331
742 | f 331 214 211 330
743 | f 328 228 227 344
744 | f 339 285 277 332
745 | f 332 277 228 328
746 | f 344 227 285 339
747 | f 345 221 220 329
748 | f 335 237 236 337
749 | f 329 220 237 335
750 | f 337 236 221 345
751 | f 343 164 163 342
752 | f 344 215 164 343
753 | f 339 307 215 344
754 | f 342 163 312 339
755 | f 307 339 326
756 | f 326 339 312
757 | f 342 170 169 343
758 | f 343 169 218 345
759 | f 345 218 315 337
760 | f 337 318 170 342
761 | f 318 337 325
762 | f 325 337 315
763 | f 346 347 240 242
764 | f 348 347 240 244
765 | f 349 248 247 350
766 | f 350 247 250 351
767 | f 351 250 252 352
768 | f 353 256 255 354
769 | f 354 255 258 355
770 | f 355 258 260 349
771 | f 352 252 262 356
772 | f 356 262 256 353
773 | f 240 347 348 263
774 | f 349 264 263 348
775 | f 346 242 248 349
776 | f 240 347 346 265
777 | f 349 260 265 346
778 | f 348 244 266 349
779 | f 350 267 264 349
780 | f 351 268 267 350
781 | f 352 269 268 351
782 | f 354 271 270 353
783 | f 355 272 271 354
784 | f 349 266 272 355
785 | f 356 273 269 352
786 | f 353 270 273 356
787 | s 1
788 | f 307 308 309 215
789 | f 285 227 309 308
790 |
--------------------------------------------------------------------------------
/assets/sounds/catchBonus0.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/catchBonus0.mp3
--------------------------------------------------------------------------------
/assets/sounds/catchBonus0.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/catchBonus0.ogg
--------------------------------------------------------------------------------
/assets/sounds/catchBonus1.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/catchBonus1.mp3
--------------------------------------------------------------------------------
/assets/sounds/catchBonus1.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/catchBonus1.ogg
--------------------------------------------------------------------------------
/assets/sounds/catchBonus2.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/catchBonus2.mp3
--------------------------------------------------------------------------------
/assets/sounds/catchBonus2.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/catchBonus2.ogg
--------------------------------------------------------------------------------
/assets/sounds/coin.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/coin.mp3
--------------------------------------------------------------------------------
/assets/sounds/coin.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/coin.ogg
--------------------------------------------------------------------------------
/assets/sounds/fun.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/fun.mp3
--------------------------------------------------------------------------------
/assets/sounds/fun.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/fun.ogg
--------------------------------------------------------------------------------
/assets/sounds/gameover.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/gameover.mp3
--------------------------------------------------------------------------------
/assets/sounds/gameover.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/gameover.ogg
--------------------------------------------------------------------------------
/assets/sounds/intro.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/intro.mp3
--------------------------------------------------------------------------------
/assets/sounds/intro.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/intro.ogg
--------------------------------------------------------------------------------
/assets/sounds/invulner.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/invulner.mp3
--------------------------------------------------------------------------------
/assets/sounds/invulner.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/invulner.ogg
--------------------------------------------------------------------------------
/assets/sounds/loop.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/loop.mp3
--------------------------------------------------------------------------------
/assets/sounds/main.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/main.mp3
--------------------------------------------------------------------------------
/assets/sounds/main.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/main.ogg
--------------------------------------------------------------------------------
/assets/sounds/muv8.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/muv8.mp3
--------------------------------------------------------------------------------
/assets/sounds/muv8.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/muv8.ogg
--------------------------------------------------------------------------------
/assets/sounds/pause.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/pause.mp3
--------------------------------------------------------------------------------
/assets/sounds/pause.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/pause.ogg
--------------------------------------------------------------------------------
/assets/sounds/stoneDestroy.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/stoneDestroy.mp3
--------------------------------------------------------------------------------
/assets/sounds/stoneDestroy.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/stoneDestroy.ogg
--------------------------------------------------------------------------------
/assets/sounds/stoneMiss.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/stoneMiss.mp3
--------------------------------------------------------------------------------
/assets/sounds/stoneMiss.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/htdt/digital_trip/47f911cc593ba6b59e8a5a3899ac0bfa5de5e2b5/assets/sounds/stoneMiss.ogg
--------------------------------------------------------------------------------
/assets_source/Gruntfile.js:
--------------------------------------------------------------------------------
1 | // ██████╗ ██████╗ ██╗ ██╗███╗ ██╗████████╗███████╗██╗██╗ ███████╗ ██╗███████╗
2 | // ██╔════╝ ██╔══██╗██║ ██║████╗ ██║╚══██╔══╝██╔════╝██║██║ ██╔════╝ ██║██╔════╝
3 | // ██║ ███╗██████╔╝██║ ██║██╔██╗ ██║ ██║ █████╗ ██║██║ █████╗ ██║███████╗
4 | // ██║ ██║██╔══██╗██║ ██║██║╚██╗██║ ██║ ██╔══╝ ██║██║ ██╔══╝ ██ ██║╚════██║
5 | // ╚██████╔╝██║ ██║╚██████╔╝██║ ╚████║ ██║ ██║ ██║███████╗███████╗██╗╚█████╔╝███████║
6 | // ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚════╝ ╚══════╝
7 |
8 | module.exports = function(grunt) {
9 | grunt.initConfig({
10 | pkg: grunt.file.readJSON('package.json'),
11 | sass: {
12 | dist: {
13 | files: {
14 | '../assets/css/game.css': 'scss/game.scss',
15 | '../assets/css/mobile.css': 'scss/mobile.scss'
16 | }
17 | },
18 | options: {
19 | sourcemap: 'true'
20 | }
21 | },
22 | watch: {
23 | options: {
24 | livereload: true,
25 | },
26 | css: {
27 | files: 'scss/*.scss',
28 | tasks: ['newer:sass'],
29 | },
30 | js: {
31 | files: ['js/*.js', 'js/*/*.js', '../assets/js/tests/tests.js'],
32 | tasks: ['process'],
33 | },
34 | html: {
35 | files: '../assets/index.html',
36 | },
37 | // config: {
38 | // files: ['package.json', 'Gruntfile.js'],
39 | // tasks: ['exit']
40 | // },
41 | },
42 | concat_sourcemap: {
43 | options: {
44 | sourcesContent: true
45 | },
46 | target: {
47 | files: {
48 | '../assets_source/js/DT.js': [
49 | // '../assets/js/DT.js': [
50 | // QR code
51 | 'js/vendor/jquery.qrcode.min.js',
52 | // Particle system
53 | 'js/vendor/fireworks-bundle.js',
54 | // Detector
55 | 'js/vendor/Detector.js',
56 | // Resize
57 | 'js/vendor/threex.windowresize.js',
58 | // Stats
59 | 'js/vendor/Stats.js',
60 | 'js/vendor/threex.rendererstats.js',
61 | // Curves
62 | 'js/vendor/CurveExtras.js',
63 | // Sound
64 | 'js/vendor/BufferLoader.js',
65 | // Webcam control
66 | 'js/vendor/headtrackr.min.js',
67 | // External objects
68 | 'js/vendor/OBJLoader.js',
69 | // Full screen
70 | 'js/vendor/THREEx.FullScreen.js',
71 | // Postprocessing
72 | 'js/vendor/CopyShader.js',
73 | 'js/vendor/EffectComposer.js',
74 | 'js/vendor/RenderPass.js',
75 | 'js/vendor/MaskPass.js',
76 | 'js/vendor/ShaderPass.js',
77 | 'js/vendor/BadTVShader.js',
78 | // Game init
79 | 'js/init.js',
80 | ]
81 | }
82 | }
83 | },
84 | uglify: {
85 | dist: {
86 | options: {
87 | sourceMap: true,
88 | sourceMapIncludeSources: true,
89 | sourceMapIn: '../assets_source/js/DT.js.map',
90 | banner: '/* Created by deemidroll | deemidroll@gmail.com | 2014 */',
91 | },
92 | files: {
93 | '../assets/js/DT.min.js': ['../assets_source/js/DT.js'],
94 | '../assets/js/myYepnope.min.js': ['js/myYepnope.js'],
95 | '../assets/js/mobile.min.js': ['js/mobile.js'],
96 | }
97 | }
98 | },
99 | });
100 | grunt.loadNpmTasks('grunt-sass');
101 | grunt.loadNpmTasks('grunt-contrib-watch');
102 | grunt.loadNpmTasks('grunt-concat-sourcemap');
103 | grunt.loadNpmTasks('grunt-contrib-uglify');
104 | grunt.loadNpmTasks('grunt-newer');
105 | grunt.registerTask('process',
106 | ['concat_sourcemap',
107 | 'uglify'
108 | ]);
109 | grunt.registerTask('default',
110 | ['sass',
111 | 'concat_sourcemap',
112 | 'uglify',
113 | 'watch']);
114 | }
--------------------------------------------------------------------------------
/assets_source/js/mobile.js:
--------------------------------------------------------------------------------
1 | $(function() {
2 | // Game config
3 | var server = window.location.origin,
4 | hash = window.location.hash,
5 | leftBreakThreshold = -3,
6 | leftTurnThreshold = -20,
7 | rightBreakThreshold = 3,
8 | rightTurnThreshold = 20,
9 | controller = $('#controller'),
10 | $gameCodeInput = $('#gameCodeInput'),
11 | $wheel = $('#wheel'),
12 | $gameover = $('#gameover'),
13 | $preparetostart = $('#preparetostart'),
14 | $status = $('#status'),
15 | turned = false;
16 |
17 | // Technique from Juriy Zaytsev
18 | // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
19 | var eventSupported = function( eventName ) {
20 | var el = document.createElement('div');
21 | eventName = 'on' + eventName;
22 | var isSupported = (eventName in el);
23 | if ( !isSupported ) {
24 | el.setAttribute(eventName, 'return;');
25 | isSupported = typeof el[eventName] === 'function';
26 | }
27 | el = null;
28 | return isSupported;
29 | };
30 | // device orientation
31 | function orientationTest (event) {
32 | if (!turned && event.gamma) turned = true;
33 | window.removeEventListener('deviceorientation', orientationTest, false);
34 | window.removeEventListener('MozOrientation', orientationTest, false);
35 | }
36 | window.addEventListener('deviceorientation', orientationTest, false);
37 | window.addEventListener('MozOrientation', orientationTest, false);
38 | setTimeout(function () {
39 | if (!turned) {
40 | $('#btnLeft').on('touchstart',function () {
41 | socket.emit('click', {'click':'toTheLeft'});
42 | });
43 | $('#btnRight').on('touchstart',function () {
44 | socket.emit('click', {'click':'toTheRight'});
45 | });
46 | $status.html('push buttons to control');
47 | } else {
48 | $status.html('tilt your device to control');
49 | }
50 | if (!eventSupported('touchstart')) {
51 | $status.html('sorry your device not supported');
52 | }
53 | }, 1000);
54 | // When connect is pushed, establish socket connection
55 | var connect = function(gameCode) {
56 | socket = io.connect(server);
57 | // When server replies with initial welcome...
58 | socket.on('welcome', function(data) {
59 | // Send 'controller' device type with our entered game code
60 | socket.emit('device', {'type':'controller', 'gameCode':gameCode});
61 | });
62 | socket.on('message', function(data) {
63 | if (data.type === 'vibr') {
64 | // console.log('vibtare', data.time);
65 | navigator.vibrate(data.time);
66 | }
67 | if (data.type === 'gameover') {
68 | // console.log('gameover');
69 | $wheel.css({display: 'none'});
70 | $gameover.css({display: 'table-cell'});
71 | }
72 | if (data.type === 'resetGame') {
73 | // console.log('resetGame');
74 | $gameover.css({display: 'none'});
75 | $wheel.css({display: 'table-cell'});
76 | }
77 | });
78 | // When game code is validated, we can begin playing...
79 | socket.on('connected', function(data) {
80 | // css {display: 'none'}game code input, and css {display: 'table-cell'}the vehicle $wheel UI
81 | $('#socket').css({display: 'none'});
82 | $preparetostart.css({display: 'table-cell'});
83 | $('#start').click(function () {
84 | socket.emit('start', {});
85 | $(this).unbind('click');
86 | $preparetostart.css({display: 'none'});
87 | $wheel.css({display: 'table-cell'});
88 | // Audio loop - hack for prevent screen sleep
89 | $('#audioloop').trigger('play');
90 | });
91 | // Prevent touchmove event from cancelling the 'touchend' event above
92 | document.addEventListener('touchmove', function(event) {
93 | event.preventDefault();
94 | }, false);
95 |
96 | function orientationHandler (event) {
97 | var a = event.alpha, // 'direction'
98 | b = event.beta, // left/right 'tilt'
99 | g = event.gamma; // forward/back 'tilt'
100 | var turn,
101 | ori = window.orientation;
102 | if (ori === 0) turn = g;
103 | if (ori === 90) turn = b;
104 | if (ori === -90) turn = -b;
105 | socket.emit('turn', {'turn':turn, 'g':a});
106 | }
107 | // Steer the vehicle based on the phone orientation
108 | window.addEventListener('deviceorientation', orientationHandler, false);
109 | window.addEventListener('MozOrientation', orientationHandler, false);
110 | $('#btnSphere').on('touchstart',function () {
111 | socket.emit('click', {'click':'pause'});
112 | $('#audioloop').trigger('play');
113 | });
114 | $('#restart').click(function () {
115 | socket.emit('click', {'click':'restart'});
116 | $gameover.css({display: 'none'});
117 | $wheel.css({display: 'table-cell'});
118 | $('#audioloop').trigger('play');
119 | });
120 | });
121 | socket.on('fail', function() {
122 | $('#status_fail').html('Failed to connect! Check address and code and reload!');
123 | });
124 | $(document).unbind('keyup', connnectOnEnter);
125 | };
126 | if (hash) {
127 | connect(hash.slice(1));
128 | $('#socket').hide();
129 | }
130 | var connnectOnEnter = function (event) {
131 | var k = event.keyCode;
132 | if (k === 13) {
133 | connect($gameCodeInput.val());
134 | }
135 | };
136 | $('#connect').click(function () {
137 | connect($gameCodeInput.val());
138 | });
139 | $(document).bind('keyup', connnectOnEnter);
140 | });
--------------------------------------------------------------------------------
/assets_source/js/myYepnope.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 | var isWebGLSupported,
3 | canvas = document.getElementById('checkwebgl');
4 | if (!window.WebGLRenderingContext) {
5 | // Browser has no idea what WebGL is
6 | isWebGLSupported = false;
7 | } else if (canvas.getContext("webgl") || canvas.getContext("webGlCanvas") || canvas.getContext("moz-webgl") || canvas.getContext("webkit-3d") || canvas.getContext("experimental-webgl")) {
8 | // Can get context
9 | isWebGLSupported = true;
10 | } else {
11 | // Can't get context
12 | isWebGLSupported = false;
13 | }
14 | if (isWebGLSupported) {
15 | var $body = $('body'),
16 | $cc = $('.choose_control'),
17 | maxBlur = 100,
18 | steps = 4,
19 | isWebkitBlurSupported;
20 |
21 | if ($body[0].style.webkitFilter === undefined) {
22 | isWebkitBlurSupported = false;
23 | $cc.css({filter: "url('data:image/svg+xml;utf8,#blur-overlay')"});
24 | } else {
25 | isWebkitBlurSupported = true;
26 | $body[0].style.webkitFilter = 'blur(' + maxBlur + 'px)';
27 | }
28 |
29 | $('#loader').css({display: 'table'});
30 | $cc.css({display: 'table'});
31 |
32 | yepnope.loadCounter = 0;
33 | yepnope.percent = 0;
34 | yepnope.showLoading = function (n) {
35 | yepnope.percent += maxBlur/steps;
36 | yepnope.loadCounter += 1;
37 |
38 | $(".loader").animate({minWidth: Math.round(yepnope.percent)+"px"}, {
39 | duration: 1000,
40 | progress: function () {
41 | var current = parseInt($(".loader").css("minWidth"), 10) * 100/maxBlur;
42 | $("title").html(Math.floor(current) + "% " + "digital trip");
43 | if (isWebkitBlurSupported) {
44 | $body[0].style.webkitFilter = 'blur('+ (maxBlur - current)+ 'px)';
45 | }
46 | if (!isWebkitBlurSupported && current % 20 === 0) {
47 | $cc.css({filter: "url('data:image/svg+xml;utf8,#blur-overlay')"});
48 | }
49 | if (current === 100) {
50 | $("title").html("digital trip");
51 | if (!isWebkitBlurSupported && current % 20 === 0) $cc.css({filter: "url('data:image/svg+xml;utf8,#blur-overlay')"});
52 | }
53 | },
54 | complete: function () {
55 | if (n === steps) {
56 | DT.runApp();
57 | }
58 | }
59 | });
60 | };
61 | yepnope([{
62 | load: [
63 | "js/vendor/three.min.js",
64 | "js/DT.min.js",
65 | "../socket.io/socket.io.js"
66 | ],
67 | callback: {}
68 | }]);
69 | } else {
70 | $('#nogame').css({display: 'table'});
71 | }
72 | });
--------------------------------------------------------------------------------
/assets_source/js/vendor/BadTVShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author Felix Turner / www.airtight.cc / @felixturner
3 | *
4 | * Bad TV Shader
5 | * Simulates a bad TV via horizontal distortion and vertical roll
6 | * Uses Ashima WebGl Noise: https://github.com/ashima/webgl-noise
7 | *
8 | * time: steadily increasing float passed in
9 | * distortion: amount of thick distortion
10 | * distortion2: amount of fine grain distortion
11 | * speed: distortion vertical travel speed
12 | * rollSpeed: vertical roll speed
13 | *
14 | * The MIT License
15 | *
16 | * Copyright (c) 2014 Felix Turner
17 | *
18 | * Permission is hereby granted, free of charge, to any person obtaining a copy
19 | * of this software and associated documentation files (the "Software"), to deal
20 | * in the Software without restriction, including without limitation the rights
21 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
22 | * copies of the Software, and to permit persons to whom the Software is
23 | * furnished to do so, subject to the following conditions:
24 | *
25 | * The above copyright notice and this permission notice shall be included in
26 | * all copies or substantial portions of the Software.
27 | *
28 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
29 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
33 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
34 | * THE SOFTWARE.
35 | *
36 | */
37 |
38 | THREE.BadTVShader = {
39 | uniforms: {
40 | "tDiffuse": { type: "t", value: null },
41 | "time": { type: "f", value: 0.0 },
42 | "distortion": { type: "f", value: 3.0 },
43 | "distortion2": { type: "f", value: 5.0 },
44 | "speed": { type: "f", value: 0.2 },
45 | "rollSpeed": { type: "f", value: 0.1 },
46 | },
47 |
48 | vertexShader: [
49 | "varying vec2 vUv;",
50 | "void main() {",
51 | "vUv = uv;",
52 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
53 | "}"
54 |
55 | ].join("\n"),
56 |
57 | fragmentShader: [
58 |
59 | "uniform sampler2D tDiffuse;",
60 | "uniform float time;",
61 | "uniform float distortion;",
62 | "uniform float distortion2;",
63 | "uniform float speed;",
64 | "uniform float rollSpeed;",
65 | "varying vec2 vUv;",
66 |
67 | // Start Ashima 2D Simplex Noise
68 |
69 | "vec3 mod289(vec3 x) {",
70 | " return x - floor(x * (1.0 / 289.0)) * 289.0;",
71 | "}",
72 |
73 | "vec2 mod289(vec2 x) {",
74 | " return x - floor(x * (1.0 / 289.0)) * 289.0;",
75 | "}",
76 |
77 | "vec3 permute(vec3 x) {",
78 | " return mod289(((x*34.0)+1.0)*x);",
79 | "}",
80 |
81 | "float snoise(vec2 v)",
82 | " {",
83 | " const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0",
84 | " 0.366025403784439, // 0.5*(sqrt(3.0)-1.0)",
85 | " -0.577350269189626, // -1.0 + 2.0 * C.x",
86 | " 0.024390243902439); // 1.0 / 41.0",
87 | " vec2 i = floor(v + dot(v, C.yy) );",
88 | " vec2 x0 = v - i + dot(i, C.xx);",
89 |
90 | " vec2 i1;",
91 | " i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);",
92 | " vec4 x12 = x0.xyxy + C.xxzz;",
93 | " x12.xy -= i1;",
94 |
95 | " i = mod289(i); // Avoid truncation effects in permutation",
96 | " vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))",
97 | " + i.x + vec3(0.0, i1.x, 1.0 ));",
98 |
99 | " vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);",
100 | " m = m*m ;",
101 | " m = m*m ;",
102 |
103 | " vec3 x = 2.0 * fract(p * C.www) - 1.0;",
104 | " vec3 h = abs(x) - 0.5;",
105 | " vec3 ox = floor(x + 0.5);",
106 | " vec3 a0 = x - ox;",
107 |
108 | " m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );",
109 |
110 | " vec3 g;",
111 | " g.x = a0.x * x0.x + h.x * x0.y;",
112 | " g.yz = a0.yz * x12.xz + h.yz * x12.yw;",
113 | " return 130.0 * dot(m, g);",
114 | "}",
115 |
116 | // End Ashima 2D Simplex Noise
117 |
118 | "void main() {",
119 |
120 | "vec2 p = vUv;",
121 | "float ty = time*speed;",
122 | "float yt = p.y - ty;",
123 |
124 | //smooth distortion
125 | "float offset = snoise(vec2(yt*3.0,0.0))*0.2;",
126 | // boost distortion
127 | "offset = pow( offset*distortion,3.0)/distortion;",
128 | //add fine grain distortion
129 | "offset += snoise(vec2(yt*50.0,0.0))*distortion2*0.001;",
130 | //combine distortion on X with roll on Y
131 | "gl_FragColor = texture2D(tDiffuse, vec2(fract(p.x + offset),fract(p.y-time*rollSpeed) ));",
132 |
133 | "}"
134 |
135 | ].join("\n")
136 |
137 | };
138 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/BufferLoader.js:
--------------------------------------------------------------------------------
1 | function BufferLoader(context, urlList, callback) {
2 | this.context = context;
3 | this.urlList = urlList;
4 | this.onload = callback;
5 | this.bufferList = new Array();
6 | this.loadCount = 0;
7 | }
8 |
9 | BufferLoader.prototype.loadBuffer = function(url, index) {
10 | // Load buffer asynchronously
11 | var request = new XMLHttpRequest();
12 | request.open("GET", url, true);
13 | request.responseType = "arraybuffer";
14 |
15 | var loader = this;
16 |
17 | request.onload = function() {
18 | // Asynchronously decode the audio file data in request.response
19 | loader.context.decodeAudioData(
20 | request.response,
21 | function(buffer) {
22 | if (!buffer) {
23 | alert('error decoding file data: ' + url);
24 | return;
25 | }
26 | loader.bufferList[index] = buffer;
27 | if (++loader.loadCount == loader.urlList.length)
28 | loader.onload(loader.bufferList);
29 | }
30 | );
31 | }
32 |
33 | request.onerror = function() {
34 | alert('BufferLoader: XHR error');
35 | }
36 |
37 | request.send();
38 | }
39 |
40 | BufferLoader.prototype.load = function() {
41 | for (var i = 0; i < this.urlList.length; ++i)
42 | this.loadBuffer(this.urlList[i], i);
43 | }
--------------------------------------------------------------------------------
/assets_source/js/vendor/CopyShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | *
4 | * Full-screen textured quad shader
5 | */
6 |
7 | THREE.CopyShader = {
8 |
9 | uniforms: {
10 |
11 | "tDiffuse": { type: "t", value: null },
12 | "opacity": { type: "f", value: 1.0 }
13 |
14 | },
15 |
16 | vertexShader: [
17 |
18 | "varying vec2 vUv;",
19 |
20 | "void main() {",
21 |
22 | "vUv = uv;",
23 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
24 |
25 | "}"
26 |
27 | ].join("\n"),
28 |
29 | fragmentShader: [
30 |
31 | "uniform float opacity;",
32 |
33 | "uniform sampler2D tDiffuse;",
34 |
35 | "varying vec2 vUv;",
36 |
37 | "void main() {",
38 |
39 | "vec4 texel = texture2D( tDiffuse, vUv );",
40 | "gl_FragColor = opacity * texel;",
41 |
42 | "}"
43 |
44 | ].join("\n")
45 |
46 | };
47 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/CurveExtras.js:
--------------------------------------------------------------------------------
1 | /*
2 | * A bunch of parametric curves
3 | * @author zz85
4 | *
5 | * Formulas collected from various sources
6 | * http://mathworld.wolfram.com/HeartCurve.html
7 | * http://mathdl.maa.org/images/upload_library/23/stemkoski/knots/page6.html
8 | * http://en.wikipedia.org/wiki/Viviani%27s_curve
9 | * http://mathdl.maa.org/images/upload_library/23/stemkoski/knots/page4.html
10 | * http://www.mi.sanu.ac.rs/vismath/taylorapril2011/Taylor.pdf
11 | * http://prideout.net/blog/?p=44
12 | */
13 |
14 | // Lets define some curves
15 | THREE.Curves = {};
16 |
17 |
18 | THREE.Curves.GrannyKnot = THREE.Curve.create( function(){},
19 |
20 | function(t) {
21 | t = 2 * Math.PI * t;
22 |
23 | var x = -0.22 * Math.cos(t) - 1.28 * Math.sin(t) - 0.44 * Math.cos(3 * t) - 0.78 * Math.sin(3 * t);
24 | var y = -0.1 * Math.cos(2 * t) - 0.27 * Math.sin(2 * t) + 0.38 * Math.cos(4 * t) + 0.46 * Math.sin(4 * t);
25 | var z = 0.7 * Math.cos(3 * t) - 0.4 * Math.sin(3 * t);
26 | return new THREE.Vector3(x, y, z).multiplyScalar(20);
27 | }
28 | );
29 |
30 | THREE.Curves.HeartCurve = THREE.Curve.create(
31 |
32 | function(s) {
33 |
34 | this.scale = (s === undefined) ? 5 : s;
35 |
36 | },
37 |
38 | function(t) {
39 |
40 | t *= 2 * Math.PI;
41 |
42 | var tx = 16 * Math.pow(Math.sin(t), 3);
43 | var ty = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t), tz = 0;
44 |
45 | return new THREE.Vector3(tx, ty, tz).multiplyScalar(this.scale);
46 |
47 | }
48 |
49 | );
50 |
51 |
52 |
53 | // Viviani's Curve
54 | THREE.Curves.VivianiCurve = THREE.Curve.create(
55 |
56 | function(radius) {
57 |
58 | this.radius = radius;
59 | },
60 |
61 | function(t) {
62 |
63 | t = t * 4 * Math.PI; // Normalized to 0..1
64 | var a = this.radius / 2;
65 | var tx = a * (1 + Math.cos(t)),
66 | ty = a * Math.sin(t),
67 | tz = 2 * a * Math.sin(t / 2);
68 |
69 | return new THREE.Vector3(tx, ty, tz);
70 |
71 | }
72 |
73 | );
74 |
75 |
76 | THREE.Curves.KnotCurve = THREE.Curve.create(
77 |
78 | function() {
79 |
80 | },
81 |
82 | function(t) {
83 |
84 | t *= 2 * Math.PI;
85 |
86 | var R = 10;
87 | var s = 50;
88 | var tx = s * Math.sin(t),
89 | ty = Math.cos(t) * (R + s * Math.cos(t)),
90 | tz = Math.sin(t) * (R + s * Math.cos(t));
91 |
92 | return new THREE.Vector3(tx, ty, tz);
93 |
94 | }
95 |
96 | );
97 |
98 | THREE.Curves.HelixCurve = THREE.Curve.create(
99 |
100 | function() {
101 |
102 | },
103 |
104 | function(t) {
105 |
106 | var a = 30; // radius
107 | var b = 150; //height
108 | var t2 = 2 * Math.PI * t * b / 30;
109 | var tx = Math.cos(t2) * a,
110 | ty = Math.sin(t2) * a,
111 | tz = b * t;
112 |
113 | return new THREE.Vector3(tx, ty, tz);
114 |
115 | }
116 |
117 | );
118 |
119 | THREE.Curves.TrefoilKnot = THREE.Curve.create(
120 |
121 | function(s) {
122 |
123 | this.scale = (s === undefined) ? 10 : s;
124 |
125 | },
126 |
127 | function(t) {
128 |
129 | t *= Math.PI * 2;
130 | var tx = (2 + Math.cos(3 * t)) * Math.cos(2 * t),
131 | ty = (2 + Math.cos(3 * t)) * Math.sin(2 * t),
132 | tz = Math.sin(3 * t);
133 |
134 | return new THREE.Vector3(tx, ty, tz).multiplyScalar(this.scale);
135 |
136 | }
137 |
138 | );
139 |
140 | THREE.Curves.TorusKnot = THREE.Curve.create(
141 |
142 | function(s) {
143 |
144 | this.scale = (s === undefined) ? 10 : s;
145 |
146 | },
147 |
148 | function(t) {
149 |
150 | var p = 3,
151 | q = 4;
152 | t *= Math.PI * 2;
153 | var tx = (2 + Math.cos(q * t)) * Math.cos(p * t),
154 | ty = (2 + Math.cos(q * t)) * Math.sin(p * t),
155 | tz = Math.sin(q * t);
156 |
157 | return new THREE.Vector3(tx, ty, tz).multiplyScalar(this.scale);
158 |
159 | }
160 |
161 | );
162 |
163 |
164 | THREE.Curves.CinquefoilKnot = THREE.Curve.create(
165 |
166 | function(s) {
167 |
168 | this.scale = (s === undefined) ? 10 : s;
169 |
170 | },
171 |
172 | function(t) {
173 |
174 | var p = 2,
175 | q = 5;
176 | t *= Math.PI * 2;
177 | var tx = (2 + Math.cos(q * t)) * Math.cos(p * t),
178 | ty = (2 + Math.cos(q * t)) * Math.sin(p * t),
179 | tz = Math.sin(q * t);
180 |
181 | return new THREE.Vector3(tx, ty, tz).multiplyScalar(this.scale);
182 |
183 | }
184 |
185 | );
186 |
187 |
188 | THREE.Curves.TrefoilPolynomialKnot = THREE.Curve.create(
189 |
190 | function(s) {
191 |
192 | this.scale = (s === undefined) ? 10 : s;
193 |
194 | },
195 |
196 | function(t) {
197 |
198 | t = t * 4 - 2;
199 | var tx = Math.pow(t, 3) - 3 * t,
200 | ty = Math.pow(t, 4) - 4 * t * t,
201 | tz = 1 / 5 * Math.pow(t, 5) - 2 * t;
202 |
203 | return new THREE.Vector3(tx, ty, tz).multiplyScalar(this.scale);
204 |
205 | }
206 |
207 | );
208 |
209 | // var scaleTo = function(x, y) {
210 | // var r = y - x;
211 | // return function(t) {
212 | // t * r + x;
213 | // };
214 | // }
215 | var scaleTo = function(x, y, t) {
216 |
217 | var r = y - x;
218 | return t * r + x;
219 |
220 | }
221 |
222 | THREE.Curves.FigureEightPolynomialKnot = THREE.Curve.create(
223 |
224 | function(s) {
225 |
226 | this.scale = (s === undefined) ? 1 : s;
227 |
228 | },
229 |
230 | function(t) {
231 |
232 | t = scaleTo(-4, 4, t);
233 | var tx = 2 / 5 * t * (t * t - 7) * (t * t - 10),
234 | ty = Math.pow(t, 4) - 13 * t * t,
235 | tz = 1 / 10 * t * (t * t - 4) * (t * t - 9) * (t * t - 12);
236 |
237 | return new THREE.Vector3(tx, ty, tz).multiplyScalar(this.scale);
238 |
239 | }
240 |
241 | );
242 |
243 | THREE.Curves.DecoratedTorusKnot4a = THREE.Curve.create(
244 |
245 | function(s) {
246 |
247 | this.scale = (s === undefined) ? 40 : s;
248 |
249 | },
250 |
251 | function(t) {
252 |
253 | t *= Math.PI * 2;
254 | var
255 | x = Math.cos(2 * t) * (1 + 0.6 * (Math.cos(5 * t) + 0.75 * Math.cos(10 * t))),
256 | y = Math.sin(2 * t) * (1 + 0.6 * (Math.cos(5 * t) + 0.75 * Math.cos(10 * t))),
257 | z = 0.35 * Math.sin(5 * t);
258 |
259 | return new THREE.Vector3(x, y, z).multiplyScalar(this.scale);
260 |
261 | }
262 |
263 | );
264 |
265 |
266 | THREE.Curves.DecoratedTorusKnot4b = THREE.Curve.create(
267 |
268 | function(s) {
269 |
270 | this.scale = (s === undefined) ? 40 : s;
271 |
272 | },
273 |
274 | function(t) {
275 | var fi = t * Math.PI * 2;
276 | var x = Math.cos(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi)),
277 | y = Math.sin(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi)),
278 | z = 0.2 * Math.sin(9 * fi);
279 |
280 | return new THREE.Vector3(x, y, z).multiplyScalar(this.scale);
281 |
282 | }
283 |
284 | );
285 |
286 |
287 | THREE.Curves.DecoratedTorusKnot5a = THREE.Curve.create(
288 |
289 | function(s) {
290 |
291 | this.scale = (s === undefined) ? 40 : s;
292 |
293 | },
294 |
295 | function(t) {
296 |
297 | var fi = t * Math.PI * 2;
298 | var x = Math.cos(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi)),
299 | y = Math.sin(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi)),
300 | z = 0.2 * Math.sin(20 * fi);
301 |
302 | return new THREE.Vector3(x, y, z).multiplyScalar(this.scale);
303 |
304 | }
305 |
306 | );
307 |
308 | THREE.Curves.DecoratedTorusKnot5c = THREE.Curve.create(
309 |
310 | function(s) {
311 |
312 | this.scale = (s === undefined) ? 40 : s;
313 |
314 | },
315 |
316 | function(t) {
317 |
318 | var fi = t * Math.PI * 2;
319 | var x = Math.cos(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi))),
320 | y = Math.sin(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi))),
321 | z = 0.35 * Math.sin(15 * fi);
322 |
323 | return new THREE.Vector3(x, y, z).multiplyScalar(this.scale);
324 |
325 | }
326 |
327 | );
--------------------------------------------------------------------------------
/assets_source/js/vendor/Detector.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | * @author mr.doob / http://mrdoob.com/
4 | */
5 |
6 | var Detector = {
7 |
8 | canvas: !! window.CanvasRenderingContext2D,
9 | webgl: ( function () { try { return !! window.WebGLRenderingContext && !! document.createElement( 'canvas' ).getContext( 'experimental-webgl' ); } catch( e ) { return false; } } )(),
10 | workers: !! window.Worker,
11 | fileapi: window.File && window.FileReader && window.FileList && window.Blob,
12 |
13 | getWebGLErrorMessage: function () {
14 |
15 | var element = document.createElement( 'div' );
16 | element.id = 'webgl-error-message';
17 | element.style.fontFamily = 'monospace';
18 | element.style.fontSize = '13px';
19 | element.style.fontWeight = 'normal';
20 | element.style.textAlign = 'center';
21 | element.style.background = '#fff';
22 | element.style.color = '#000';
23 | element.style.padding = '1.5em';
24 | element.style.width = '400px';
25 | element.style.margin = '5em auto 0';
26 |
27 | if ( ! this.webgl ) {
28 |
29 | element.innerHTML = window.WebGLRenderingContext ? [
30 | 'Your graphics card does not seem to support WebGL.
',
31 | 'Find out how to get it here.'
32 | ].join( '\n' ) : [
33 | 'Your browser does not seem to support WebGL.
',
34 | 'Find out how to get it here.'
35 | ].join( '\n' );
36 |
37 | }
38 |
39 | return element;
40 |
41 | },
42 |
43 | addGetWebGLMessage: function ( parameters ) {
44 |
45 | var parent, id, element;
46 |
47 | parameters = parameters || {};
48 |
49 | parent = parameters.parent !== undefined ? parameters.parent : document.body;
50 | id = parameters.id !== undefined ? parameters.id : 'oldie';
51 |
52 | element = Detector.getWebGLErrorMessage();
53 | element.id = id;
54 |
55 | parent.appendChild( element );
56 |
57 | }
58 |
59 | };
60 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/EffectComposer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | */
4 |
5 | THREE.EffectComposer = function ( renderer, renderTarget ) {
6 |
7 | this.renderer = renderer;
8 |
9 | if ( renderTarget === undefined ) {
10 |
11 | var width = window.innerWidth || 1;
12 | var height = window.innerHeight || 1;
13 | var parameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat, stencilBuffer: false };
14 |
15 | renderTarget = new THREE.WebGLRenderTarget( width, height, parameters );
16 |
17 | }
18 |
19 | this.renderTarget1 = renderTarget;
20 | this.renderTarget2 = renderTarget.clone();
21 |
22 | this.writeBuffer = this.renderTarget1;
23 | this.readBuffer = this.renderTarget2;
24 |
25 | this.passes = [];
26 |
27 | if ( THREE.CopyShader === undefined )
28 | console.error( "THREE.EffectComposer relies on THREE.CopyShader" );
29 |
30 | this.copyPass = new THREE.ShaderPass( THREE.CopyShader );
31 |
32 | };
33 |
34 | THREE.EffectComposer.prototype = {
35 |
36 | swapBuffers: function() {
37 |
38 | var tmp = this.readBuffer;
39 | this.readBuffer = this.writeBuffer;
40 | this.writeBuffer = tmp;
41 |
42 | },
43 |
44 | addPass: function ( pass ) {
45 |
46 | this.passes.push( pass );
47 |
48 | },
49 |
50 | insertPass: function ( pass, index ) {
51 |
52 | this.passes.splice( index, 0, pass );
53 |
54 | },
55 |
56 | render: function ( delta ) {
57 |
58 | this.writeBuffer = this.renderTarget1;
59 | this.readBuffer = this.renderTarget2;
60 |
61 | var maskActive = false;
62 |
63 | var pass, i, il = this.passes.length;
64 |
65 | for ( i = 0; i < il; i ++ ) {
66 |
67 | pass = this.passes[ i ];
68 |
69 | if ( !pass.enabled ) continue;
70 |
71 | pass.render( this.renderer, this.writeBuffer, this.readBuffer, delta, maskActive );
72 |
73 | if ( pass.needsSwap ) {
74 |
75 | if ( maskActive ) {
76 |
77 | var context = this.renderer.context;
78 |
79 | context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );
80 |
81 | this.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, delta );
82 |
83 | context.stencilFunc( context.EQUAL, 1, 0xffffffff );
84 |
85 | }
86 |
87 | this.swapBuffers();
88 |
89 | }
90 |
91 | if ( pass instanceof THREE.MaskPass ) {
92 |
93 | maskActive = true;
94 |
95 | } else if ( pass instanceof THREE.ClearMaskPass ) {
96 |
97 | maskActive = false;
98 |
99 | }
100 |
101 | }
102 |
103 | },
104 |
105 | reset: function ( renderTarget ) {
106 |
107 | if ( renderTarget === undefined ) {
108 |
109 | renderTarget = this.renderTarget1.clone();
110 |
111 | renderTarget.width = window.innerWidth;
112 | renderTarget.height = window.innerHeight;
113 |
114 | }
115 |
116 | this.renderTarget1 = renderTarget;
117 | this.renderTarget2 = renderTarget.clone();
118 |
119 | this.writeBuffer = this.renderTarget1;
120 | this.readBuffer = this.renderTarget2;
121 |
122 | },
123 |
124 | setSize: function ( width, height ) {
125 |
126 | var renderTarget = this.renderTarget1.clone();
127 |
128 | renderTarget.width = width;
129 | renderTarget.height = height;
130 |
131 | this.reset( renderTarget );
132 |
133 | }
134 |
135 | };
136 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/MaskPass.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | */
4 |
5 | THREE.MaskPass = function ( scene, camera ) {
6 |
7 | this.scene = scene;
8 | this.camera = camera;
9 |
10 | this.enabled = true;
11 | this.clear = true;
12 | this.needsSwap = false;
13 |
14 | this.inverse = false;
15 |
16 | };
17 |
18 | THREE.MaskPass.prototype = {
19 |
20 | render: function ( renderer, writeBuffer, readBuffer, delta ) {
21 |
22 | var context = renderer.context;
23 |
24 | // don't update color or depth
25 |
26 | context.colorMask( false, false, false, false );
27 | context.depthMask( false );
28 |
29 | // set up stencil
30 |
31 | var writeValue, clearValue;
32 |
33 | if ( this.inverse ) {
34 |
35 | writeValue = 0;
36 | clearValue = 1;
37 |
38 | } else {
39 |
40 | writeValue = 1;
41 | clearValue = 0;
42 |
43 | }
44 |
45 | context.enable( context.STENCIL_TEST );
46 | context.stencilOp( context.REPLACE, context.REPLACE, context.REPLACE );
47 | context.stencilFunc( context.ALWAYS, writeValue, 0xffffffff );
48 | context.clearStencil( clearValue );
49 |
50 | // draw into the stencil buffer
51 |
52 | renderer.render( this.scene, this.camera, readBuffer, this.clear );
53 | renderer.render( this.scene, this.camera, writeBuffer, this.clear );
54 |
55 | // re-enable update of color and depth
56 |
57 | context.colorMask( true, true, true, true );
58 | context.depthMask( true );
59 |
60 | // only render where stencil is set to 1
61 |
62 | context.stencilFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1
63 | context.stencilOp( context.KEEP, context.KEEP, context.KEEP );
64 |
65 | }
66 |
67 | };
68 |
69 |
70 | THREE.ClearMaskPass = function () {
71 |
72 | this.enabled = true;
73 |
74 | };
75 |
76 | THREE.ClearMaskPass.prototype = {
77 |
78 | render: function ( renderer, writeBuffer, readBuffer, delta ) {
79 |
80 | var context = renderer.context;
81 |
82 | context.disable( context.STENCIL_TEST );
83 |
84 | }
85 |
86 | };
87 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/OBJLoader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | THREE.OBJLoader = function ( manager ) {
6 |
7 | this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
8 |
9 | };
10 |
11 | THREE.OBJLoader.prototype = {
12 |
13 | constructor: THREE.OBJLoader,
14 |
15 | load: function ( url, onLoad, onProgress, onError ) {
16 |
17 | var scope = this;
18 |
19 | var loader = new THREE.XHRLoader( scope.manager );
20 | loader.setCrossOrigin( this.crossOrigin );
21 | loader.load( url, function ( text ) {
22 |
23 | onLoad( scope.parse( text ) );
24 |
25 | } );
26 |
27 | },
28 |
29 | parse: function ( text ) {
30 |
31 | function vector( x, y, z ) {
32 |
33 | return new THREE.Vector3( parseFloat( x ), parseFloat( y ), parseFloat( z ) );
34 |
35 | }
36 |
37 | function uv( u, v ) {
38 |
39 | return new THREE.Vector2( parseFloat( u ), parseFloat( v ) );
40 |
41 | }
42 |
43 | function face3( a, b, c, normals ) {
44 |
45 | return new THREE.Face3( a, b, c, normals );
46 |
47 | }
48 |
49 | var object = new THREE.Object3D();
50 | var geometry, material, mesh;
51 |
52 | function parseVertexIndex( index ) {
53 |
54 | index = parseInt( index );
55 |
56 | return index >= 0 ? index - 1 : index + vertices.length;
57 |
58 | }
59 |
60 | function parseNormalIndex( index ) {
61 |
62 | index = parseInt( index );
63 |
64 | return index >= 0 ? index - 1 : index + normals.length;
65 |
66 | }
67 |
68 | function parseUVIndex( index ) {
69 |
70 | index = parseInt( index );
71 |
72 | return index >= 0 ? index - 1 : index + uvs.length;
73 |
74 | }
75 |
76 | function add_face( a, b, c, normals_inds ) {
77 |
78 | if ( normals_inds === undefined ) {
79 |
80 | geometry.faces.push( face3(
81 | vertices[ parseVertexIndex( a ) ] - 1,
82 | vertices[ parseVertexIndex( b ) ] - 1,
83 | vertices[ parseVertexIndex( c ) ] - 1
84 | ) );
85 |
86 | } else {
87 |
88 | geometry.faces.push( face3(
89 | vertices[ parseVertexIndex( a ) ] - 1,
90 | vertices[ parseVertexIndex( b ) ] - 1,
91 | vertices[ parseVertexIndex( c ) ] - 1,
92 | [
93 | normals[ parseNormalIndex( normals_inds[ 0 ] ) ].clone(),
94 | normals[ parseNormalIndex( normals_inds[ 1 ] ) ].clone(),
95 | normals[ parseNormalIndex( normals_inds[ 2 ] ) ].clone()
96 | ]
97 | ) );
98 |
99 | }
100 |
101 | }
102 |
103 | function add_uvs( a, b, c ) {
104 |
105 | geometry.faceVertexUvs[ 0 ].push( [
106 | uvs[ parseUVIndex( a ) ].clone(),
107 | uvs[ parseUVIndex( b ) ].clone(),
108 | uvs[ parseUVIndex( c ) ].clone()
109 | ] );
110 |
111 | }
112 |
113 | function handle_face_line(faces, uvs, normals_inds) {
114 |
115 | if ( faces[ 3 ] === undefined ) {
116 |
117 | add_face( faces[ 0 ], faces[ 1 ], faces[ 2 ], normals_inds );
118 |
119 | if ( uvs !== undefined && uvs.length > 0 ) {
120 |
121 | add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 2 ] );
122 |
123 | }
124 |
125 | } else {
126 |
127 | if ( normals_inds !== undefined && normals_inds.length > 0 ) {
128 |
129 | add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ], [ normals_inds[ 0 ], normals_inds[ 1 ], normals_inds[ 3 ] ] );
130 | add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ], [ normals_inds[ 1 ], normals_inds[ 2 ], normals_inds[ 3 ] ] );
131 |
132 | } else {
133 |
134 | add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ] );
135 | add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ] );
136 |
137 | }
138 |
139 | if ( uvs !== undefined && uvs.length > 0 ) {
140 |
141 | add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 3 ] );
142 | add_uvs( uvs[ 1 ], uvs[ 2 ], uvs[ 3 ] );
143 |
144 | }
145 |
146 | }
147 |
148 | }
149 |
150 | // create mesh if no objects in text
151 |
152 | if ( /^o /gm.test( text ) === false ) {
153 |
154 | geometry = new THREE.Geometry();
155 | material = new THREE.MeshLambertMaterial();
156 | mesh = new THREE.Mesh( geometry, material );
157 | object.add( mesh );
158 |
159 | }
160 |
161 | var vertices = [];
162 | var normals = [];
163 | var uvs = [];
164 |
165 | // v float float float
166 |
167 | var vertex_pattern = /v( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/;
168 |
169 | // vn float float float
170 |
171 | var normal_pattern = /vn( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/;
172 |
173 | // vt float float
174 |
175 | var uv_pattern = /vt( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/;
176 |
177 | // f vertex vertex vertex ...
178 |
179 | var face_pattern1 = /f( +-?\d+)( +-?\d+)( +-?\d+)( +-?\d+)?/;
180 |
181 | // f vertex/uv vertex/uv vertex/uv ...
182 |
183 | var face_pattern2 = /f( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))?/;
184 |
185 | // f vertex/uv/normal vertex/uv/normal vertex/uv/normal ...
186 |
187 | var face_pattern3 = /f( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))?/;
188 |
189 | // f vertex//normal vertex//normal vertex//normal ...
190 |
191 | var face_pattern4 = /f( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))?/
192 |
193 | //
194 |
195 | var lines = text.split( '\n' );
196 |
197 | for ( var i = 0; i < lines.length; i ++ ) {
198 |
199 | var line = lines[ i ];
200 | line = line.trim();
201 |
202 | var result;
203 |
204 | if ( line.length === 0 || line.charAt( 0 ) === '#' ) {
205 |
206 | continue;
207 |
208 | } else if ( ( result = vertex_pattern.exec( line ) ) !== null ) {
209 |
210 | // ["v 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
211 |
212 | vertices.push(
213 | geometry.vertices.push(
214 | vector(
215 | result[ 1 ], result[ 2 ], result[ 3 ]
216 | )
217 | )
218 | );
219 |
220 | } else if ( ( result = normal_pattern.exec( line ) ) !== null ) {
221 |
222 | // ["vn 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
223 |
224 | normals.push(
225 | vector(
226 | result[ 1 ], result[ 2 ], result[ 3 ]
227 | )
228 | );
229 |
230 | } else if ( ( result = uv_pattern.exec( line ) ) !== null ) {
231 |
232 | // ["vt 0.1 0.2", "0.1", "0.2"]
233 |
234 | uvs.push(
235 | uv(
236 | result[ 1 ], result[ 2 ]
237 | )
238 | );
239 |
240 | } else if ( ( result = face_pattern1.exec( line ) ) !== null ) {
241 |
242 | // ["f 1 2 3", "1", "2", "3", undefined]
243 |
244 | handle_face_line(
245 | [ result[ 1 ], result[ 2 ], result[ 3 ], result[ 4 ] ]
246 | );
247 |
248 | } else if ( ( result = face_pattern2.exec( line ) ) !== null ) {
249 |
250 | // ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined]
251 |
252 | handle_face_line(
253 | [ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces
254 | [ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //uv
255 | );
256 |
257 | } else if ( ( result = face_pattern3.exec( line ) ) !== null ) {
258 |
259 | // ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined]
260 |
261 | handle_face_line(
262 | [ result[ 2 ], result[ 6 ], result[ 10 ], result[ 14 ] ], //faces
263 | [ result[ 3 ], result[ 7 ], result[ 11 ], result[ 15 ] ], //uv
264 | [ result[ 4 ], result[ 8 ], result[ 12 ], result[ 16 ] ] //normal
265 | );
266 |
267 | } else if ( ( result = face_pattern4.exec( line ) ) !== null ) {
268 |
269 | // ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined]
270 |
271 | handle_face_line(
272 | [ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces
273 | [ ], //uv
274 | [ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //normal
275 | );
276 |
277 | } else if ( /^o /.test( line ) ) {
278 |
279 | geometry = new THREE.Geometry();
280 | material = new THREE.MeshLambertMaterial();
281 |
282 | mesh = new THREE.Mesh( geometry, material );
283 | mesh.name = line.substring( 2 ).trim();
284 | object.add( mesh );
285 |
286 | } else if ( /^g /.test( line ) ) {
287 |
288 | // group
289 |
290 | } else if ( /^usemtl /.test( line ) ) {
291 |
292 | // material
293 |
294 | material.name = line.substring( 7 ).trim();
295 |
296 | } else if ( /^mtllib /.test( line ) ) {
297 |
298 | // mtl file
299 |
300 | } else if ( /^s /.test( line ) ) {
301 |
302 | // smooth shading
303 |
304 | } else {
305 |
306 | // console.log( "THREE.OBJLoader: Unhandled line " + line );
307 |
308 | }
309 |
310 | }
311 |
312 | var children = object.children;
313 |
314 | for ( var i = 0, l = children.length; i < l; i ++ ) {
315 |
316 | var geometry = children[ i ].geometry;
317 |
318 | geometry.computeFaceNormals();
319 | geometry.computeBoundingSphere();
320 |
321 | }
322 |
323 | return object;
324 |
325 | }
326 |
327 | };
--------------------------------------------------------------------------------
/assets_source/js/vendor/RenderPass.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | */
4 |
5 | THREE.RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) {
6 |
7 | this.scene = scene;
8 | this.camera = camera;
9 |
10 | this.overrideMaterial = overrideMaterial;
11 |
12 | this.clearColor = clearColor;
13 | this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 1;
14 |
15 | this.oldClearColor = new THREE.Color();
16 | this.oldClearAlpha = 1;
17 |
18 | this.enabled = true;
19 | this.clear = true;
20 | this.needsSwap = false;
21 |
22 | };
23 |
24 | THREE.RenderPass.prototype = {
25 |
26 | render: function ( renderer, writeBuffer, readBuffer, delta ) {
27 |
28 | this.scene.overrideMaterial = this.overrideMaterial;
29 |
30 | if ( this.clearColor ) {
31 |
32 | this.oldClearColor.copy( renderer.getClearColor() );
33 | this.oldClearAlpha = renderer.getClearAlpha();
34 |
35 | renderer.setClearColor( this.clearColor, this.clearAlpha );
36 |
37 | }
38 |
39 | renderer.render( this.scene, this.camera, readBuffer, this.clear );
40 |
41 | if ( this.clearColor ) {
42 |
43 | renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
44 |
45 | }
46 |
47 | this.scene.overrideMaterial = null;
48 |
49 | }
50 |
51 | };
52 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/ShaderPass.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | */
4 |
5 | THREE.ShaderPass = function ( shader, textureID ) {
6 |
7 | this.textureID = ( textureID !== undefined ) ? textureID : "tDiffuse";
8 |
9 | this.uniforms = THREE.UniformsUtils.clone( shader.uniforms );
10 |
11 | this.material = new THREE.ShaderMaterial( {
12 |
13 | uniforms: this.uniforms,
14 | vertexShader: shader.vertexShader,
15 | fragmentShader: shader.fragmentShader
16 |
17 | } );
18 |
19 | this.renderToScreen = false;
20 |
21 | this.enabled = true;
22 | this.needsSwap = true;
23 | this.clear = false;
24 |
25 |
26 | this.camera = new THREE.OrthographicCamera( -1, 1, 1, -1, 0, 1 );
27 | this.scene = new THREE.Scene();
28 |
29 | this.quad = new THREE.Mesh( new THREE.PlaneGeometry( 2, 2 ), null );
30 | this.scene.add( this.quad );
31 |
32 | };
33 |
34 | THREE.ShaderPass.prototype = {
35 |
36 | render: function ( renderer, writeBuffer, readBuffer, delta ) {
37 |
38 | if ( this.uniforms[ this.textureID ] ) {
39 |
40 | this.uniforms[ this.textureID ].value = readBuffer;
41 |
42 | }
43 |
44 | this.quad.material = this.material;
45 |
46 | if ( this.renderToScreen ) {
47 |
48 | renderer.render( this.scene, this.camera );
49 |
50 | } else {
51 |
52 | renderer.render( this.scene, this.camera, writeBuffer, this.clear );
53 |
54 | }
55 |
56 | }
57 |
58 | };
59 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/Stats.js:
--------------------------------------------------------------------------------
1 | // stats.js - http://github.com/mrdoob/stats.js
2 | var Stats=function(){var l=Date.now(),m=l,g=0,n=Infinity,o=0,h=0,p=Infinity,q=0,r=0,s=0,f=document.createElement("div");f.id="stats";f.addEventListener("mousedown",function(b){b.preventDefault();t(++s%2)},!1);f.style.cssText="width:80px;opacity:0.9;cursor:pointer";var a=document.createElement("div");a.id="fps";a.style.cssText="padding:0 0 3px 3px;text-align:left;background-color:#002";f.appendChild(a);var i=document.createElement("div");i.id="fpsText";i.style.cssText="color:#0ff;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px";
3 | i.innerHTML="FPS";a.appendChild(i);var c=document.createElement("div");c.id="fpsGraph";c.style.cssText="position:relative;width:74px;height:30px;background-color:#0ff";for(a.appendChild(c);74>c.children.length;){var j=document.createElement("span");j.style.cssText="width:1px;height:30px;float:left;background-color:#113";c.appendChild(j)}var d=document.createElement("div");d.id="ms";d.style.cssText="padding:0 0 3px 3px;text-align:left;background-color:#020;display:none";f.appendChild(d);var k=document.createElement("div");
4 | k.id="msText";k.style.cssText="color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px";k.innerHTML="MS";d.appendChild(k);var e=document.createElement("div");e.id="msGraph";e.style.cssText="position:relative;width:74px;height:30px;background-color:#0f0";for(d.appendChild(e);74>e.children.length;)j=document.createElement("span"),j.style.cssText="width:1px;height:30px;float:left;background-color:#131",e.appendChild(j);var t=function(b){s=b;switch(s){case 0:a.style.display=
5 | "block";d.style.display="none";break;case 1:a.style.display="none",d.style.display="block"}};return{REVISION:11,domElement:f,setMode:t,begin:function(){l=Date.now()},end:function(){var b=Date.now();g=b-l;n=Math.min(n,g);o=Math.max(o,g);k.textContent=g+" MS ("+n+"-"+o+")";var a=Math.min(30,30-30*(g/200));e.appendChild(e.firstChild).style.height=a+"px";r++;b>m+1E3&&(h=Math.round(1E3*r/(b-m)),p=Math.min(p,h),q=Math.max(q,h),i.textContent=h+" FPS ("+p+"-"+q+")",a=Math.min(30,30-30*(h/100)),c.appendChild(c.firstChild).style.height=
6 | a+"px",m=b,r=0);return b},update:function(){l=this.end()}}};
7 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/THREEx.FullScreen.js:
--------------------------------------------------------------------------------
1 | // This THREEx helper makes it easy to handle the fullscreen API
2 | // * it hides the prefix for each browser
3 | // * it hides the little discrepencies of the various vendor API
4 | // * at the time of this writing (nov 2011) it is available in
5 | // [firefox nightly](http://blog.pearce.org.nz/2011/11/firefoxs-html-full-screen-api-enabled.html),
6 | // [webkit nightly](http://peter.sh/2011/01/javascript-full-screen-api-navigation-timing-and-repeating-css-gradients/) and
7 | // [chrome stable](http://updates.html5rocks.com/2011/10/Let-Your-Content-Do-the-Talking-Fullscreen-API).
8 |
9 | //
10 | // # Code
11 |
12 | //
13 |
14 | /** @namespace */
15 | var THREEx = THREEx || {};
16 | THREEx.FullScreen = THREEx.FullScreen || {};
17 |
18 | /**
19 | * test if it is possible to have fullscreen
20 | *
21 | * @returns {Boolean} true if fullscreen API is available, false otherwise
22 | */
23 | THREEx.FullScreen.available = function()
24 | {
25 | return this._hasWebkitFullScreen || this._hasMozFullScreen;
26 | }
27 |
28 | /**
29 | * test if fullscreen is currently activated
30 | *
31 | * @returns {Boolean} true if fullscreen is currently activated, false otherwise
32 | */
33 | THREEx.FullScreen.activated = function()
34 | {
35 | if( this._hasWebkitFullScreen ){
36 | return document.webkitIsFullScreen;
37 | }else if( this._hasMozFullScreen ){
38 | return document.mozFullScreen;
39 | }else{
40 | console.assert(false);
41 | }
42 | }
43 |
44 | /**
45 | * Request fullscreen on a given element
46 | * @param {DomElement} element to make fullscreen. optional. default to document.body
47 | */
48 | THREEx.FullScreen.request = function(element)
49 | {
50 | element = element || document.body;
51 | if( this._hasWebkitFullScreen ){
52 | element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
53 | }else if( this._hasMozFullScreen ){
54 | element.mozRequestFullScreen();
55 | }else{
56 | console.assert(false);
57 | }
58 | }
59 |
60 | /**
61 | * Cancel fullscreen
62 | */
63 | THREEx.FullScreen.cancel = function()
64 | {
65 | if( this._hasWebkitFullScreen ){
66 | document.webkitCancelFullScreen();
67 | }else if( this._hasMozFullScreen ){
68 | document.mozCancelFullScreen();
69 | }else{
70 | console.assert(false);
71 | }
72 | }
73 |
74 |
75 | // internal functions to know which fullscreen API implementation is available
76 | THREEx.FullScreen._hasWebkitFullScreen = 'webkitCancelFullScreen' in document ? true : false;
77 | THREEx.FullScreen._hasMozFullScreen = 'mozCancelFullScreen' in document ? true : false;
78 |
79 | /**
80 | * Bind a key to renderer screenshot
81 | */
82 | THREEx.FullScreen.bindKey = function(opts){
83 | opts = opts || {};
84 | var charCode = opts.charCode || 'f'.charCodeAt(0);
85 | var dblclick = opts.dblclick !== undefined ? opts.dblclick : false;
86 | var element = opts.element
87 |
88 | var toggle = function(){
89 | if( THREEx.FullScreen.activated() ){
90 | THREEx.FullScreen.cancel();
91 | }else{
92 | THREEx.FullScreen.request(element);
93 | }
94 | }
95 |
96 | // callback to handle keypress
97 | var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
98 | var onKeyPress = __bind(function(event){
99 | // return now if the KeyPress isnt for the proper charCode
100 | if( event.which !== charCode ) return;
101 | // toggle fullscreen
102 | toggle();
103 | }, this);
104 |
105 | // listen to keypress
106 | // NOTE: for firefox it seems mandatory to listen to document directly
107 | document.addEventListener('keypress', onKeyPress, false);
108 | // listen to dblclick
109 | dblclick && document.addEventListener('dblclick', toggle, false);
110 |
111 | return {
112 | unbind : function(){
113 | document.removeEventListener('keypress', onKeyPress, false);
114 | dblclick && document.removeEventListener('dblclick', toggle, false);
115 | }
116 | };
117 | }
118 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/favico-0.3.4.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @license MIT
3 | * @fileOverview Favico animations
4 | * @author Miroslav Magda, http://blog.ejci.net
5 | * @version 0.3.4
6 | */
7 | !function(){var e=function(e){"use strict";function t(e){if(e.paused||e.ended||w)return!1;try{f.clearRect(0,0,h,s),f.drawImage(e,0,0,h,s)}catch(o){}p=setTimeout(t,k.duration,e),R.setIcon(c)}function o(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(t,function(e,t,o,n){return t+t+o+o+n+n});var o=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return o?{r:parseInt(o[1],16),g:parseInt(o[2],16),b:parseInt(o[3],16)}:!1}function n(e,t){var o,n={};for(o in e)n[o]=e[o];for(o in t)n[o]=t[o];return n}function i(){return document.hidden||document.msHidden||document.webkitHidden||document.mozHidden}e=e?e:{};var r,a,s,h,c,f,l,d,u,y,g,w,m,x,p,b={bgColor:"#d00",textColor:"#fff",fontFamily:"sans-serif",fontStyle:"bold",type:"circle",position:"down",animation:"slide",elementId:!1};m={},m.ff=/firefox/i.test(navigator.userAgent.toLowerCase()),m.chrome=/chrome/i.test(navigator.userAgent.toLowerCase()),m.opera=/opera/i.test(navigator.userAgent.toLowerCase()),m.ie=/msie/i.test(navigator.userAgent.toLowerCase())||/trident/i.test(navigator.userAgent.toLowerCase()),m.supported=m.chrome||m.ff||m.opera;var v=[];g=function(){},d=w=!1;var C=function(){r=n(b,e),r.bgColor=o(r.bgColor),r.textColor=o(r.textColor),r.position=r.position.toLowerCase(),r.animation=k.types[""+r.animation]?r.animation:b.animation;var t=r.position.indexOf("up")>-1,i=r.position.indexOf("left")>-1;if(t||i)for(var d=0;d0?l.height:32,h=l.width>0?l.width:32,c.height=s,c.width=h,f=c.getContext("2d"),M.ready()}):(l.setAttribute("src",""),s=32,h=32,l.height=s,l.width=h,c.height=s,c.width=h,f=c.getContext("2d"),M.ready())}catch(y){throw"Error initializing favico. Message: "+y.message}},M={};M.ready=function(){d=!0,M.reset(),g()},M.reset=function(){d&&(v=[],u=!1,f.clearRect(0,0,h,s),f.drawImage(l,0,0,h,s),R.setIcon(c),window.clearTimeout(x),window.clearTimeout(p))},M.start=function(){if(d&&!y){var e=function(){u=v[0],y=!1,v.length>0&&(v.shift(),M.start())};if(v.length>0){y=!0;var t=function(){["type","animation","bgColor","textColor","fontFamily","fontStyle"].forEach(function(e){e in v[0].options&&(r[e]=v[0].options[e])}),k.run(v[0].options,function(){e()},!1)};u?k.run(u.options,function(){t()},!0):t()}}};var I={},A=function(e){return e.n="number"==typeof e.n?Math.abs(0|e.n):e.n,e.x=h*e.x,e.y=s*e.y,e.w=h*e.w,e.h=s*e.h,e.len=(""+e.n).length,e};I.circle=function(e){e=A(e);var t=!1;2===e.len?(e.x=e.x-.4*e.w,e.w=1.4*e.w,t=!0):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w,t=!0),f.clearRect(0,0,h,s),f.drawImage(l,0,0,h,s),f.beginPath(),f.font=r.fontStyle+" "+Math.floor(e.h*(e.n>99?.85:1))+"px "+r.fontFamily,f.textAlign="center",t?(f.moveTo(e.x+e.w/2,e.y),f.lineTo(e.x+e.w-e.h/2,e.y),f.quadraticCurveTo(e.x+e.w,e.y,e.x+e.w,e.y+e.h/2),f.lineTo(e.x+e.w,e.y+e.h-e.h/2),f.quadraticCurveTo(e.x+e.w,e.y+e.h,e.x+e.w-e.h/2,e.y+e.h),f.lineTo(e.x+e.h/2,e.y+e.h),f.quadraticCurveTo(e.x,e.y+e.h,e.x,e.y+e.h-e.h/2),f.lineTo(e.x,e.y+e.h/2),f.quadraticCurveTo(e.x,e.y,e.x+e.h/2,e.y)):f.arc(e.x+e.w/2,e.y+e.h/2,e.h/2,0,2*Math.PI),f.fillStyle="rgba("+r.bgColor.r+","+r.bgColor.g+","+r.bgColor.b+","+e.o+")",f.fill(),f.closePath(),f.beginPath(),f.stroke(),f.fillStyle="rgba("+r.textColor.r+","+r.textColor.g+","+r.textColor.b+","+e.o+")","number"==typeof e.n&&e.n>999?f.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):f.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),f.closePath()},I.rectangle=function(e){e=A(e);var t=!1;2===e.len?(e.x=e.x-.4*e.w,e.w=1.4*e.w,t=!0):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w,t=!0),f.clearRect(0,0,h,s),f.drawImage(l,0,0,h,s),f.beginPath(),f.font="bold "+Math.floor(e.h*(e.n>99?.9:1))+"px sans-serif",f.textAlign="center",f.fillStyle="rgba("+r.bgColor.r+","+r.bgColor.g+","+r.bgColor.b+","+e.o+")",f.fillRect(e.x,e.y,e.w,e.h),f.fillStyle="rgba("+r.textColor.r+","+r.textColor.g+","+r.textColor.b+","+e.o+")","number"==typeof e.n&&e.len>3?f.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):f.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),f.closePath()};var E=function(e,t){t=("string"==typeof t?{animation:t}:t)||{},g=function(){try{if("number"==typeof e?e>0:""!==e){var n={type:"badge",options:{n:e}};if("animation"in t&&k.types[""+t.animation]&&(n.options.animation=""+t.animation),"type"in t&&I[""+t.type]&&(n.options.type=""+t.type),["bgColor","textColor"].forEach(function(e){e in t&&(n.options[e]=o(t[e]))}),["fontStyle","fontFamily"].forEach(function(e){e in t&&(n.options[e]=t[e])}),v.push(n),v.length>100)throw"Too many badges requests in queue.";M.start()}else M.reset()}catch(i){throw"Error setting badge. Message: "+i.message}},d&&g()},T=function(e){g=function(){try{var t=e.width,o=e.height,n=document.createElement("img"),i=o/s>t/h?t/h:o/s;n.setAttribute("src",e.getAttribute("src")),n.height=o/i,n.width=t/i,f.clearRect(0,0,h,s),f.drawImage(n,0,0,h,s),R.setIcon(c)}catch(r){throw"Error setting image. Message: "+r.message}},d&&g()},L=function(e){g=function(){try{if("stop"===e)return w=!0,M.reset(),void(w=!1);e.addEventListener("play",function(){t(this)},!1)}catch(o){throw"Error setting video. Message: "+o.message}},d&&g()},U=function(e){if(window.URL&&window.URL.createObjectURL||(window.URL=window.URL||{},window.URL.createObjectURL=function(e){return e}),m.supported){var o=!1;navigator.getUserMedia=navigator.getUserMedia||navigator.oGetUserMedia||navigator.msGetUserMedia||navigator.mozGetUserMedia||navigator.webkitGetUserMedia,g=function(){try{if("stop"===e)return w=!0,M.reset(),void(w=!1);o=document.createElement("video"),o.width=h,o.height=s,navigator.getUserMedia({video:!0,audio:!1},function(e){o.src=URL.createObjectURL(e),o.play(),t(o)},function(){})}catch(n){throw"Error setting webcam. Message: "+n.message}},d&&g()}},R={};R.getIcon=function(){var e=!1,t="",o=function(){for(var e=document.getElementsByTagName("head")[0].getElementsByTagName("link"),t=e.length,o=t-1;o>=0;o--)if(/(^|\s)icon(\s|$)/i.test(e[o].getAttribute("rel")))return e[o];return!1};if(r.elementId?(e=document.getElementById(r.elementId),e.setAttribute("href",e.getAttribute("src"))):(e=o(),e===!1&&(e=document.createElement("link"),e.setAttribute("rel","icon"),document.getElementsByTagName("head")[0].appendChild(e))),t=r.elementId?e.src:e.href,-1===t.indexOf(document.location.hostname))throw new Error("Error setting favicon. Favicon image is on different domain (Icon: "+t+", Domain: "+document.location.hostname+")");return e.setAttribute("type","image/png"),e},R.setIcon=function(e){var t=e.toDataURL("image/png");if(r.elementId)document.getElementById(r.elementId).setAttribute("src",t);else if(m.ff||m.opera){var o=a;a=document.createElement("link"),m.opera&&a.setAttribute("rel","icon"),a.setAttribute("rel","icon"),a.setAttribute("type","image/png"),document.getElementsByTagName("head")[0].appendChild(a),a.setAttribute("href",t),o.parentNode&&o.parentNode.removeChild(o)}else a.setAttribute("href",t)};var k={};return k.duration=40,k.types={},k.types.fade=[{x:.4,y:.4,w:.6,h:.6,o:0},{x:.4,y:.4,w:.6,h:.6,o:.1},{x:.4,y:.4,w:.6,h:.6,o:.2},{x:.4,y:.4,w:.6,h:.6,o:.3},{x:.4,y:.4,w:.6,h:.6,o:.4},{x:.4,y:.4,w:.6,h:.6,o:.5},{x:.4,y:.4,w:.6,h:.6,o:.6},{x:.4,y:.4,w:.6,h:.6,o:.7},{x:.4,y:.4,w:.6,h:.6,o:.8},{x:.4,y:.4,w:.6,h:.6,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],k.types.none=[{x:.4,y:.4,w:.6,h:.6,o:1}],k.types.pop=[{x:1,y:1,w:0,h:0,o:1},{x:.9,y:.9,w:.1,h:.1,o:1},{x:.8,y:.8,w:.2,h:.2,o:1},{x:.7,y:.7,w:.3,h:.3,o:1},{x:.6,y:.6,w:.4,h:.4,o:1},{x:.5,y:.5,w:.5,h:.5,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],k.types.popFade=[{x:.75,y:.75,w:0,h:0,o:0},{x:.65,y:.65,w:.1,h:.1,o:.2},{x:.6,y:.6,w:.2,h:.2,o:.4},{x:.55,y:.55,w:.3,h:.3,o:.6},{x:.5,y:.5,w:.4,h:.4,o:.8},{x:.45,y:.45,w:.5,h:.5,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],k.types.slide=[{x:.4,y:1,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.8,w:.6,h:.6,o:1},{x:.4,y:.7,w:.6,h:.6,o:1},{x:.4,y:.6,w:.6,h:.6,o:1},{x:.4,y:.5,w:.6,h:.6,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],k.run=function(e,t,o,a){var s=k.types[i()?"none":r.animation];return a=o===!0?"undefined"!=typeof a?a:s.length-1:"undefined"!=typeof a?a:0,t=t?t:function(){},a=0?(I[r.type](n(e,s[a])),x=setTimeout(function(){o?a-=1:a+=1,k.run(e,t,o,a)},k.duration),R.setIcon(c),void 0):void t()},C(),{badge:E,video:L,image:T,webcam:U,reset:M.reset}};"undefined"!=typeof define&&define.amd?define([],function(){return e}):"undefined"!=typeof module&&module.exports?module.exports=e:this.Favico=e}();
--------------------------------------------------------------------------------
/assets_source/js/vendor/jquery.qrcode.min.js:
--------------------------------------------------------------------------------
1 | (function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;da||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
5 | 0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
7 | j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
8 | b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0g;g++)if(null==this.modules[b][i-g]){var n=!1;f>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
9 | c),b=new t,e=0;e8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
10 | 0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
14 | a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;dc)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
15 | a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
17 | LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d
18 | this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b>>7-a%8&1)},put:function(a,c){for(var d=0;d>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
26 | correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e").css("height",b+"px").appendTo(c);for(i=0;i").css("width",
28 | d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);
29 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/threex.rendererstats.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | * @author jetienne / http://jetienne.com/
4 | */
5 | /** @namespace */
6 | var THREEx = THREEx || {}
7 |
8 | /**
9 | * provide info on THREE.WebGLRenderer
10 | *
11 | * @param {Object} renderer the renderer to update
12 | * @param {Object} Camera the camera to update
13 | */
14 | THREEx.RendererStats = function (){
15 |
16 | var msMin = 100;
17 | var msMax = 0;
18 |
19 | var container = document.createElement( 'div' );
20 | container.style.cssText = 'width:80px;opacity:0.9;cursor:pointer';
21 |
22 | var msDiv = document.createElement( 'div' );
23 | msDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#200;';
24 | container.appendChild( msDiv );
25 |
26 | var msText = document.createElement( 'div' );
27 | msText.style.cssText = 'color:#f00;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
28 | msText.innerHTML= 'WebGLRenderer';
29 | msDiv.appendChild( msText );
30 |
31 | var msTexts = [];
32 | var nLines = 9;
33 | for(var i = 0; i < nLines; i++){
34 | msTexts[i] = document.createElement( 'div' );
35 | msTexts[i].style.cssText = 'color:#f00;background-color:#311;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
36 | msDiv.appendChild( msTexts[i] );
37 | msTexts[i].innerHTML= '-';
38 | }
39 |
40 |
41 | var lastTime = Date.now();
42 | return {
43 | domElement: container,
44 |
45 | update: function(webGLRenderer){
46 | // sanity check
47 | console.assert(webGLRenderer instanceof THREE.WebGLRenderer)
48 |
49 | // refresh only 30time per second
50 | if( Date.now() - lastTime < 1000/30 ) return;
51 | lastTime = Date.now()
52 |
53 | var i = 0;
54 | msTexts[i++].textContent = "== Memory =====";
55 | msTexts[i++].textContent = "Programs: " + webGLRenderer.info.memory.programs;
56 | msTexts[i++].textContent = "Geometries: "+webGLRenderer.info.memory.geometries;
57 | msTexts[i++].textContent = "Textures: " + webGLRenderer.info.memory.textures;
58 |
59 | msTexts[i++].textContent = "== Render =====";
60 | msTexts[i++].textContent = "Calls: " + webGLRenderer.info.render.calls;
61 | msTexts[i++].textContent = "Vertices: " + webGLRenderer.info.render.vertices;
62 | msTexts[i++].textContent = "Faces: " + webGLRenderer.info.render.faces;
63 | msTexts[i++].textContent = "Points: " + webGLRenderer.info.render.points;
64 | }
65 | }
66 | };
--------------------------------------------------------------------------------
/assets_source/js/vendor/threex.windowresize.js:
--------------------------------------------------------------------------------
1 | // This THREEx helper makes it easy to handle window resize.
2 | // It will update renderer and camera when window is resized.
3 | //
4 | // # Usage
5 | //
6 | // **Step 1**: Start updating renderer and camera
7 | //
8 | // ```var windowResize = new THREEx.WindowResize(aRenderer, aCamera)```
9 | //
10 | // **Step 2**: stop updating renderer and camera
11 | //
12 | // ```windowResize.destroy()```
13 | // # Code
14 |
15 | //
16 |
17 | /** @namespace */
18 | var THREEx = THREEx || {}
19 |
20 | /**
21 | * Update renderer and camera when the window is resized
22 | *
23 | * @param {Object} renderer the renderer to update
24 | * @param {Object} Camera the camera to update
25 | */
26 | THREEx.WindowResize = function(renderer, camera){
27 | var callback = function(){
28 | // notify the renderer of the size change
29 | renderer.setSize( window.innerWidth, window.innerHeight )
30 | // update the camera
31 | camera.aspect = window.innerWidth / window.innerHeight
32 | camera.updateProjectionMatrix()
33 | }
34 | // bind the resize event
35 | window.addEventListener('resize', callback, false)
36 | // return .stop() the function to stop watching window resize
37 | return {
38 | trigger : function(){
39 | callback()
40 | },
41 | /**
42 | * Stop watching window resize
43 | */
44 | destroy : function(){
45 | window.removeEventListener('resize', callback)
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/assets_source/js/vendor/yepnope.1.5.4-min.js:
--------------------------------------------------------------------------------
1 | /*yepnope1.5.x|WTFPL*/
2 | (function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f#blur-overlay');
94 | background-color: #000;
95 | z-index: 1;
96 | }
97 |
98 | .change_controls {
99 | width: 250px;
100 | height: 36px;
101 | background-color: #fd5439;
102 | position: relative;
103 | left: 50%;
104 | margin-left: -125px;
105 | padding-top: 15px;
106 | font-size: 18px;
107 | letter-spacing: 0.1em;
108 | cursor: pointer;
109 | z-index: 10;
110 | -webkit-transition: background-color 0.4s ease-out 0;
111 | -moz-transition: background-color 0.4s ease-out 0;
112 | -o-transition: background-color 0.4s ease-out 0;
113 | transition: background-color 0.4s ease-out 0;
114 | // -webkit-transition: color 0.4s ease-out 0;
115 | // -moz-transition: color 0.4s ease-out 0;
116 | // -o-transition: color 0.4s ease-out 0;
117 | // transition: color 0.4s ease-out 0;
118 | &:hover {
119 | color: #000;
120 | background-color: #fff;
121 | -webkit-transition: background-color 0.4s ease-out 0;
122 | -moz-transition: background-color 0.4s ease-out 0;
123 | -o-transition: background-color 0.4s ease-out 0;
124 | transition: background-color 0.4s ease-out 0;
125 | // -webkit-transition: color 0.4s ease-out 0;
126 | // -moz-transition: color 0.4s ease-out 0;
127 | // -o-transition: color 0.4s ease-out 0;
128 | // transition: color 0.4s ease-out 0;
129 | }
130 | }
131 |
132 | .social {
133 | width: 280px;
134 | height: 52px;
135 | position: relative;
136 | left: 50%;
137 | margin-left: -140px;
138 | > a:first-child div {
139 | background: #4e68b2 url(../img/fbw.png) 50% 50% no-repeat;
140 | &:hover {
141 | background-image: url(../img/fbb.png);
142 | }
143 | }
144 | > a:nth-child(2) div {
145 | background: #4195de url(../img/tww.png) 50% 50% no-repeat;
146 | &:hover {
147 | background-image: url(../img/twb.png);
148 | }
149 | }
150 | > a:nth-child(3) div {
151 | background: #38658f url(../img/vkw.png) 50% 50% no-repeat;
152 | &:hover {
153 | background-image: url(../img/vkb.png);
154 | }
155 | }
156 | > a:last-child div {
157 | margin: 0;
158 | background: #ce2f1c url(../img/gpw.png) 50% 50% no-repeat;
159 | &:hover {
160 | background-image: url(../img/gpb.png);
161 | }
162 | }
163 | > a div {
164 | width: 52px;
165 | height: 100%;
166 | float: left;
167 | margin-right: 24px;
168 | cursor: pointer;
169 | -webkit-transition: background-color 0.4s ease-out 0;
170 | -moz-transition: background-color 0.4s ease-out 0;
171 | -o-transition: background-color 0.4s ease-out 0;
172 | transition: background-color 0.4s ease-out 0;
173 | &:hover {
174 | color: #000;
175 | background-color: #fff;
176 | -webkit-transition: background-color 0.4s ease-out 0;
177 | -moz-transition: background-color 0.4s ease-out 0;
178 | -o-transition: background-color 0.4s ease-out 0;
179 | transition: background-color 0.4s ease-out 0;
180 | }
181 | }
182 | }
183 |
184 | .pause_control {
185 | width: 280px;
186 | height: 37px;
187 | margin-left: -140px;
188 | background-color: #222;
189 | color: #fff;
190 | -webkit-transition: background-color 0.4s ease-out 0;
191 | -moz-transition: background-color 0.4s ease-out 0;
192 | -o-transition: background-color 0.4s ease-out 0;
193 | transition: background-color 0.4s ease-out 0;
194 | // -webkit-transition: color 0.4s ease-out 0;
195 | // -moz-transition: color 0.4s ease-out 0;
196 | // -o-transition: color 0.4s ease-out 0;
197 | // transition: color 0.4s ease-out 0;
198 | &:hover {
199 | color: #000;
200 | background-color: #fff;
201 | -webkit-transition: background-color 0.4s ease-out 0;
202 | -moz-transition: background-color 0.4s ease-out 0;
203 | -o-transition: background-color 0.4s ease-out 0;
204 | transition: background-color 0.4s ease-out 0;
205 | // -webkit-transition: color 0.4s ease-out 0;
206 | // -moz-transition: color 0.4s ease-out 0;
207 | // -o-transition: color 0.4s ease-out 0;
208 | // transition: color 0.4s ease-out 0;
209 | }
210 | }
211 | .gameover_control {
212 | background-color: #272727;
213 | display: inline-block;
214 | position: static;
215 | margin-right: 4px;
216 | margin-top: 50px;
217 | margin-left: 0;
218 | -webkit-transition: background-color 0.4s ease-out 0;
219 | -moz-transition: background-color 0.4s ease-out 0;
220 | -o-transition: background-color 0.4s ease-out 0;
221 | transition: background-color 0.4s ease-out 0;
222 | // -webkit-transition: color 0.4s ease-out 0;
223 | // -moz-transition: color 0.4s ease-out 0;
224 | // -o-transition: color 0.4s ease-out 0;
225 | // transition: color 0.4s ease-out 0;
226 | &:hover {
227 | color: #000;
228 | background-color: #fff;
229 | -webkit-transition: background-color 0.4s ease-out 0;
230 | -moz-transition: background-color 0.4s ease-out 0;
231 | -o-transition: background-color 0.4s ease-out 0;
232 | transition: background-color 0.4s ease-out 0;
233 | // -webkit-transition: color 0.4s ease-out 0;
234 | // -moz-transition: color 0.4s ease-out 0;
235 | // -o-transition: color 0.4s ease-out 0;
236 | // transition: color 0.4s ease-out 0;
237 | }
238 | }
239 | .resume {
240 | width: 280px;
241 | height: 37px;
242 | background-color: #fd5439;
243 | color: #000000;
244 | position: relative;
245 | left: 50%;
246 | margin-left: -140px;
247 | padding-top: 15px;
248 | font-size: 18px;
249 | letter-spacing: 0.1em;
250 | cursor: pointer;
251 | z-index: 10;
252 | margin-bottom: 7px;
253 | margin-top: 38px;
254 | -webkit-transition: background-color 0.4s ease-out 0;
255 | -moz-transition: background-color 0.4s ease-out 0;
256 | -o-transition: background-color 0.4s ease-out 0;
257 | transition: background-color 0.4s ease-out 0;
258 | // -webkit-transition: color 0.4s ease-out 0;
259 | // -moz-transition: color 0.4s ease-out 0;
260 | // -o-transition: color 0.4s ease-out 0;
261 | // transition: color 0.4s ease-out 0;
262 | &:hover {
263 | color: #000;
264 | background-color: #fff;
265 | -webkit-transition: background-color 0.4s ease-out 0;
266 | -moz-transition: background-color 0.4s ease-out 0;
267 | -o-transition: background-color 0.4s ease-out 0;
268 | transition: background-color 0.4s ease-out 0;
269 | // -webkit-transition: color 0.4s ease-out 0;
270 | // -moz-transition: color 0.4s ease-out 0;
271 | // -o-transition: color 0.4s ease-out 0;
272 | // transition: color 0.4s ease-out 0;
273 | }
274 | }
275 |
276 | .back {
277 | position: absolute;
278 | left: 0;
279 | top: 0;
280 | // background-color: #fff;
281 | width: 100%;
282 | height: 100%;
283 | z-index: -1;
284 | }
285 |
286 | .restart {
287 | width: 188px;
288 | height: 36px;
289 | background-color: #272727;
290 | padding-top: 15px;
291 | font-size: 18px;
292 | letter-spacing: 0.1em;
293 | cursor: pointer;
294 | z-index: 10;
295 | display: inline-block;
296 | -webkit-transition: background-color 0.4s ease-out 0;
297 | -moz-transition: background-color 0.4s ease-out 0;
298 | -o-transition: background-color 0.4s ease-out 0;
299 | transition: background-color 0.4s ease-out 0;
300 | // -webkit-transition: color 0.4s ease-out 0;
301 | // -moz-transition: color 0.4s ease-out 0;
302 | // -o-transition: color 0.4s ease-out 0;
303 | // transition: color 0.4s ease-out 0;
304 | &:hover {
305 | color: #000;
306 | background-color: #fff;
307 | -webkit-transition: background-color 0.4s ease-out 0;
308 | -moz-transition: background-color 0.4s ease-out 0;
309 | -o-transition: background-color 0.4s ease-out 0;
310 | transition: background-color 0.4s ease-out 0;
311 | // -webkit-transition: color 0.4s ease-out 0;
312 | // -moz-transition: color 0.4s ease-out 0;
313 | // -o-transition: color 0.4s ease-out 0;
314 | // transition: color 0.4s ease-out 0;
315 | }
316 | }
317 |
318 | .bigfont {
319 | font-size: 3em;
320 | }
321 |
322 | .block {
323 | display: block;
324 | }
325 |
326 | .gameTimer {
327 | position: absolute;
328 | opacity: 0.5;
329 | left: 170px;
330 | top: 5px;
331 | font-size: 32px;
332 | z-index: 4;
333 | }
334 |
335 | #loader {
336 | // display: none;
337 | // background-color: rgba(0,0,0,0.8);
338 | z-index: 5;
339 | }
340 |
341 | #nogame {
342 | display: none;
343 | z-index: 4;
344 | background-color: #fafafa;
345 | background: #fafafa url(../img/nogame.jpg) 0 0 no-repeat;
346 | background-size: cover;
347 | overflow: hidden;
348 | >.cont {
349 |
350 | >img {
351 | position: absolute;
352 | top: 50%;
353 | left: 50%;
354 | margin-left: -765px;
355 | margin-top: -498px;
356 | // width: 100%;
357 | // height: inherit;
358 | z-index: -1;
359 | }
360 | >.nogame1 {
361 | color: #fafafa;
362 | font-size: 60px;
363 | letter-spacing: 0.08em;
364 | }
365 | >.nogame2 {
366 | padding-top: 200px;
367 | color: #fafafa;
368 | font-size: 18px;
369 | letter-spacing: 0.1em;
370 | >a {
371 | color: #fd5439;
372 | text-decoration: none;
373 | &:hover {
374 | text-decoration: underline;
375 | }
376 | }
377 | }
378 | }
379 | }
380 |
381 | .startGame {
382 | }
383 |
384 | .loader span {
385 | color: #fff;
386 | font-size: 5em;
387 | z-index: 3;
388 | }
389 | #interface {
390 | display: none;
391 | }
392 | #footer {
393 | display: none;
394 | position: absolute;
395 | bottom: 0;
396 | left: 0;
397 | background-color: rgba(0,0,0,0.5);
398 | width: 100%;
399 | height: 84px;
400 | z-index: 5;
401 | >span {
402 | font-size: 12px;
403 | font-family: 'plumbcbold';
404 |
405 | padding-top: 35px;
406 | padding-left: 35px;
407 | padding-right: 9px;
408 | }
409 | }
410 |
411 | .loadImg {
412 | position: absolute;
413 | top: 50%;
414 | left: 50%;
415 | margin-left: -530px;
416 | margin-top: -350px;
417 | }
418 | .gameover_bg {
419 | position: absolute;
420 | top: 50%;
421 | left: 50%;
422 | margin-left: -765px;
423 | margin-top: -498px;
424 | z-index: -1;
425 | }
426 | .coins {
427 | margin-bottom: 100px;
428 | }
429 | .gameover_message {
430 | color: #fff;
431 | font-size: 40px;
432 | letter-spacing: 0.1em;
433 | line-height: 53px;
434 | margin-bottom: 20px;
435 | }
436 | #gameovermessage {
437 | color: #fff;
438 | font-size: 20px;
439 | letter-spacing: 0.1em;
440 | line-height: 53px;
441 | margin-top: 20px;
442 | position: absolute;
443 | text-align: center;
444 | width: 100%;
445 | }
446 | .left {
447 | float: left;
448 | letter-spacing: 0.29em;
449 | }
450 |
451 | .right {
452 | float: right;
453 | letter-spacing: 0.01em;
454 | > a, span {
455 | margin-right: 16px;
456 | }
457 | }
458 |
459 | .hotdot {
460 | display: inline-block;
461 | vertical-align: middle;
462 | }
463 |
464 | .pause, .share {
465 | /*display: table;*/
466 | background-color: rgba(0,0,0,0.5);
467 | z-index: 4;
468 | }
469 |
470 | .menu {
471 | display: inline-block;
472 | width: 300px;
473 | height: 400px;
474 | border: 1px #ffffff solid;
475 | background-color: #363636;
476 | }
477 |
478 | .menu hr {
479 | /*color: #595959;*/
480 | /*background: #595959;*/
481 | width: 75%;
482 | /*height: 1px;*/
483 | }
484 |
485 | .menu span {
486 | margin-bottom: 15px;
487 | margin-top: 15px;
488 | font-size: 1.25em;
489 | }
490 |
491 | .cont {
492 | display: table-cell;
493 | vertical-align: middle;
494 | }
495 |
496 | .error {
497 | font-size: 5em;
498 | }
499 |
500 | .helthbar, .score, .bonus {
501 | bottom: 30px;
502 | }
503 |
504 | .helthbar {
505 | border: 1px #eee solid;
506 | background-color: #000;
507 | width: 30%;
508 | height: 20px;
509 | left: 35%;
510 | padding: 1px;
511 | }
512 |
513 | .helth {
514 | width: 100%;
515 | height: 100%;
516 | background-color: #BE463C;
517 | }
518 |
519 |
520 | .music_button, .menu_button, .fs_button {
521 | width: 40px;
522 | height: 40px;
523 | border: 1px #ffffff solid;
524 | font-size: 32px;
525 | text-align: center;
526 | cursor: pointer;
527 | }
528 |
529 | .fs_button {
530 | z-index: 2;
531 | right: 120px;
532 | top: 30px;
533 | }
534 |
535 | .music_button {
536 | z-index: 2;
537 | right: 75px;
538 | top: 30px;
539 | }
540 |
541 | .menu_button {
542 | z-index: 0;
543 | right: 30px;
544 | top: 30px;
545 | }
546 |
547 | .bonus {
548 | height: 30px;
549 | right: 30px;
550 | font-size: 2em;
551 | }
552 |
553 | .score {
554 | width: 207px;
555 | height: 30px;
556 | left: 0;
557 | font-size: 40px;
558 | bottom: 125px;
559 | text-align: right;
560 | color: #fff;
561 | > span {
562 | vertical-align: middle;
563 | }
564 | > img {
565 | display: inline-block;
566 | vertical-align: middle;
567 | margin-left: 5px;
568 | }
569 | }
570 |
571 | .color {
572 | width: 100px;
573 | height: 100px;
574 | background-color: #fff;
575 | position: absolute;
576 | top: 50%;
577 | right: 0;
578 | }
579 |
580 | a {
581 | color: #fd5439;
582 | }
583 |
584 | a:hover {
585 | color: #fff;
586 | }
587 |
588 | .button:hover {
589 | cursor: pointer;
590 | }
591 |
592 | #loader {
593 | display: none;
594 | }
595 |
596 | #webgl-error-message {
597 | z-index: 5;
598 | }
599 |
600 | #qrcode canvas {
601 | border: 5px solid white;
602 | }
603 | #qrcode {
604 | margin-top: 10px;
605 | margin-bottom: 20px;
606 | }
607 | .logo {
608 | // position: absolute;
609 | margin-top: 50px;
610 | margin-bottom: 10px;
611 | height: 130px;
612 | overflow: hidden;
613 | z-index: 2;
614 | width: 100%;
615 | > img {
616 | height: 110px;
617 | }
618 | }
619 |
620 | .byhotdot {
621 | margin-top: -17px;
622 | font-size: 12px;
623 | letter-spacing: 0.15em;
624 | }
625 | .message {
626 | color: #fd5439;
627 | font-size: 30px;
628 | letter-spacing: 0.15em;
629 | margin-top: 153px;
630 | }
631 |
632 | .mobile_message {
633 | font-size: 30px;
634 | line-height: 1.5em;
635 | letter-spacing: 0.1em;
636 | }
637 | .webcam_message {
638 | font-size: 40px;
639 | line-height: 1.2em;
640 | letter-spacing: 0.1em;
641 | }
642 | .turn_to_start {
643 | position: relative;
644 | width: 100%;
645 | height: 260px;
646 | font-size: 40px;
647 | >span {
648 | position: absolute;
649 | bottom: 50px;
650 | left: 0;
651 | width: 100%;
652 | }
653 | }
654 | #head {
655 | position: absolute;
656 | top: 50px;
657 | left: 50%;
658 | margin-left: -72px;
659 | display: none;
660 | }
661 | #left_v_check {
662 | position: absolute;
663 | bottom: 50px;
664 | left: 100px;
665 | display: none;
666 | }
667 | #right_v_check {
668 | position: absolute;
669 | bottom: 50px;
670 | right: 100px;
671 | display: none;
672 | }
673 | .mobile_message span{
674 | text-transform: lowercase;
675 | }
676 |
677 | .controls {
678 | font-size: 16px;
679 | letter-spacing: 0.2em;
680 | margin-top: -10px;
681 | div:hover .rect {
682 | background-color: #fff;
683 | -webkit-transition: background-color 0.4s ease-out 0;
684 | -moz-transition: background-color 0.4s ease-out 0;
685 | -o-transition: background-color 0.4s ease-out 0;
686 | transition: background-color 0.4s ease-out 0;
687 | }
688 | div:hover .rect .quad {
689 | background-color: #000;
690 | -webkit-transition: background-color 0.4s ease-out 0;
691 | -moz-transition: background-color 0.4s ease-out 0;
692 | -o-transition: background-color 0.4s ease-out 0;
693 | transition: background-color 0.4s ease-out 0;
694 | }
695 | .rect {
696 | position: relative;
697 | background-color: #fd5439;
698 | -webkit-transition: background-color 0.4s ease-out 0;
699 | -moz-transition: background-color 0.4s ease-out 0;
700 | -o-transition: background-color 0.4s ease-out 0;
701 | transition: background-color 0.4s ease-out 0;
702 | > .quad {
703 | background-color: #fff;
704 | -webkit-transition: background-color 0.4s ease-out 0;
705 | -moz-transition: background-color 0.4s ease-out 0;
706 | -o-transition: background-color 0.4s ease-out 0;
707 | transition: background-color 0.4s ease-out 0;
708 | position: absolute;
709 | width: 7px;
710 | height: 7px;
711 | }
712 | }
713 | >.choose_wasd {
714 | .rect {
715 | width: 112px;
716 | height: 46px;
717 | margin: 52px auto;
718 | .quad1 {
719 | bottom: 17px;
720 | right: 38px;
721 | }
722 | .quad2 {
723 | bottom: 8px;
724 | right: 47px;
725 | }
726 | .quad3 {
727 | bottom: 8px;
728 | right: 38px;
729 | }
730 | .quad4 {
731 | bottom: 8px;
732 | right: 29px;
733 | }
734 | }
735 | }
736 | >.choose_mobile {
737 | .rect {
738 | margin: 34px auto;
739 | width: 51px;
740 | height: 82px;
741 | .quad {
742 | bottom: 7px;
743 | right: 21px;
744 | width: 8px;
745 | height: 8px;
746 | }
747 | }
748 | }
749 | >.choose_webcam {
750 | .rect {
751 | margin: 43px auto;
752 | width: 89px;
753 | height: 63px;
754 | .quad {
755 | top: 8px;
756 | right: 40px;
757 | width: 8px;
758 | height: 8px;
759 | }
760 | }
761 | }
762 | >div {
763 | display: inline-block;
764 | position: relative;
765 | width: 125px;
766 | height: 150px;
767 | >span{
768 | position: absolute;
769 | bottom: 0;
770 | left: 0;
771 | width: 100%;
772 | }
773 | }
774 | }
775 | .red {
776 | color: #fd5439;
777 | }
778 | .logoLoadControlContainer {
779 | position: absolute;
780 | left: 0;
781 | top: 0;
782 | width: 100%;
783 | height: 100%;
784 | z-index: 1;
785 | }
786 | .buttons {
787 | display: none;
788 | }
789 | #dogecoin {
790 | border: 2px solid #fff;
791 | color: #fff;
792 | width: 226px;
793 | margin-right: 5px;
794 | height: 47px;
795 | background-color: transparent;
796 | font-size: 19px;
797 | font-family: 'plumbmediumcmediumc';
798 | -webkit-font-smoothing: antialiased;
799 | -moz-osx-font-smoothing: grayscale;
800 | padding-left: 18px;
801 | letter-spacing: 0.05em;
802 | }
803 | #wow {
804 | background-color: #fd5439;
805 | border: none;
806 | color: #fff;
807 | height: 52px;
808 | font-size: 24px;
809 | width: 94px;
810 | font-family: 'plumbmediumcmediumc';
811 | -webkit-font-smoothing: antialiased;
812 | -moz-osx-font-smoothing: grayscale;
813 | cursor: pointer;
814 | -webkit-transition: background-color 0.4s ease-out 0;
815 | -moz-transition: background-color 0.4s ease-out 0;
816 | -o-transition: background-color 0.4s ease-out 0;
817 | transition: background-color 0.4s ease-out 0;
818 | // -webkit-transition: color 0.4s ease-out 0;
819 | // -moz-transition: color 0.4s ease-out 0;
820 | // -o-transition: color 0.4s ease-out 0;
821 | // transition: color 0.4s ease-out 0;
822 | &:hover {
823 | color: #000;
824 | background-color: #fff;
825 | -webkit-transition: background-color 0.4s ease-out 0;
826 | -moz-transition: background-color 0.4s ease-out 0;
827 | -o-transition: background-color 0.4s ease-out 0;
828 | transition: background-color 0.4s ease-out 0;
829 | // -webkit-transition: color 0.4s ease-out 0;
830 | // -moz-transition: color 0.4s ease-out 0;
831 | // -o-transition: color 0.4s ease-out 0;
832 | // transition: color 0.4s ease-out 0;
833 | }
834 | }
835 |
836 | .show-table {
837 | display: table;
838 | }
839 |
840 | a.chromeexperiments {
841 | display: block;
842 | position: absolute;
843 | bottom: 75px;
844 | left: 35px;
845 | margin: 0;
846 | padding: 0;
847 | img {
848 | margin: 0;
849 | padding: 0;
850 | }
851 | }
--------------------------------------------------------------------------------
/assets_source/scss/mobile.scss:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'plumbmediumcmediumc';
3 | src: url('../fonts/plm65__c-webfont.eot');
4 | src: url('../fonts/plm65__c-webfont.eot?#iefix') format('embedded-opentype'),
5 | url('../fonts/plm65__c-webfont.woff') format('woff'),
6 | url('../fonts/plm65__c-webfont.ttf') format('truetype');
7 | font-weight: normal;
8 | font-style: normal;
9 | }
10 |
11 | body,html {
12 | padding:0;
13 | margin:0;
14 | color: #eee;
15 | width:100%;
16 | height:100%;
17 | font-family: 'plumbmediumcmediumc', "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
18 | font-weight: 300;
19 | margin: 0px;
20 | background-color: #000000;
21 | overflow: hidden;
22 | text-align: center;
23 | text-transform: uppercase;
24 | }
25 |
26 | #controller{
27 | width:100%;
28 | height:100%;
29 | background-color: #000;
30 | display: table;
31 | }
32 |
33 | #turnLeft{
34 | position:absolute;
35 | bottom:0;
36 | left:0;
37 | width:33%;
38 | height: 100%;
39 | background-color: #000;
40 | z-index: 1;
41 | >img {
42 | position: absolute;
43 | left: 10%;
44 | top: 50%;
45 | margin-top: -50px;
46 | height: 100px;
47 | }
48 | }
49 |
50 | #turnRight{
51 | position:absolute;
52 | bottom:0;
53 | right:0;
54 | width:33%;
55 | height: 100%;
56 | background-color: #000;
57 | z-index: 1;
58 | >img {
59 | position: absolute;
60 | right: 10%;
61 | top: 50%;
62 | margin-top: -50px;
63 | height: 100px;
64 | }
65 | }
66 | #sphere{
67 | position:absolute;
68 | bottom:0;
69 | right:33%;
70 | width:33%;
71 | height: 100%;
72 | background-color: #000;
73 | z-index: 2;
74 | >img {
75 | position: absolute;
76 | left: 50%;
77 | top: 50%;
78 | margin-left: -70px;
79 | margin-top: -70px;
80 | height: 140px;
81 | }
82 | }
83 |
84 | #socket, #wheel, #preparetostart, #gameover{
85 | width: 100%;
86 | height: 100%;
87 | display: table-cell;
88 | vertical-align: middle;
89 | text-align: center;
90 | overflow: hidden;
91 | display: none;
92 | }
93 |
94 | #socket {
95 | z-index: 2;
96 | display: table-cell;
97 | }
98 |
99 | #status, #status_fail{
100 | width: 100%;
101 | text-align: center;
102 | position: absolute;
103 | z-index: 3;
104 | }
105 |
106 | #status_fail {
107 | top: 10%;
108 | color: red;
109 | }
110 |
111 | #preparetostart {
112 | display: none;
113 | > #start > .push {
114 | position: absolute;
115 | width: 100%;
116 | top: 50%;
117 | font-size: 25px;
118 | margin-top: -0.5em;
119 | text-align: center;
120 | z-index: 1;
121 | color: rgba(255,255,255,0.5);
122 | }
123 | }
124 |
125 | #wheel {
126 | display: none;
127 | z-index: 1;
128 | background-color: #000;
129 | }
130 |
131 | #hotdot{
132 | position: absolute;
133 | left: 50%;
134 | margin-left: -10px;
135 | bottom: 20px;
136 | }
137 |
138 | #gameCodeInput {
139 | width: 210px;
140 | height: 40px;
141 | background-color: #000;
142 | border: 2px solid #69ffd3;
143 | color: #FFF;
144 | padding-left: 10px;
145 | font-size: 14px;
146 | font-family: 'plumbmediumcmediumc';
147 | letter-spacing: 0.15em;
148 | vertical-align: middle;
149 | text-transform: uppercase;
150 | border-radius: 0;
151 | box-sizing: border-box;
152 | margin: 10px 6px;
153 | }
154 |
155 | #connect {
156 | height: 40px;
157 | width: 100px;
158 | background-color: #fd5439;
159 | color: #fff;
160 | font-size: 14px;
161 | font-family: 'plumbmediumcmediumc';
162 | letter-spacing: 0.15em;
163 | border: none;
164 | vertical-align: middle;
165 | text-transform: uppercase;
166 | margin: 10px 6px;
167 | }
168 |
169 | #start {
170 | position:absolute;
171 | top:0;
172 | left:0;
173 | width:100%;
174 | height: 100%;
175 | background-color: #000;
176 | z-index: 1;
177 | >img {
178 | position: absolute;
179 | left: 50%;
180 | top: 50%;
181 | margin-left: -70px;
182 | margin-top: -70px;
183 | height: 140px;
184 | }
185 | }
186 | #gameover {
187 | display: none;
188 | position:absolute;
189 | top:0;
190 | left:0;
191 | background-color: #000;
192 | background: #000 url(../img/mobilereset.jpg) 0 0 no-repeat;
193 | width: 100%;
194 | height: 100%;
195 | z-index: 1;
196 | // >img {
197 | // position: absolute;
198 | // left: 0;
199 | // top: 0;
200 | // // margin-top: -280px;
201 | // // margin-left: -300px;
202 | // width: 727px;
203 | // height: 740px;
204 | // }
205 | >#restart{
206 | position: absolute;
207 | left: 50%;
208 | top: 50%;
209 | width: 190px;
210 | height: 62px;
211 | margin-left: -95px;
212 | margin-top: -31px;
213 | background-color: #000;
214 | border: none;
215 | border-radius: 0;
216 | color: #fff;
217 | font-size: 26px;
218 | font-family: 'plumbmediumcmediumc';
219 | letter-spacing: 0.15em;
220 | text-transform: uppercase;
221 | }
222 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "DT",
3 | "version": "0.0.0",
4 | "description": "A WebGL game using Web Audio API",
5 | "main": "server.js",
6 | "dependencies": {
7 | "dogeapi": "^2.0.1",
8 | "express": "^3.4.8",
9 | "hookshot": "^0.0.2",
10 | "mongoose": "^3.8.12",
11 | "node-dogecoin": "^0.3.9",
12 | "socket.io": "^0.9.16"
13 | },
14 | "devDependencies": {},
15 | "scripts": {
16 | "test": "echo \"Error: no test specified\" && exit 1",
17 | "start": "node server.js"
18 | },
19 | "repository": {
20 | "type": "git",
21 | "url": "https://github.com/deemidroll/digital_trip.git"
22 | },
23 | "author": "deemidroll",
24 | "license": "ISC",
25 | "bugs": {
26 | "url": "https://github.com/deemidroll/digital_trip/issues"
27 | },
28 | "homepage": "https://github.com/deemidroll/digital_trip"
29 | }
30 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | // ███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗ ██╗███████╗
2 | // ██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗ ██║██╔════╝
3 | // ███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝ ██║███████╗
4 | // ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗ ██ ██║╚════██║
5 | // ███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║██╗╚█████╔╝███████║
6 | // ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚════╝ ╚══════╝
7 | // Dependencies
8 | var express = require('express'),
9 | io = require('socket.io'),
10 | mongoose = require('mongoose'),
11 | dogecoin = require('node-dogecoin')(),
12 | hookshot = require('hookshot');
13 |
14 | // Set up app with Express framework
15 | var app = express();
16 |
17 | // Create server
18 | var server = app.listen(80, function() {
19 | console.log('Listening on port %d', server.address().port);
20 | });
21 |
22 | // Configure the app
23 | app.configure(function() {
24 | app.use(express.cookieParser());
25 | // set a cookie
26 | app.use(function (req, res, next) {
27 | // check if client sent cookie
28 | var cookie = req.cookies.UID;
29 | if (cookie === undefined) {
30 | // no: gen a new cookie
31 | cookie = genCookie();
32 | // console.log('cookie have created successfully');
33 | } else {
34 | // yes, cookie was already present
35 | // console.log('cookie exists', cookie);
36 | }
37 | // refresh cookie
38 | res.cookie('UID', cookie, { maxAge: 900000 });
39 | next(); // <-- important!
40 | });
41 |
42 | app.use('/', express.static('assets/'));
43 | app.use('/webhook', hookshot('refs/heads/master', 'git pull'));
44 | app.use(/\/m\/#\d{6}/, express.static('assets/'));
45 | });
46 |
47 | // Connect DB
48 | mongoose.connect('mongodb://127.0.0.1:27017/DTdb');
49 |
50 | var Schema = mongoose.Schema;
51 |
52 | var clientsSchema = new Schema({
53 | cookieUID: String,
54 | clientId: String,
55 | clientIp: String,
56 | gameCode: String,
57 | timeStart: Number,
58 | timeEnd: Number,
59 | coinsCollect: Number,
60 | maxCoinsCheck: Boolean,
61 | checkup: Boolean,
62 | paymentRequest: Number,
63 | gamesInSession: Number,
64 | });
65 |
66 | var Client = mongoose.model('Client', clientsSchema);
67 |
68 | var db = mongoose.connection;
69 | db.on('error', console.error.bind(console, 'connection error:'));
70 | db.once('open', function callback () {
71 | console.log('connected to db', db.name);
72 | });
73 |
74 | // node-dogecoin
75 | dogecoin.auth('dogecoinrpc', 'BCStFnenZDA6rmDygTdST6HW2jCz2YpVWEnVfvAangTk');
76 |
77 | dogecoin.exec('getbalance', function(err, balance) {
78 | console.log(err, balance);
79 | })
80 | // service functions
81 | var genCookie = function () {
82 | var randomNumber=Math.random().toString();
83 | return randomNumber.substring(2,randomNumber.length);
84 | };
85 | var genRandomFloorBetween = function (min, max) {
86 | var rand = min - 0.5 + Math.random()*(max-min+1);
87 | rand = Math.round(rand);
88 | return rand;
89 | };
90 | var genGameCode = function () {
91 | var code = genRandomFloorBetween(0, 999999).toString();
92 | while (code.length < 6) {
93 | code = '0' + code;
94 | }
95 | return code;
96 | };
97 | var checkClient = function (clients, currentClient) {
98 | console.log("Handle clients from Array[" + clients.length + "]")
99 | var IPcounter = 0,
100 | UIDcounter = 0,
101 | IPpaymentsCounter = 0,
102 | UIDpaymentsCounter = 0,
103 | IPtimeCounter = 60 * 1000,
104 | UIDtimeCounter = 0,
105 | data = {},
106 | checkup = null;
107 |
108 | clients.forEach(function(client, i) {
109 |
110 | if (client.clientIp === currentClient.clientIp) {
111 | IPcounter++;
112 | if (client.paymentRequest) {
113 | IPpaymentsCounter += client.paymentRequest;
114 | if (currentClient.timeEnd && currentClient.clientId !== client.clientId) {
115 | IPtimeCounter = Math.min(IPtimeCounter, currentClient.timeEnd - client.timeEnd);
116 | }
117 | }
118 | }
119 | if (client.cookieUID === currentClient.cookieUID) {
120 | UIDcounter++;
121 | if (client.paymentRequest) {
122 | UIDpaymentsCounter += client.paymentRequest;
123 | }
124 | }
125 | // console.log("handle client #" + i);
126 | });
127 | console.log('IPtimeCounter', IPtimeCounter);
128 | if (currentClient.checkup === false ||
129 | currentClient.maxCoinsCheck === false ||
130 | // IPcounter > 10000 ||
131 | // UIDcounter > 1000 ||
132 | IPpaymentsCounter > 1000 ||
133 | UIDpaymentsCounter > 100 ||
134 | IPtimeCounter < 20 * 1000) {
135 | checkup = false;
136 | } else {
137 | checkup = true;
138 | }
139 | // console.log('emit socket message in ' + currentClient.gameCode + ' with type paymentCheck, checkup: ' + checkup);
140 | // if(currentClient.gameCode && currentClient.gameCode in socketCodes) {
141 | // socketCodes[currentClient.gameCode].emit('message', {type: 'paymentCheck', checkup: checkup});
142 | // }
143 | console.log(
144 | 'checkup', currentClient.checkup === false,
145 | 'maxCoinsCheck', currentClient.maxCoinsCheck === false,
146 | 'IPcounter', IPcounter > 1000,
147 | 'UIDcounter', UIDcounter > 100,
148 | 'IPpaymentsCounter', IPpaymentsCounter > 20,
149 | 'UIDpaymentsCounter', UIDpaymentsCounter > 5,
150 | 'IPtimeCounter', IPtimeCounter < 20 * 1000,
151 | 'IPtimeCounter', IPtimeCounter);
152 | return checkup;
153 | };
154 |
155 | var checkCoins = function (timeStart, timeEnd, coinsCollect) {
156 | var time = (timeEnd - timeStart)/1000,
157 | maxCoins = calcMaxCoins(time);
158 | // if client recieve more coins than it may
159 | return coinsCollect <= maxCoins;
160 | };
161 |
162 | var calcMaxCoins = function (time) {
163 | var speedStart = 1/60,
164 | acceleration = 1/2500,
165 | maxPath = 0,
166 | maxCoins = 0,
167 | t = 0.25, // coins position in the tube
168 | dt = 0.004, // coins position offset
169 | n = 10; // number of coins in a row
170 |
171 | maxPath = (speedStart + acceleration * Math.sqrt(time * 60)) * time;
172 |
173 | maxCoins = Math.round((maxPath / (t + dt * (n - 1)) * n)*0.02);
174 | console.log('time:' + time, 'maxCoins:' + maxCoins, 'maxPath:' + maxPath);
175 | return Math.min(maxCoins, 30);
176 | };
177 | // var checkUID = function (uid) {};
178 | // var checkIp = function (ip) {};
179 |
180 |
181 | // Tell Socket.io to pay attention
182 | io = io.listen(server, { log: false });
183 |
184 | // Sockets object to save game code -> socked associations
185 | var socketCodes = {};
186 |
187 | // When a client connects...
188 | io.sockets.on('connection', function(socket) {
189 | // Confirm the connection
190 | socket.emit('welcome', {});
191 |
192 | socket.on('message', function (data) {
193 | // ...emit a 'message' event to every other socket
194 | for (var socket in io.sockets.sockets) {
195 | if (io.sockets.sockets.hasOwnProperty(socket)) {
196 | if (io.sockets.sockets[socket].gameCode === data.gameCode) {
197 | io.sockets.sockets[socket].emit('message', data);
198 | }
199 | }
200 | }
201 | if (data.type === 'gamestarted') {
202 | var timeStart = Date.now();
203 | // update client in clients collection
204 | Client.findOne({'clientId': data.sessionid}).exec(function(err, client) {
205 | if (err) {
206 | console.log('Error:', err);
207 | return;
208 | }
209 | if (client) {
210 | client.timeStart = timeStart;
211 | client.gamesInSession += 1;
212 | client.save(function (err) {
213 | if (err) console.log("Error: could not save client timeStart");
214 | });
215 | }
216 | });
217 | }
218 | if (data.type === 'gameover') {
219 | // update client in clients collection
220 | var timeEnd = Date.now();
221 | Client.findOne({'clientId': data.sessionid}).exec(function(err, client) {
222 | if (err) {
223 | console.log('Error:', err);
224 | return;
225 | }
226 | if (client) {
227 | client.timeEnd = timeEnd;
228 | client.coinsCollect = data.coinsCollect;
229 | client.maxCoinsCheck = checkCoins(client.timeStart, client.timeEnd, client.coinsCollect);
230 | client.save(function (err) {
231 | if (err) console.log("Error: could not save client timeEnd data", err);
232 | });
233 | }
234 | });
235 | }
236 | if (data.type === 'checkup') {
237 | Client.findOne({'clientId': data.sessionid}).exec(function(err, client) {
238 | if (err) {
239 | console.log('Error:', err);
240 | return;
241 | }
242 | if (client) {
243 | Client.find({ $or: [{'clientIp': client.clientIp}, {'cookieUID': client.cookieUID}]}).exec(function(err, clients) {
244 | if (err) {
245 | console.log('Error:', err);
246 | return;
247 | }
248 | if (client.coinsCollect === 0) {
249 | socketCodes[client.gameCode].emit('transactionMessage', {type: 'transactionFail', error: 'can not send 0 dogecoin'});
250 | return;
251 | }
252 | client.paymentRequest += 1;
253 | client.checkup = checkClient(clients, client);
254 | client.save(function (err) {
255 | if (err) console.log("Error: could not save client checkup");
256 | });
257 | if (client.checkup) {
258 | socketCodes[client.gameCode].emit('paymentMessage', {type: 'transactionStart'});
259 | // instance.withdraw(client.coinsCollect, data.dogecoinId, 7085, function (error, transaction) {
260 | // if(error) {
261 | // // Handle error
262 | // console.log(error, client.gameCode);
263 | // socketCodes[client.gameCode].emit('transactionMessage', {type: 'transactionFail', error: error});
264 | // } else {
265 | // console.log(transaction);
266 | // socketCodes[client.gameCode].emit('transactionMessage', {type: 'transactionComplete', transactionid: transaction});
267 | // }
268 | // });
269 | dogecoin.exec('sendtoaddress', data.dogecoinId, client.coinsCollect, 'Digital Trip payment', 'from Digital Trip', function(error, transaction) {
270 | console.log(error, transaction);
271 | if(error) {
272 | // Handle error
273 | console.log(error, client.gameCode);
274 | socketCodes[client.gameCode].emit('transactionMessage', {type: 'transactionFail', error: error});
275 | } else {
276 | console.log(client.coinsCollect, transaction);
277 | socketCodes[client.gameCode].emit('transactionMessage', {type: 'transactionComplete', transactionid: transaction});
278 | }
279 | })
280 | } else {
281 | console.log('checkup nope');
282 | socketCodes[client.gameCode].emit('paymentMessage', {type: 'transactionDenied'});
283 | }
284 | });
285 | }
286 | });
287 | }
288 | });
289 |
290 | // Receive the client device type
291 | socket.on('device', function(data) {
292 | // if client is a browser game
293 | if(data.type == 'game') {
294 | // Generate a code
295 | var gameCode = genGameCode();
296 | // Ensure uniqueness
297 | while(gameCode in socketCodes) {
298 | gameCode = genGameCode();
299 | }
300 |
301 | // Store game code -> socket association
302 | socketCodes[gameCode] = io.sockets.sockets[socket.id];
303 | socket.gameCode = gameCode;
304 |
305 | // Tell game client to initialize
306 | // and show the game code to the user
307 | socket.emit('initialize', gameCode);
308 | // insert data into MongoDB
309 | Client.findOne({'clientId': socket.id}).exec(function(err, client) {
310 | if(!err) {
311 | if(!client) {
312 | client = new Client({
313 | cookieUID: data.cookieUID,
314 | clientId: socket.id,
315 | clientIp: socket.handshake.address.address,
316 | gameCode: gameCode,
317 | paymentRequest: 0,
318 | gamesInSession: 0,
319 | });
320 | } else {
321 | client.gamesInSession += 1;
322 | }
323 | client.save(function(err) {
324 | if (err) console.log("Error: could not save client on start");
325 | });
326 | }
327 | });
328 |
329 | } else if(data.type == 'controller') { // if client is a phone controller
330 | // if game code is valid...
331 | if(data.gameCode in socketCodes) {
332 | // save the game code for controller commands
333 | socket.gameCode = data.gameCode;
334 | // initialize the controller
335 | socket.emit('connected', {});
336 |
337 | // start the game
338 | if(data.gameCode && data.gameCode in socketCodes) {
339 | socketCodes[data.gameCode].emit('connected', {});
340 | }
341 | socket.emit('message', {type: 'vibr', time: 100});
342 | } else { // else game code is invalid, send fail message and disconnect
343 | socket.emit('fail', {});
344 | socket.emit('message', {type: 'vibr', time: 1000});
345 | socket.disconnect();
346 | }
347 | }
348 | });
349 | // send accelerate command to game client
350 | socket.on('accelerate', function(data) {
351 | var bAccelerate = data.accelerate;
352 | if(socket.gameCode && socket.gameCode in socketCodes) {
353 | socketCodes[socket.gameCode].emit('accelerate', bAccelerate);
354 | }
355 | });
356 | // send turn command to game client
357 | socket.on('turn', function(data) {
358 | if(socket.gameCode && socket.gameCode in socketCodes) {
359 | socketCodes[socket.gameCode].emit('turn', data.turn);
360 | }
361 | });
362 | // send click command to game client
363 | socket.on('click', function(data) {
364 | if(socket.gameCode && socket.gameCode in socketCodes) {
365 | socketCodes[socket.gameCode].emit('click', data.click);
366 | }
367 | });
368 | // send start command to game client
369 | socket.on('start', function(data) {
370 | if(socket.gameCode && socket.gameCode in socketCodes) {
371 | socketCodes[socket.gameCode].emit('start', data);
372 | }
373 | });
374 | // send disconnect command to game client
375 | socket.on('disconnect', function(data) {
376 | if(socket.gameCode && socket.gameCode in socketCodes) {
377 | socketCodes[socket.gameCode].emit('disconnectController', data);
378 | }
379 | });
380 | });
381 | // When a client disconnects...
382 | io.sockets.on('disconnect', function(socket) {
383 | // remove game code -> socket association on disconnect
384 | if(socket.gameCode && socket.gameCode in socketCodes) {
385 | delete socketCodes[socket.gameCode];
386 | }
387 | });
388 |
--------------------------------------------------------------------------------