Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 (function() { | 4 (function() { |
| 5 'use strict'; | 5 'use strict'; |
| 6 /** | 6 /** |
| 7 * T-Rex runner. | 7 * T-Rex runner. |
| 8 * @param {string} outerContainerId Outer containing element id. | 8 * @param {string} outerContainerId Outer containing element id. |
| 9 * @param {object} opt_config | 9 * @param {object} opt_config |
| 10 * @constructor | 10 * @constructor |
| 11 * @export | 11 * @export |
| 12 */ | 12 */ |
| 13 function Runner(outerContainerId, opt_config) { | 13 function Runner(outerContainerId, opt_config) { |
| 14 // Singleton | 14 // Singleton |
| 15 if (Runner.instance_) { | 15 if (Runner.instance_) { |
| 16 return Runner.instance_; | 16 return Runner.instance_; |
| 17 } | 17 } |
| 18 Runner.instance_ = this; | 18 Runner.instance_ = this; |
| 19 | 19 |
| 20 this.outerContainerEl = document.querySelector(outerContainerId); | 20 this.outerContainerEl = document.querySelector(outerContainerId); |
| 21 this.containerEl = null; | 21 this.containerEl = null; |
| 22 this.detailsButton = document.querySelector('#details-button'); | |
|
arv (Not doing code reviews)
2014/09/29 16:47:42
Should this be
this.outerContainerEl.querySelecto
edwardjung
2014/09/29 17:32:56
Done.
| |
| 22 | 23 |
| 23 this.config = opt_config || Runner.config; | 24 this.config = opt_config || Runner.config; |
| 24 | 25 |
| 25 this.dimensions = Runner.defaultDimensions; | 26 this.dimensions = Runner.defaultDimensions; |
| 26 | 27 |
| 27 this.canvas = null; | 28 this.canvas = null; |
| 28 this.canvasCtx = null; | 29 this.canvasCtx = null; |
| 29 | 30 |
| 30 this.tRex = null; | 31 this.tRex = null; |
| 31 | 32 |
| (...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 571 document.removeEventListener(Runner.events.MOUSEDOWN, this); | 572 document.removeEventListener(Runner.events.MOUSEDOWN, this); |
| 572 document.removeEventListener(Runner.events.MOUSEUP, this); | 573 document.removeEventListener(Runner.events.MOUSEUP, this); |
| 573 } | 574 } |
| 574 }, | 575 }, |
| 575 | 576 |
| 576 /** | 577 /** |
| 577 * Process keydown. | 578 * Process keydown. |
| 578 * @param {Event} e | 579 * @param {Event} e |
| 579 */ | 580 */ |
| 580 onKeyDown: function(e) { | 581 onKeyDown: function(e) { |
| 581 if (!this.crashed && (Runner.keycodes.JUMP[String(e.keyCode)] || | 582 if (e.target != this.detailsButton) { |
| 582 e.type == Runner.events.TOUCHSTART)) { | 583 if (!this.crashed && (Runner.keycodes.JUMP[String(e.keyCode)] || |
| 583 if (!this.activated) { | 584 e.type == Runner.events.TOUCHSTART)) { |
| 584 this.loadSounds(); | 585 if (!this.activated) { |
| 585 this.activated = true; | 586 this.loadSounds(); |
| 587 this.activated = true; | |
| 588 } | |
| 589 | |
| 590 if (!this.tRex.jumping) { | |
| 591 this.playSound(this.soundFx.BUTTON_PRESS); | |
| 592 this.tRex.startJump(); | |
| 593 } | |
| 586 } | 594 } |
| 587 | 595 |
| 588 if (!this.tRex.jumping) { | 596 if (this.crashed && e.type == Runner.events.TOUCHSTART && |
| 589 this.playSound(this.soundFx.BUTTON_PRESS); | 597 e.currentTarget == this.containerEl) { |
| 590 this.tRex.startJump(); | 598 this.restart(); |
| 591 } | 599 } |
| 592 } | 600 } |
| 593 | 601 |
| 594 if (this.crashed && e.type == Runner.events.TOUCHSTART && | |
| 595 e.currentTarget == this.containerEl) { | |
| 596 this.restart(); | |
| 597 } | |
| 598 | |
| 599 // Speed drop, activated only when jump key is not pressed. | 602 // Speed drop, activated only when jump key is not pressed. |
| 600 if (Runner.keycodes.DUCK[e.keyCode] && this.tRex.jumping) { | 603 if (Runner.keycodes.DUCK[e.keyCode] && this.tRex.jumping) { |
| 601 e.preventDefault(); | 604 e.preventDefault(); |
| 602 this.tRex.setSpeedDrop(); | 605 this.tRex.setSpeedDrop(); |
| 603 } | 606 } |
| 604 }, | 607 }, |
| 605 | 608 |
| 606 | 609 |
| 607 /** | 610 /** |
| 608 * Process key up. | 611 * Process key up. |
| (...skipping 1239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1848 | 1851 |
| 1849 this.init(); | 1852 this.init(); |
| 1850 }; | 1853 }; |
| 1851 | 1854 |
| 1852 | 1855 |
| 1853 /** | 1856 /** |
| 1854 * Cloud object config. | 1857 * Cloud object config. |
| 1855 * @enum {number} | 1858 * @enum {number} |
| 1856 */ | 1859 */ |
| 1857 Cloud.config = { | 1860 Cloud.config = { |
| 1858 HEIGHT: 13, | 1861 HEIGHT: 14, |
| 1859 MAX_CLOUD_GAP: 400, | 1862 MAX_CLOUD_GAP: 400, |
| 1860 MAX_SKY_LEVEL: 30, | 1863 MAX_SKY_LEVEL: 30, |
| 1861 MIN_CLOUD_GAP: 100, | 1864 MIN_CLOUD_GAP: 100, |
| 1862 MIN_SKY_LEVEL: 71, | 1865 MIN_SKY_LEVEL: 71, |
| 1863 WIDTH: 46 | 1866 WIDTH: 46 |
| 1864 }; | 1867 }; |
| 1865 | 1868 |
| 1866 | 1869 |
| 1867 Cloud.prototype = { | 1870 Cloud.prototype = { |
| 1868 /** | 1871 /** |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2226 | 2229 |
| 2227 /** | 2230 /** |
| 2228 * Add a new cloud to the horizon. | 2231 * Add a new cloud to the horizon. |
| 2229 */ | 2232 */ |
| 2230 addCloud: function() { | 2233 addCloud: function() { |
| 2231 this.clouds.push(new Cloud(this.canvas, this.cloudImg, | 2234 this.clouds.push(new Cloud(this.canvas, this.cloudImg, |
| 2232 this.dimensions.WIDTH)); | 2235 this.dimensions.WIDTH)); |
| 2233 } | 2236 } |
| 2234 }; | 2237 }; |
| 2235 })(); | 2238 })(); |
| OLD | NEW |