littlejsengine 1.3.0 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +4 -3
  2. package/build.bat +1 -1
  3. package/docs/Audio.html +2268 -0
  4. package/docs/Color.html +3376 -0
  5. package/docs/Debug.html +2933 -0
  6. package/docs/Draw.html +4480 -0
  7. package/docs/EngineObject.html +4734 -0
  8. package/docs/FontImage.html +1055 -0
  9. package/docs/Input.html +2806 -0
  10. package/docs/Medal.html +1007 -0
  11. package/docs/Medals.html +628 -0
  12. package/docs/Music.html +584 -0
  13. package/docs/Newgrounds.html +1399 -0
  14. package/docs/Particle.html +4825 -0
  15. package/docs/ParticleEmitter.html +8099 -0
  16. package/docs/Random.html +1774 -0
  17. package/docs/Settings.html +3140 -0
  18. package/docs/Sound.html +1249 -0
  19. package/docs/TileCollision.html +1409 -0
  20. package/docs/TileLayer.html +7310 -0
  21. package/docs/TileLayerData.html +1052 -0
  22. package/docs/Timer.html +1295 -0
  23. package/docs/Utilities.html +3278 -0
  24. package/docs/Vector2.html +4266 -0
  25. package/docs/WebGL.html +2307 -0
  26. package/docs/engine.js.html +443 -0
  27. package/docs/engineAudio.js.html +627 -0
  28. package/docs/engineDebug.js.html +554 -0
  29. package/docs/engineDraw.js.html +539 -0
  30. package/docs/engineInput.js.html +571 -0
  31. package/docs/engineMedals.js.html +460 -0
  32. package/docs/engineObject.js.html +533 -0
  33. package/docs/engineParticles.js.html +443 -0
  34. package/docs/engineSettings.js.html +381 -0
  35. package/docs/engineTileLayer.js.html +503 -0
  36. package/docs/engineUtilities.js.html +700 -0
  37. package/docs/engineWebGL.js.html +511 -0
  38. package/docs/fonts/MavenPro-Regular.ttf +0 -0
  39. package/docs/fonts/Montserrat-Regular.ttf +0 -0
  40. package/docs/fonts/Muli-Black.ttf +0 -0
  41. package/docs/fonts/OFL-hind.txt +93 -0
  42. package/docs/fonts/OFL-montserrat.txt +93 -0
  43. package/docs/global.html +1771 -0
  44. package/docs/index.css +6 -0
  45. package/docs/index.html +267 -0
  46. package/docs/scripts/fix-code-block.js +53 -0
  47. package/docs/scripts/fix-navbar.js +25 -0
  48. package/docs/scripts/linenumber.js +25 -0
  49. package/docs/scripts/misc.js +217 -0
  50. package/docs/scripts/resize.js +85 -0
  51. package/docs/scripts/search.js +83 -0
  52. package/docs/scripts/third-party/Apache-License-2.0.txt +202 -0
  53. package/docs/scripts/third-party/fuse.js +9 -0
  54. package/docs/scripts/third-party/lang-css.js +2 -0
  55. package/docs/scripts/third-party/prettify.js +28 -0
  56. package/docs/static/favicon.png +0 -0
  57. package/docs/static/index.css +4 -0
  58. package/docs/styles/clean-jsdoc-theme-base.css +393 -0
  59. package/docs/styles/clean-jsdoc-theme-dark.css +324 -0
  60. package/docs/styles/clean-jsdoc-theme-light.css +319 -0
  61. package/docs/styles/reset.css +346 -0
  62. package/docs/styles/third-party/ionicons.min.css +11 -0
  63. package/docs/styles/third-party/prettify-jsdoc.css +111 -0
  64. package/docs/styles/third-party/prettify-tomorrow.css +5 -0
  65. package/engine/engine.all.js +72 -33
  66. package/engine/engine.all.min.js +1 -1
  67. package/engine/engine.all.release.js +72 -33
  68. package/engine/engine.js +1 -1
  69. package/engine/engineAudio.js +5 -7
  70. package/engine/engineBuild.bat +0 -1
  71. package/engine/engineDraw.js +4 -3
  72. package/engine/engineInput.js +5 -1
  73. package/engine/engineMedals.js +1 -1
  74. package/engine/engineObject.js +19 -16
  75. package/engine/engineParticles.js +1 -1
  76. package/engine/engineSettings.js +5 -0
  77. package/engine/engineUtilities.js +30 -2
  78. package/engine/engineWebGL.js +1 -1
  79. package/engine/index.d.ts +15 -5
  80. package/examples/breakout/index.html +3 -3
  81. package/examples/particles/index.html +62 -62
  82. package/examples/platformer/index.html +5 -5
  83. package/examples/puzzle/game.js +3 -1
  84. package/examples/puzzle/index.html +2 -2
  85. package/examples/stress/index.html +1 -1
  86. package/game.js +3 -14
  87. package/index.html +13 -13
  88. package/package.json +1 -1
@@ -0,0 +1,700 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+
8
+ <!-- Adding favicon -->
9
+
10
+ <link rel="icon" href="./static/favicon.png" />
11
+
12
+
13
+ <!-- Adding meta -->
14
+
15
+
16
+ <!-- Adding external script-->
17
+
18
+
19
+ <!-- Adding external style-->
20
+
21
+
22
+ <!-- Adding scripts-->
23
+
24
+
25
+ <!-- Adding style-->
26
+
27
+
28
+ <!-- Adding overlay script-->
29
+
30
+
31
+ <!-- Adding overlay style-->
32
+
33
+
34
+
35
+ <title>
36
+ engineUtilities.js
37
+ </title>
38
+
39
+ <!--[if lt IE 9]>
40
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
41
+ <![endif]-->
42
+ <link type="text/css" rel="stylesheet" href="styles/third-party/ionicons.min.css">
43
+ <link type="text/css" rel="stylesheet" href="styles/third-party/prettify-tomorrow.css">
44
+ <link type="text/css" rel="stylesheet" href="styles/reset.css">
45
+ <link type="text/css" rel="stylesheet" href="styles/clean-jsdoc-theme-base.css">
46
+ <link type="text/css" rel="stylesheet" href="styles/clean-jsdoc-theme-dark.css">
47
+
48
+ <style>
49
+ .prettyprint code {font-family:monospace}
50
+ </style>
51
+
52
+ <svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
53
+ style="display:none">
54
+ <defs>
55
+ <symbol id="copy-icon" viewbox="0 0 488.3 488.3">
56
+ <g>
57
+ <path
58
+ d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z" />
59
+ <path
60
+ d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z" />
61
+ </g>
62
+ </symbol>
63
+ <symbol id='search-icon' viewBox="0 0 512 512">
64
+ <g>
65
+ <g>
66
+ <path
67
+ d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z" />
68
+ </g>
69
+ </g>
70
+ <g>
71
+ <g>
72
+ <path
73
+ d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z" />
74
+ </g>
75
+ </g>
76
+ </symbol>
77
+ <symbol id="down-icon" viewBox="0 0 16 16">
78
+ <path
79
+ fill-rule="evenodd"
80
+ clip-rule="evenodd"
81
+ d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"
82
+ >
83
+ </path>
84
+ </symbol>
85
+ </defs>
86
+ </svg>
87
+ </head>
88
+
89
+ <body>
90
+
91
+ <nav class="navbar" id="navbar">
92
+ <div class="navbar-heading" id="navbar-heading"><a href="index.html"><h2 class="navbar-heading-text">LittleJS - The Tiny JavaScript Game Engine That Can!</h2></a></div><div class="search-box" id="search-box"><div class="search-box-input-container"><input class="search-box-input" type="text" placeholder="Search..." id="search-box-input" /><svg class="search-icon" alt="search-icon"><use xlink:href="#search-icon"></use></svg></div><div class="search-item-container" id="search-item-container"><ul class="search-item-ul" id="search-item-ul"></ul></div></div><div class="sidebar-main-content" id="sidebar-main-content"><div class="accordion collapsed" id="3563688" > <h3 class="accordion-heading">Classes<svg><use xlink:href="#down-icon"></use></svg></h3><ul class="accordion-content"><li class="accordion collapsed child" id=7746959><div class="accordion-heading child"><a href="Color.html">Color</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Color.html#add">add</a></li><li data-type='method'><a href="Color.html#clamp">clamp</a></li><li data-type='method'><a href="Color.html#copy">copy</a></li><li data-type='method'><a href="Color.html#divide">divide</a></li><li data-type='method'><a href="Color.html#getHSLA">getHSLA</a></li><li data-type='method'><a href="Color.html#hex">hex</a></li><li data-type='method'><a href="Color.html#lerp">lerp</a></li><li data-type='method'><a href="Color.html#multiply">multiply</a></li><li data-type='method'><a href="Color.html#mutate">mutate</a></li><li data-type='method'><a href="Color.html#rgbaInt">rgbaInt</a></li><li data-type='method'><a href="Color.html#scale">scale</a></li><li data-type='method'><a href="Color.html#setHex">setHex</a></li><li data-type='method'><a href="Color.html#setHSLA">setHSLA</a></li><li data-type='method'><a href="Color.html#subtract">subtract</a></li><li data-type='method'><a href="Color.html#toString">toString</a></li></ul></li><li class="accordion collapsed child" id=6307330><div class="accordion-heading child"><a href="EngineObject.html">EngineObject</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="EngineObject.html#addChild">addChild</a></li><li data-type='method'><a href="EngineObject.html#applyAcceleration">applyAcceleration</a></li><li data-type='method'><a href="EngineObject.html#applyForce">applyForce</a></li><li data-type='method'><a href="EngineObject.html#collideWithObject">collideWithObject</a></li><li data-type='method'><a href="EngineObject.html#collideWithTile">collideWithTile</a></li><li data-type='method'><a href="EngineObject.html#collideWithTileRaycast">collideWithTileRaycast</a></li><li data-type='method'><a href="EngineObject.html#destroy">destroy</a></li><li data-type='method'><a href="EngineObject.html#getAliveTime">getAliveTime</a></li><li data-type='method'><a href="EngineObject.html#getMirrorSign">getMirrorSign</a></li><li data-type='method'><a href="EngineObject.html#removeChild">removeChild</a></li><li data-type='method'><a href="EngineObject.html#render">render</a></li><li data-type='method'><a href="EngineObject.html#setCollision">setCollision</a></li><li data-type='method'><a href="EngineObject.html#update">update</a></li></ul></li><li class="accordion collapsed child" id=8508237><div class="accordion-heading child"><a href="FontImage.html">FontImage</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="FontImage.html#drawText">drawText</a></li><li data-type='method'><a href="FontImage.html#drawTextScreen">drawTextScreen</a></li></ul></li><li class="accordion collapsed child" id=2613323><div class="accordion-heading child"><a href="Medal.html">Medal</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Medal.html#render">render</a></li><li data-type='method'><a href="Medal.html#renderIcon">renderIcon</a></li><li data-type='method'><a href="Medal.html#unlock">unlock</a></li></ul></li><li class="accordion collapsed child" id=5931143><div class="accordion-heading child"><a href="Music.html">Music</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Music.html#play">play</a></li></ul></li><li class="accordion collapsed child" id=7102537><div class="accordion-heading child"><a href="Newgrounds.html">Newgrounds</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Newgrounds.html#call">call</a></li><li data-type='method'><a href="Newgrounds.html#getScores">getScores</a></li><li data-type='method'><a href="Newgrounds.html#logView">logView</a></li><li data-type='method'><a href="Newgrounds.html#postScore">postScore</a></li><li data-type='method'><a href="Newgrounds.html#unlockMedal">unlockMedal</a></li></ul></li><li class="accordion collapsed child" id=4104404><div class="accordion-heading child"><a href="Particle.html">Particle</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Particle.html#addChild">addChild</a></li><li data-type='method'><a href="Particle.html#applyAcceleration">applyAcceleration</a></li><li data-type='method'><a href="Particle.html#applyForce">applyForce</a></li><li data-type='method'><a href="Particle.html#collideWithObject">collideWithObject</a></li><li data-type='method'><a href="Particle.html#collideWithTile">collideWithTile</a></li><li data-type='method'><a href="Particle.html#collideWithTileRaycast">collideWithTileRaycast</a></li><li data-type='method'><a href="Particle.html#destroy">destroy</a></li><li data-type='method'><a href="Particle.html#getAliveTime">getAliveTime</a></li><li data-type='method'><a href="Particle.html#getMirrorSign">getMirrorSign</a></li><li data-type='method'><a href="Particle.html#removeChild">removeChild</a></li><li data-type='method'><a href="Particle.html#render">render</a></li><li data-type='method'><a href="Particle.html#setCollision">setCollision</a></li><li data-type='method'><a href="Particle.html#update">update</a></li></ul></li><li class="accordion collapsed child" id=8166593><div class="accordion-heading child"><a href="ParticleEmitter.html">ParticleEmitter</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="ParticleEmitter.html#addChild">addChild</a></li><li data-type='method'><a href="ParticleEmitter.html#applyAcceleration">applyAcceleration</a></li><li data-type='method'><a href="ParticleEmitter.html#applyForce">applyForce</a></li><li data-type='method'><a href="ParticleEmitter.html#collideWithObject">collideWithObject</a></li><li data-type='method'><a href="ParticleEmitter.html#collideWithTile">collideWithTile</a></li><li data-type='method'><a href="ParticleEmitter.html#collideWithTileRaycast">collideWithTileRaycast</a></li><li data-type='method'><a href="ParticleEmitter.html#destroy">destroy</a></li><li data-type='method'><a href="ParticleEmitter.html#emitParticle">emitParticle</a></li><li data-type='method'><a href="ParticleEmitter.html#getAliveTime">getAliveTime</a></li><li data-type='method'><a href="ParticleEmitter.html#getMirrorSign">getMirrorSign</a></li><li data-type='method'><a href="ParticleEmitter.html#removeChild">removeChild</a></li><li data-type='method'><a href="ParticleEmitter.html#render">render</a></li><li data-type='method'><a href="ParticleEmitter.html#setCollision">setCollision</a></li><li data-type='method'><a href="ParticleEmitter.html#update">update</a></li></ul></li><li class="accordion collapsed child" id=1946205><div class="accordion-heading child"><a href="Sound.html">Sound</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Sound.html#play">play</a></li><li data-type='method'><a href="Sound.html#playNote">playNote</a></li></ul></li><li class="accordion collapsed child" id=2790513><div class="accordion-heading child"><a href="TileLayer.html">TileLayer</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="TileLayer.html#addChild">addChild</a></li><li data-type='method'><a href="TileLayer.html#applyAcceleration">applyAcceleration</a></li><li data-type='method'><a href="TileLayer.html#applyForce">applyForce</a></li><li data-type='method'><a href="TileLayer.html#collideWithObject">collideWithObject</a></li><li data-type='method'><a href="TileLayer.html#collideWithTile">collideWithTile</a></li><li data-type='method'><a href="TileLayer.html#collideWithTileRaycast">collideWithTileRaycast</a></li><li data-type='method'><a href="TileLayer.html#destroy">destroy</a></li><li data-type='method'><a href="TileLayer.html#drawAllTileData">drawAllTileData</a></li><li data-type='method'><a href="TileLayer.html#drawCanvas2D">drawCanvas2D</a></li><li data-type='method'><a href="TileLayer.html#drawRect">drawRect</a></li><li data-type='method'><a href="TileLayer.html#drawTile">drawTile</a></li><li data-type='method'><a href="TileLayer.html#drawTileData">drawTileData</a></li><li data-type='method'><a href="TileLayer.html#getAliveTime">getAliveTime</a></li><li data-type='method'><a href="TileLayer.html#getData">getData</a></li><li data-type='method'><a href="TileLayer.html#getMirrorSign">getMirrorSign</a></li><li data-type='method'><a href="TileLayer.html#redraw">redraw</a></li><li data-type='method'><a href="TileLayer.html#redrawEnd">redrawEnd</a></li><li data-type='method'><a href="TileLayer.html#redrawStart">redrawStart</a></li><li data-type='method'><a href="TileLayer.html#removeChild">removeChild</a></li><li data-type='method'><a href="TileLayer.html#render">render</a></li><li data-type='method'><a href="TileLayer.html#setCollision">setCollision</a></li><li data-type='method'><a href="TileLayer.html#setData">setData</a></li><li data-type='method'><a href="TileLayer.html#update">update</a></li></ul></li><li class="accordion collapsed child" id=8451372><div class="accordion-heading child"><a href="TileLayerData.html">TileLayerData</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="TileLayerData.html#clear">clear</a></li></ul></li><li class="accordion collapsed child" id=1385312><div class="accordion-heading child"><a href="Timer.html">Timer</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Timer.html#active">active</a></li><li data-type='method'><a href="Timer.html#elapsed">elapsed</a></li><li data-type='method'><a href="Timer.html#get">get</a></li><li data-type='method'><a href="Timer.html#getPercent">getPercent</a></li><li data-type='method'><a href="Timer.html#isSet">isSet</a></li><li data-type='method'><a href="Timer.html#set">set</a></li><li data-type='method'><a href="Timer.html#toString">toString</a></li><li data-type='method'><a href="Timer.html#unset">unset</a></li></ul></li><li class="accordion collapsed child" id=5094252><div class="accordion-heading child"><a href="Vector2.html">Vector2</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Vector2.html#add">add</a></li><li data-type='method'><a href="Vector2.html#angle">angle</a></li><li data-type='method'><a href="Vector2.html#area">area</a></li><li data-type='method'><a href="Vector2.html#arrayCheck">arrayCheck</a></li><li data-type='method'><a href="Vector2.html#clampLength">clampLength</a></li><li data-type='method'><a href="Vector2.html#copy">copy</a></li><li data-type='method'><a href="Vector2.html#cross">cross</a></li><li data-type='method'><a href="Vector2.html#direction">direction</a></li><li data-type='method'><a href="Vector2.html#distance">distance</a></li><li data-type='method'><a href="Vector2.html#distanceSquared">distanceSquared</a></li><li data-type='method'><a href="Vector2.html#divide">divide</a></li><li data-type='method'><a href="Vector2.html#dot">dot</a></li><li data-type='method'><a href="Vector2.html#floor">floor</a></li><li data-type='method'><a href="Vector2.html#invert">invert</a></li><li data-type='method'><a href="Vector2.html#length">length</a></li><li data-type='method'><a href="Vector2.html#lengthSquared">lengthSquared</a></li><li data-type='method'><a href="Vector2.html#lerp">lerp</a></li><li data-type='method'><a href="Vector2.html#multiply">multiply</a></li><li data-type='method'><a href="Vector2.html#normalize">normalize</a></li><li data-type='method'><a href="Vector2.html#rotate">rotate</a></li><li data-type='method'><a href="Vector2.html#scale">scale</a></li><li data-type='method'><a href="Vector2.html#setAngle">setAngle</a></li><li data-type='method'><a href="Vector2.html#subtract">subtract</a></li><li data-type='method'><a href="Vector2.html#toString">toString</a></li></ul></li></ul> </div><div class="accordion collapsed" id="9985463" > <h3 class="accordion-heading">Namespaces<svg><use xlink:href="#down-icon"></use></svg></h3><ul class="accordion-content"><li class="accordion collapsed child" id=1451135><div class="accordion-heading child"><a href="Debug.html">Debug</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Debug.html#.debugAABB">debugAABB</a></li><li data-type='method'><a href="Debug.html#.debugCircle">debugCircle</a></li><li data-type='method'><a href="Debug.html#.debugClear">debugClear</a></li><li data-type='method'><a href="Debug.html#.debugLine">debugLine</a></li><li data-type='method'><a href="Debug.html#.debugPoint">debugPoint</a></li><li data-type='method'><a href="Debug.html#.debugRect">debugRect</a></li><li data-type='method'><a href="Debug.html#.debugSaveCanvas">debugSaveCanvas</a></li><li data-type='method'><a href="Debug.html#.debugText">debugText</a></li></ul></li><li class="accordion collapsed child" id=3748274><div class="accordion-heading child"><a href="Draw.html">Draw</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Draw.html#.drawCanvas2D">drawCanvas2D</a></li><li data-type='method'><a href="Draw.html#.drawLine">drawLine</a></li><li data-type='method'><a href="Draw.html#.drawRect">drawRect</a></li><li data-type='method'><a href="Draw.html#.drawRectScreenSpace">drawRectScreenSpace</a></li><li data-type='method'><a href="Draw.html#.drawText">drawText</a></li><li data-type='method'><a href="Draw.html#.drawTextScreen">drawTextScreen</a></li><li data-type='method'><a href="Draw.html#.drawTile">drawTile</a></li><li data-type='method'><a href="Draw.html#.drawTileScreenSpace">drawTileScreenSpace</a></li><li data-type='method'><a href="Draw.html#.isFullscreen">isFullscreen</a></li><li data-type='method'><a href="Draw.html#.screenToWorld">screenToWorld</a></li><li data-type='method'><a href="Draw.html#.setBlendMode">setBlendMode</a></li><li data-type='method'><a href="Draw.html#.toggleFullscreen">toggleFullscreen</a></li><li data-type='method'><a href="Draw.html#.worldToScreen">worldToScreen</a></li></ul></li><li class="accordion collapsed child" id=1641359><div class="accordion-heading child"><a href="Input.html">Input</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Input.html#.clearInput">clearInput</a></li><li data-type='method'><a href="Input.html#.gamepadIsDown">gamepadIsDown</a></li><li data-type='method'><a href="Input.html#.gamepadStick">gamepadStick</a></li><li data-type='method'><a href="Input.html#.gamepadWasPressed">gamepadWasPressed</a></li><li data-type='method'><a href="Input.html#.gamepadWasReleased">gamepadWasReleased</a></li><li data-type='method'><a href="Input.html#.keyIsDown">keyIsDown</a></li><li data-type='method'><a href="Input.html#.keyWasPressed">keyWasPressed</a></li><li data-type='method'><a href="Input.html#.keyWasReleased">keyWasReleased</a></li><li data-type='method'><a href="Input.html#.vibrate">vibrate</a></li><li data-type='method'><a href="Input.html#.vibrateStop">vibrateStop</a></li></ul></li><li class="accordion collapsed child" id=9832293><div class="accordion-heading child"><a href="Medals.html">Medals</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Medals.html#.medalsInit">medalsInit</a></li></ul></li><li class="accordion collapsed child" id=219095><div class="accordion-heading child"><a href="Random.html">Random</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Random.html#.rand">rand</a></li><li data-type='method'><a href="Random.html#.randColor">randColor</a></li><li data-type='method'><a href="Random.html#.randInCircle">randInCircle</a></li><li data-type='method'><a href="Random.html#.randInt">randInt</a></li><li data-type='method'><a href="Random.html#.randSeeded">randSeeded</a></li><li data-type='method'><a href="Random.html#.randSign">randSign</a></li><li data-type='method'><a href="Random.html#.randVector">randVector</a></li></ul></li><li class="accordion-list" id=""><a href="Settings.html">Settings</a></li><li class="accordion collapsed child" id=2884620><div class="accordion-heading child"><a href="TileCollision.html">TileCollision</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="TileCollision.html#.getTileCollisionData">getTileCollisionData</a></li><li data-type='method'><a href="TileCollision.html#.initTileCollision">initTileCollision</a></li><li data-type='method'><a href="TileCollision.html#.setTileCollisionData">setTileCollisionData</a></li><li data-type='method'><a href="TileCollision.html#.tileCollisionRaycast">tileCollisionRaycast</a></li><li data-type='method'><a href="TileCollision.html#.tileCollisionTest">tileCollisionTest</a></li></ul></li><li class="accordion collapsed child" id=9516194><div class="accordion-heading child"><a href="Utilities.html">Utilities</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="Utilities.html#.abs">abs</a></li><li data-type='method'><a href="Utilities.html#.clamp">clamp</a></li><li data-type='method'><a href="Utilities.html#.formatTime">formatTime</a></li><li data-type='method'><a href="Utilities.html#.isOverlapping">isOverlapping</a></li><li data-type='method'><a href="Utilities.html#.lerp">lerp</a></li><li data-type='method'><a href="Utilities.html#.max">max</a></li><li data-type='method'><a href="Utilities.html#.min">min</a></li><li data-type='method'><a href="Utilities.html#.mod">mod</a></li><li data-type='method'><a href="Utilities.html#.nearestPowerOfTwo">nearestPowerOfTwo</a></li><li data-type='method'><a href="Utilities.html#.percent">percent</a></li><li data-type='method'><a href="Utilities.html#.sign">sign</a></li><li data-type='method'><a href="Utilities.html#.smoothStep">smoothStep</a></li><li data-type='method'><a href="Utilities.html#.vec2">vec2</a></li><li data-type='method'><a href="Utilities.html#.wave">wave</a></li></ul></li><li class="accordion collapsed child" id=228864><div class="accordion-heading child"><a href="WebGL.html">WebGL</a><svg><use xlink:href="#down-icon"></use></svg></div><ul class='methods accordion-content'><li data-type='method'><a href="WebGL.html#.glCompileShader">glCompileShader</a></li><li data-type='method'><a href="WebGL.html#.glCopyToContext">glCopyToContext</a></li><li data-type='method'><a href="WebGL.html#.glCreateBuffer">glCreateBuffer</a></li><li data-type='method'><a href="WebGL.html#.glCreateProgram">glCreateProgram</a></li><li data-type='method'><a href="WebGL.html#.glCreateTexture">glCreateTexture</a></li><li data-type='method'><a href="WebGL.html#.glDraw">glDraw</a></li><li data-type='method'><a href="WebGL.html#.glFlush">glFlush</a></li><li data-type='method'><a href="WebGL.html#.glSetBlendMode">glSetBlendMode</a></li><li data-type='method'><a href="WebGL.html#.glSetTexture">glSetTexture</a></li></ul></li></ul> </div><div class="accordion collapsed" id="4889956" > <h3 class="accordion-heading">Global<svg><use xlink:href="#down-icon"></use></svg></h3><ul class="accordion-content"><li class="accordion-list" id=""><a href="global.html#engineFontImage">engineFontImage</a></li><li class="accordion-list" id=""><a href="global.html#engineInit">engineInit</a></li><li class="accordion-list" id=""><a href="global.html#engineName">engineName</a></li><li class="accordion-list" id=""><a href="global.html#engineObjects">engineObjects</a></li><li class="accordion-list" id=""><a href="global.html#engineObjectsCallback">engineObjectsCallback</a></li><li class="accordion-list" id=""><a href="global.html#engineObjectsCollide">engineObjectsCollide</a></li><li class="accordion-list" id=""><a href="global.html#engineObjectsDestroy">engineObjectsDestroy</a></li><li class="accordion-list" id=""><a href="global.html#engineObjectsUpdate">engineObjectsUpdate</a></li><li class="accordion-list" id=""><a href="global.html#engineVersion">engineVersion</a></li><li class="accordion-list" id=""><a href="global.html#frame">frame</a></li><li class="accordion-list" id=""><a href="global.html#frameRate">frameRate</a></li><li class="accordion-list" id=""><a href="global.html#paused">paused</a></li><li class="accordion-list" id=""><a href="global.html#time">time</a></li><li class="accordion-list" id=""><a href="global.html#timeDelta">timeDelta</a></li><li class="accordion-list" id=""><a href="global.html#timeReal">timeReal</a></li></ul> </div></div>
93
+
94
+
95
+ </nav>
96
+ <div class="navbar-ham" id="navbar-ham">
97
+ <div>
98
+ <div class="first"></div>
99
+ <div class="second"></div>
100
+ <div class="third"></div>
101
+ </div>
102
+ </div>
103
+
104
+ <div id="main" class="main-content">
105
+
106
+ <h1 id='page-title' class="page-title">
107
+ engineUtilities.js
108
+ </h1>
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+ <section>
117
+ <article>
118
+ <pre class="prettyprint source linenums"><code>/**
119
+ * LittleJS Utility Classes and Functions
120
+ * &lt;br> - General purpose math library
121
+ * &lt;br> - Vector2 - fast, simple, easy 2D vector class
122
+ * &lt;br> - Color - holds a rgba color with some math functions
123
+ * &lt;br> - Timer - tracks time automatically
124
+ * @namespace Utilities
125
+ */
126
+
127
+ 'use strict';
128
+
129
+ /** A shortcut to get Math.PI
130
+ * @const
131
+ * @memberof Utilities */
132
+ const PI = Math.PI;
133
+
134
+ /** Returns absoulte value of value passed in
135
+ * @param {Number} value
136
+ * @return {Number}
137
+ * @memberof Utilities */
138
+ const abs = (a)=> a &lt; 0 ? -a : a;
139
+
140
+ /** Returns lowest of two values passed in
141
+ * @param {Number} valueA
142
+ * @param {Number} valueB
143
+ * @return {Number}
144
+ * @memberof Utilities */
145
+ const min = (a, b)=> a &lt; b ? a : b;
146
+
147
+ /** Returns highest of two values passed in
148
+ * @param {Number} valueA
149
+ * @param {Number} valueB
150
+ * @return {Number}
151
+ * @memberof Utilities */
152
+ const max = (a, b)=> a > b ? a : b;
153
+
154
+ /** Returns the sign of value passed in (also returns 1 if 0)
155
+ * @param {Number} value
156
+ * @return {Number}
157
+ * @memberof Utilities */
158
+ const sign = (a)=> a &lt; 0 ? -1 : 1;
159
+
160
+ /** Returns first parm modulo the second param, but adjusted so negative numbers work as expected
161
+ * @param {Number} dividend
162
+ * @param {Number} [divisor=1]
163
+ * @return {Number}
164
+ * @memberof Utilities */
165
+ const mod = (a, b=1)=> ((a % b) + b) % b;
166
+
167
+ /** Clamps the value beween max and min
168
+ * @param {Number} value
169
+ * @param {Number} [min=0]
170
+ * @param {Number} [max=1]
171
+ * @return {Number}
172
+ * @memberof Utilities */
173
+ const clamp = (v, min=0, max=1)=> v &lt; min ? min : v > max ? max : v;
174
+
175
+ /** Returns what percentage the value is between max and min
176
+ * @param {Number} value
177
+ * @param {Number} [min=0]
178
+ * @param {Number} [max=1]
179
+ * @return {Number}
180
+ * @memberof Utilities */
181
+ const percent = (v, min=0, max=1)=> max-min ? clamp((v-min) / (max-min)) : 0;
182
+
183
+ /** Linearly interpolates the percent value between max and min
184
+ * @param {Number} percent
185
+ * @param {Number} [min=0]
186
+ * @param {Number} [max=1]
187
+ * @return {Number}
188
+ * @memberof Utilities */
189
+ const lerp = (p, min=0, max=1)=> min + clamp(p) * (max-min);
190
+
191
+ /** Applies smoothstep function to the percentage value
192
+ * @param {Number} value
193
+ * @return {Number}
194
+ * @memberof Utilities */
195
+ const smoothStep = (p)=> p * p * (3 - 2 * p);
196
+
197
+ /** Returns the nearest power of two not less then the value
198
+ * @param {Number} value
199
+ * @return {Number}
200
+ * @memberof Utilities */
201
+ const nearestPowerOfTwo = (v)=> 2**Math.ceil(Math.log2(v));
202
+
203
+ /** Returns true if two axis aligned bounding boxes are overlapping
204
+ * @param {Vector2} pointA - Center of box A
205
+ * @param {Vector2} sizeA - Size of box A
206
+ * @param {Vector2} pointB - Center of box B
207
+ * @param {Vector2} [sizeB] - Size of box B
208
+ * @return {Boolean} - True if overlapping
209
+ * @memberof Utilities */
210
+ const isOverlapping = (pA, sA, pB, sB)=> abs(pA.x - pB.x)*2 &lt; sA.x + sB.x &amp; abs(pA.y - pB.y)*2 &lt; sA.y + sB.y;
211
+
212
+ /** Returns an oscillating wave between 0 and amplitude with frequency of 1 Hz by default
213
+ * @param {Number} [frequency=1] - Frequency of the wave in Hz
214
+ * @param {Number} [amplitude=1] - Amplitude (max height) of the wave
215
+ * @param {Number} [t=time] - Value to use for time of the wave
216
+ * @return {Number} - Value waving between 0 and amplitude
217
+ * @memberof Utilities */
218
+ const wave = (frequency=1, amplitude=1, t=time)=> amplitude/2 * (1 - Math.cos(t*frequency*2*PI));
219
+
220
+ /** Formats seconds to mm:ss style for display purposes
221
+ * @param {Number} t - time in seconds
222
+ * @return {String}
223
+ * @memberof Utilities */
224
+ const formatTime = (t)=> (t/60|0)+':'+(t%60&lt;10?'0':'')+(t%60|0);
225
+
226
+ ///////////////////////////////////////////////////////////////////////////////
227
+
228
+ /** Random global functions
229
+ * @namespace Random */
230
+
231
+ /** Returns a random value between the two values passed in
232
+ * @param {Number} [valueA=1]
233
+ * @param {Number} [valueB=0]
234
+ * @return {Number}
235
+ * @memberof Random */
236
+ const rand = (a=1, b=0)=> b + (a-b)*Math.random();
237
+
238
+ /** Returns a floored random value the two values passed in
239
+ * @param {Number} [valueA=1]
240
+ * @param {Number} [valueB=0]
241
+ * @return {Number}
242
+ * @memberof Random */
243
+ const randInt = (a=1, b=0)=> rand(a,b)|0;
244
+
245
+ /** Randomly returns either -1 or 1
246
+ * @return {Number}
247
+ * @memberof Random */
248
+ const randSign = ()=> (rand(2)|0) * 2 - 1;
249
+
250
+ /** Returns a random Vector2 within a circular shape
251
+ * @param {Number} [radius=1]
252
+ * @param {Number} [minRadius=0]
253
+ * @return {Vector2}
254
+ * @memberof Random */
255
+ const randInCircle = (radius=1, minRadius=0)=> radius > 0 ? randVector(radius * rand(minRadius / radius, 1)**.5) : new Vector2;
256
+
257
+ /** Returns a random Vector2 with the passed in length
258
+ * @param {Number} [length=1]
259
+ * @return {Vector2}
260
+ * @memberof Random */
261
+ const randVector = (length=1)=> new Vector2().setAngle(rand(2*PI), length);
262
+
263
+ /** Returns a random color between the two passed in colors, combine components if linear
264
+ * @param {Color} [colorA=new Color(1,1,1,1)]
265
+ * @param {Color} [colorB=new Color(0,0,0,1)]
266
+ * @param {Boolean} [linear]
267
+ * @return {Color}
268
+ * @memberof Random */
269
+ const randColor = (cA = new Color, cB = new Color(0,0,0,1), linear)=>
270
+ linear ? cA.lerp(cB, rand()) : new Color(rand(cA.r,cB.r),rand(cA.g,cB.g),rand(cA.b,cB.b),rand(cA.a,cB.a));
271
+
272
+ /** The seed used by the randSeeded function, should not be 0
273
+ * @memberof Random */
274
+ let randSeed = 1;
275
+
276
+ /** Returns a seeded random value between the two values passed in using randSeed
277
+ * @param {Number} [valueA=1]
278
+ * @param {Number} [valueB=0]
279
+ * @return {Number}
280
+ * @memberof Random */
281
+ const randSeeded = (a=1, b=0)=>
282
+ {
283
+ randSeed ^= randSeed &lt;&lt; 13; randSeed ^= randSeed >>> 17; randSeed ^= randSeed &lt;&lt; 5; // xorshift
284
+ return b + (a-b) * abs(randSeed % 1e9) / 1e9;
285
+ }
286
+
287
+ ///////////////////////////////////////////////////////////////////////////////
288
+
289
+ /**
290
+ * Create a 2d vector, can take another Vector2 to copy, 2 scalars, or 1 scalar
291
+ * @param {Number} [x=0]
292
+ * @param {Number} [y=0]
293
+ * @return {Vector2}
294
+ * @example
295
+ * let a = vec2(0, 1); // vector with coordinates (0, 1)
296
+ * let b = vec2(a); // copy a into b
297
+ * a = vec2(5); // set a to (5, 5)
298
+ * b = vec2(); // set b to (0, 0)
299
+ * @memberof Utilities
300
+ */
301
+ const vec2 = (x=0, y)=> x.x == undefined ? new Vector2(x, y == undefined? x : y) : new Vector2(x.x, x.y);
302
+
303
+ /**
304
+ * 2D Vector object with vector math library
305
+ * &lt;br> - Functions do not change this so they can be chained together
306
+ * @example
307
+ * let a = new Vector2(2, 3); // vector with coordinates (2, 3)
308
+ * let b = new Vector2; // vector with coordinates (0, 0)
309
+ * let c = vec2(4, 2); // use the vec2 function to make a Vector2
310
+ * let d = a.add(b).scale(5); // operators can be chained
311
+ */
312
+ class Vector2
313
+ {
314
+ /** Create a 2D vector with the x and y passed in, can also be created with vec2()
315
+ * @param {Number} [x=0] - X axis location
316
+ * @param {Number} [y=0] - Y axis location */
317
+ constructor(x=0, y=0)
318
+ {
319
+ /** @property {Number} - X axis location */
320
+ this.x = x;
321
+ /** @property {Number} - Y axis location */
322
+ this.y = y;
323
+ }
324
+
325
+ /** Returns a new vector that is a copy of this
326
+ * @return {Vector2} */
327
+ copy() { return new Vector2(this.x, this.y); }
328
+
329
+ /** Returns a copy of this vector plus the vector passed in
330
+ * @param {Vector2} vector
331
+ * @return {Vector2} */
332
+ add(v) { ASSERT(v.x!=undefined); return new Vector2(this.x + v.x, this.y + v.y); }
333
+
334
+ /** Returns a copy of this vector minus the vector passed in
335
+ * @param {Vector2} vector
336
+ * @return {Vector2} */
337
+ subtract(v) { ASSERT(v.x!=undefined); return new Vector2(this.x - v.x, this.y - v.y); }
338
+
339
+ /** Returns a copy of this vector times the vector passed in
340
+ * @param {Vector2} vector
341
+ * @return {Vector2} */
342
+ multiply(v) { ASSERT(v.x!=undefined); return new Vector2(this.x * v.x, this.y * v.y); }
343
+
344
+ /** Returns a copy of this vector divided by the vector passed in
345
+ * @param {Vector2} vector
346
+ * @return {Vector2} */
347
+ divide(v) { ASSERT(v.x!=undefined); return new Vector2(this.x / v.x, this.y / v.y); }
348
+
349
+ /** Returns a copy of this vector scaled by the vector passed in
350
+ * @param {Number} scale
351
+ * @return {Vector2} */
352
+ scale(s) { ASSERT(s.x==undefined); return new Vector2(this.x * s, this.y * s); }
353
+
354
+ /** Returns the length of this vector
355
+ * @return {Number} */
356
+ length() { return this.lengthSquared()**.5; }
357
+
358
+ /** Returns the length of this vector squared
359
+ * @return {Number} */
360
+ lengthSquared() { return this.x**2 + this.y**2; }
361
+
362
+ /** Returns the distance from this vector to vector passed in
363
+ * @param {Vector2} vector
364
+ * @return {Number} */
365
+ distance(v) { return this.distanceSquared(v)**.5; }
366
+
367
+ /** Returns the distance squared from this vector to vector passed in
368
+ * @param {Vector2} vector
369
+ * @return {Number} */
370
+ distanceSquared(v) { return (this.x - v.x)**2 + (this.y - v.y)**2; }
371
+
372
+ /** Returns a new vector in same direction as this one with the length passed in
373
+ * @param {Number} [length=1]
374
+ * @return {Vector2} */
375
+ normalize(length=1) { const l = this.length(); return l ? this.scale(length/l) : new Vector2(length); }
376
+
377
+ /** Returns a new vector clamped to length passed in
378
+ * @param {Number} [length=1]
379
+ * @return {Vector2} */
380
+ clampLength(length=1) { const l = this.length(); return l > length ? this.scale(length/l) : this; }
381
+
382
+ /** Returns the dot product of this and the vector passed in
383
+ * @param {Vector2} vector
384
+ * @return {Number} */
385
+ dot(v) { ASSERT(v.x!=undefined); return this.x*v.x + this.y*v.y; }
386
+
387
+ /** Returns the cross product of this and the vector passed in
388
+ * @param {Vector2} vector
389
+ * @return {Number} */
390
+ cross(v) { ASSERT(v.x!=undefined); return this.x*v.y - this.y*v.x; }
391
+
392
+ /** Returns the angle of this vector, up is angle 0
393
+ * @return {Number} */
394
+ angle() { return Math.atan2(this.x, this.y); }
395
+
396
+ /** Sets this vector with angle and length passed in
397
+ * @param {Number} [angle=0]
398
+ * @param {Number} [length=1] */
399
+ setAngle(a=0, length=1) { this.x = length*Math.sin(a); this.y = length*Math.cos(a); return this; }
400
+
401
+ /** Returns copy of this vector rotated by the angle passed in
402
+ * @param {Number} angle
403
+ * @return {Vector2} */
404
+ rotate(a) { const c = Math.cos(a), s = Math.sin(a); return new Vector2(this.x*c-this.y*s, this.x*s+this.y*c); }
405
+
406
+ /** Returns the integer direction of this vector, corrosponding to multiples of 90 degree rotation (0-3)
407
+ * @return {Number} */
408
+ direction() { return abs(this.x) > abs(this.y) ? this.x &lt; 0 ? 3 : 1 : this.y &lt; 0 ? 2 : 0; }
409
+
410
+ /** Returns a copy of this vector that has been inverted
411
+ * @return {Vector2} */
412
+ invert() { return new Vector2(this.y, -this.x); }
413
+
414
+ /** Returns a copy of this vector with each axis floored
415
+ * @return {Vector2} */
416
+ floor() { return new Vector2(Math.floor(this.x), Math.floor(this.y)); }
417
+
418
+ /** Returns the area this vector covers as a rectangle
419
+ * @return {Number} */
420
+ area() { return abs(this.x * this.y); }
421
+
422
+ /** Returns a new vector that is p percent between this and the vector passed in
423
+ * @param {Vector2} vector
424
+ * @param {Number} percent
425
+ * @return {Vector2} */
426
+ lerp(v, p) { ASSERT(v.x!=undefined); return this.add(v.subtract(this).scale(clamp(p))); }
427
+
428
+ /** Returns true if this vector is within the bounds of an array size passed in
429
+ * @param {Vector2} arraySize
430
+ * @return {Boolean} */
431
+ arrayCheck(arraySize) { return this.x >= 0 &amp;&amp; this.y >= 0 &amp;&amp; this.x &lt; arraySize.x &amp;&amp; this.y &lt; arraySize.y; }
432
+
433
+ /** Returns this vector expressed as a string
434
+ * @param {float} digits - precision to display
435
+ * @return {String} */
436
+ toString(digits=3)
437
+ { return `(${(this.x&lt;0?'':' ') + this.x.toFixed(digits)},${(this.y&lt;0?'':' ') + this.y.toFixed(digits)} )`; }
438
+ }
439
+
440
+ ///////////////////////////////////////////////////////////////////////////////
441
+
442
+ /**
443
+ * Color object (red, green, blue, alpha) with some helpful functions
444
+ * @example
445
+ * let a = new Color; // white
446
+ * let b = new Color(1, 0, 0); // red
447
+ * let c = new Color(0, 0, 0, 0); // transparent black
448
+ */
449
+ class Color
450
+ {
451
+ /** Create a color with the components passed in, white by default
452
+ * @param {Number} [red=1]
453
+ * @param {Number} [green=1]
454
+ * @param {Number} [blue=1]
455
+ * @param {Number} [alpha=1] */
456
+ constructor(r=1, g=1, b=1, a=1)
457
+ {
458
+ /** @property {Number} - Red */
459
+ this.r = r;
460
+ /** @property {Number} - Green */
461
+ this.g = g;
462
+ /** @property {Number} - Blue */
463
+ this.b = b;
464
+ /** @property {Number} - Alpha */
465
+ this.a = a;
466
+ }
467
+
468
+ /** Returns a new color that is a copy of this
469
+ * @return {Color} */
470
+ copy() { return new Color(this.r, this.g, this.b, this.a); }
471
+
472
+ /** Returns a copy of this color plus the color passed in
473
+ * @param {Color} color
474
+ * @return {Color} */
475
+ add(c) { return new Color(this.r+c.r, this.g+c.g, this.b+c.b, this.a+c.a); }
476
+
477
+ /** Returns a copy of this color minus the color passed in
478
+ * @param {Color} color
479
+ * @return {Color} */
480
+ subtract(c) { return new Color(this.r-c.r, this.g-c.g, this.b-c.b, this.a-c.a); }
481
+
482
+ /** Returns a copy of this color times the color passed in
483
+ * @param {Color} color
484
+ * @return {Color} */
485
+ multiply(c) { return new Color(this.r*c.r, this.g*c.g, this.b*c.b, this.a*c.a); }
486
+
487
+ /** Returns a copy of this color divided by the color passed in
488
+ * @param {Color} color
489
+ * @return {Color} */
490
+ divide(c) { return new Color(this.r/c.r, this.g/c.g, this.b/c.b, this.a/c.a); }
491
+
492
+ /** Returns a copy of this color scaled by the value passed in, alpha can be scaled separately
493
+ * @param {Number} scale
494
+ * @param {Number} [alphaScale=scale]
495
+ * @return {Color} */
496
+ scale(s, a=s) { return new Color(this.r*s, this.g*s, this.b*s, this.a*a); }
497
+
498
+ /** Returns a copy of this color clamped to the valid range between 0 and 1
499
+ * @return {Color} */
500
+ clamp() { return new Color(clamp(this.r), clamp(this.g), clamp(this.b), clamp(this.a)); }
501
+
502
+ /** Returns a new color that is p percent between this and the color passed in
503
+ * @param {Color} color
504
+ * @param {Number} percent
505
+ * @return {Color} */
506
+ lerp(c, p) { return this.add(c.subtract(this).scale(clamp(p))); }
507
+
508
+ /** Sets this color given a hue, saturation, lightness, and alpha
509
+ * @param {Number} [hue=0]
510
+ * @param {Number} [saturation=0]
511
+ * @param {Number} [lightness=1]
512
+ * @param {Number} [alpha=1]
513
+ * @return {Color} */
514
+ setHSLA(h=0, s=0, l=1, a=1)
515
+ {
516
+ const q = l &lt; .5 ? l*(1+s) : l+s-l*s, p = 2*l-q,
517
+ f = (p, q, t)=>
518
+ (t = ((t%1)+1)%1) &lt; 1/6 ? p+(q-p)*6*t :
519
+ t &lt; 1/2 ? q :
520
+ t &lt; 2/3 ? p+(q-p)*(2/3-t)*6 : p;
521
+
522
+ this.r = f(p, q, h + 1/3);
523
+ this.g = f(p, q, h);
524
+ this.b = f(p, q, h - 1/3);
525
+ this.a = a;
526
+ return this;
527
+ }
528
+
529
+ /** Returns a new color that has each component randomly adjusted
530
+ * @param {Number} [amount=.05]
531
+ * @param {Number} [alphaAmount=0]
532
+ * @return {Color} */
533
+ mutate(amount=.05, alphaAmount=0)
534
+ {
535
+ return new Color
536
+ (
537
+ this.r + rand(amount, -amount),
538
+ this.g + rand(amount, -amount),
539
+ this.b + rand(amount, -amount),
540
+ this.a + rand(alphaAmount, -alphaAmount)
541
+ ).clamp();
542
+ }
543
+
544
+ /** Returns this color expressed as an CSS color value
545
+ * @return {String} */
546
+ toString()
547
+ {
548
+ ASSERT(this.r>=0 &amp;&amp; this.r&lt;=1 &amp;&amp; this.g>=0 &amp;&amp; this.g&lt;=1 &amp;&amp; this.b>=0 &amp;&amp; this.b&lt;=1 &amp;&amp; this.a>=0 &amp;&amp; this.a&lt;=1);
549
+ return `rgb(${this.r*255|0},${this.g*255|0},${this.b*255|0},${this.a})`;
550
+ }
551
+
552
+ /** Returns this color expressed as 32 bit integer RGBA value
553
+ * @return {Number} */
554
+ rgbaInt()
555
+ {
556
+ ASSERT(this.r>=0 &amp;&amp; this.r&lt;=1 &amp;&amp; this.g>=0 &amp;&amp; this.g&lt;=1 &amp;&amp; this.b>=0 &amp;&amp; this.b&lt;=1 &amp;&amp; this.a>=0 &amp;&amp; this.a&lt;=1);
557
+ return (this.r*255|0) + (this.g*255&lt;&lt;8) + (this.b*255&lt;&lt;16) + (this.a*255&lt;&lt;24);
558
+ }
559
+
560
+ /** Returns this color expressed as a hex code
561
+ * @return {String} */
562
+ hex()
563
+ {
564
+ const toHex = (c)=> ((c=c*255|0)&lt;16 ? '0' : '') + c.toString(16);
565
+ return '#' + toHex(this.r) + toHex(this.g) + toHex(this.b);
566
+ }
567
+
568
+ /** Returns this color expressed in hsla format
569
+ * @return {Array} */
570
+ getHSLA()
571
+ {
572
+ const r = this.r;
573
+ const g = this.g;
574
+ const b = this.b;
575
+ const a = this.a;
576
+ const max = Math.max(r, g, b);
577
+ const min = Math.min(r, g, b);
578
+ const l = (max + min) / 2;
579
+
580
+ let h = 0, s = 0;
581
+ if (max != min)
582
+ {
583
+ let d = max - min;
584
+ s = l > .5 ? d / (2 - max - min) : d / (max + min);
585
+ if (r == max)
586
+ h = (g - b) / d + (g &lt; b ? 6 : 0);
587
+ else if (g == max)
588
+ h = (b - r) / d + 2;
589
+ else if (b == max)
590
+ h = (r - g) / d + 4;
591
+ }
592
+
593
+ return [h / 6, s, l, a];
594
+ }
595
+
596
+ /** Set this color from a hex code
597
+ * @param {String} hex - html hex code
598
+ * @return {Color} */
599
+ setHex(hex)
600
+ {
601
+ const fromHex = (a)=> parseInt(hex.slice(a,a+2), 16)/255;
602
+ this.r = fromHex(1);
603
+ this.g = fromHex(3),
604
+ this.b = fromHex(5);
605
+ this.a = 1;
606
+ ASSERT(this.r>=0 &amp;&amp; this.r&lt;=1 &amp;&amp; this.g>=0 &amp;&amp; this.g&lt;=1 &amp;&amp; this.b>=0 &amp;&amp; this.b&lt;=1);
607
+ return this;
608
+ }
609
+ }
610
+
611
+ ///////////////////////////////////////////////////////////////////////////////
612
+
613
+ /**
614
+ * Timer object tracks how long has passed since it was set
615
+ * @example
616
+ * let a = new Timer; // creates a timer that is not set
617
+ * a.set(3); // sets the timer to 3 seconds
618
+ *
619
+ * let b = new Timer(1); // creates a timer with 1 second left
620
+ * b.unset(); // unsets the timer
621
+ */
622
+ class Timer
623
+ {
624
+ /** Create a timer object set time passed in
625
+ * @param {Number} [timeLeft] - How much time left before the timer elapses in seconds */
626
+ constructor(timeLeft) { this.time = timeLeft == undefined ? undefined : time + timeLeft; this.setTime = timeLeft; }
627
+
628
+ /** Set the timer with seconds passed in
629
+ * @param {Number} [timeLeft=0] - How much time left before the timer is elapsed in seconds */
630
+ set(timeLeft=0) { this.time = time + timeLeft; this.setTime = timeLeft; }
631
+
632
+ /** Unset the timer */
633
+ unset() { this.time = undefined; }
634
+
635
+ /** Returns true if set
636
+ * @return {Boolean} */
637
+ isSet() { return this.time != undefined; }
638
+
639
+ /** Returns true if set and has not elapsed
640
+ * @return {Boolean} */
641
+ active() { return time &lt;= this.time; }
642
+
643
+ /** Returns true if set and elapsed
644
+ * @return {Boolean} */
645
+ elapsed() { return time > this.time; }
646
+
647
+ /** Get how long since elapsed, returns 0 if not set (returns negative if currently active)
648
+ * @return {Number} */
649
+ get() { return this.isSet()? time - this.time : 0; }
650
+
651
+ /** Get percentage elapsed based on time it was set to, returns 0 if not set
652
+ * @return {Number} */
653
+ getPercent() { return this.isSet()? percent(this.time - time, this.setTime, 0) : 0; }
654
+
655
+ /** Returns this timer expressed as a string
656
+ * @return {String} */
657
+ toString() { if (debug) { return this.unset() ? 'unset' : Math.abs(this.get()) + ' seconds ' + (this.get()&lt;0 ? 'before' : 'after' ); } }
658
+ }</code></pre>
659
+ </article>
660
+ </section>
661
+
662
+
663
+
664
+
665
+ </div>
666
+
667
+ <footer class="footer" id="footer">
668
+ <a href=https://github.com/KilledByAPixel/LittleJS>LittleJS - MIT License - Copyright 2021 Frank Force</a>
669
+ </footer>
670
+
671
+ <script src="scripts/third-party/prettify.js"></script>
672
+ <script src="scripts/third-party/lang-css.js"></script>
673
+ <script type="text/javascript" src="scripts/misc.js"></script>
674
+
675
+ <script>prettyPrint();</script>
676
+ <script src="scripts/linenumber.js"></script>
677
+ <script src="scripts/fix-code-block.js"></script>
678
+ <script src="scripts/fix-navbar.js"></script>
679
+
680
+ <script src="scripts/search.js"></script>
681
+ <script src="scripts/third-party/fuse.js"></script>
682
+ <script>
683
+ var list = [{"title":"Color","link":"<a href=\"Color.html\">Color</a>"},{"title":"Color#add","link":"<a href=\"Color.html#add\">Color &rtrif; add</a>"},{"title":"Color#clamp","link":"<a href=\"Color.html#clamp\">Color &rtrif; clamp</a>"},{"title":"Color#copy","link":"<a href=\"Color.html#copy\">Color &rtrif; copy</a>"},{"title":"Color#divide","link":"<a href=\"Color.html#divide\">Color &rtrif; divide</a>"},{"title":"Color#getHSLA","link":"<a href=\"Color.html#getHSLA\">Color &rtrif; getHSLA</a>"},{"title":"Color#hex","link":"<a href=\"Color.html#hex\">Color &rtrif; hex</a>"},{"title":"Color#lerp","link":"<a href=\"Color.html#lerp\">Color &rtrif; lerp</a>"},{"title":"Color#multiply","link":"<a href=\"Color.html#multiply\">Color &rtrif; multiply</a>"},{"title":"Color#mutate","link":"<a href=\"Color.html#mutate\">Color &rtrif; mutate</a>"},{"title":"Color#rgbaInt","link":"<a href=\"Color.html#rgbaInt\">Color &rtrif; rgbaInt</a>"},{"title":"Color#scale","link":"<a href=\"Color.html#scale\">Color &rtrif; scale</a>"},{"title":"Color#setHex","link":"<a href=\"Color.html#setHex\">Color &rtrif; setHex</a>"},{"title":"Color#setHSLA","link":"<a href=\"Color.html#setHSLA\">Color &rtrif; setHSLA</a>"},{"title":"Color#subtract","link":"<a href=\"Color.html#subtract\">Color &rtrif; subtract</a>"},{"title":"Color#toString","link":"<a href=\"Color.html#toString\">Color &rtrif; toString</a>"},{"title":"EngineObject","link":"<a href=\"EngineObject.html\">EngineObject</a>"},{"title":"EngineObject#addChild","link":"<a href=\"EngineObject.html#addChild\">EngineObject &rtrif; addChild</a>"},{"title":"EngineObject#applyAcceleration","link":"<a href=\"EngineObject.html#applyAcceleration\">EngineObject &rtrif; applyAcceleration</a>"},{"title":"EngineObject#applyForce","link":"<a href=\"EngineObject.html#applyForce\">EngineObject &rtrif; applyForce</a>"},{"title":"EngineObject#collideWithObject","link":"<a href=\"EngineObject.html#collideWithObject\">EngineObject &rtrif; collideWithObject</a>"},{"title":"EngineObject#collideWithTile","link":"<a href=\"EngineObject.html#collideWithTile\">EngineObject &rtrif; collideWithTile</a>"},{"title":"EngineObject#collideWithTileRaycast","link":"<a href=\"EngineObject.html#collideWithTileRaycast\">EngineObject &rtrif; collideWithTileRaycast</a>"},{"title":"EngineObject#destroy","link":"<a href=\"EngineObject.html#destroy\">EngineObject &rtrif; destroy</a>"},{"title":"EngineObject#getAliveTime","link":"<a href=\"EngineObject.html#getAliveTime\">EngineObject &rtrif; getAliveTime</a>"},{"title":"EngineObject#getMirrorSign","link":"<a href=\"EngineObject.html#getMirrorSign\">EngineObject &rtrif; getMirrorSign</a>"},{"title":"EngineObject#removeChild","link":"<a href=\"EngineObject.html#removeChild\">EngineObject &rtrif; removeChild</a>"},{"title":"EngineObject#render","link":"<a href=\"EngineObject.html#render\">EngineObject &rtrif; render</a>"},{"title":"EngineObject#setCollision","link":"<a href=\"EngineObject.html#setCollision\">EngineObject &rtrif; setCollision</a>"},{"title":"EngineObject#update","link":"<a href=\"EngineObject.html#update\">EngineObject &rtrif; update</a>"},{"title":"FontImage","link":"<a href=\"FontImage.html\">FontImage</a>"},{"title":"FontImage#drawText","link":"<a href=\"FontImage.html#drawText\">FontImage &rtrif; drawText</a>"},{"title":"FontImage#drawTextScreen","link":"<a href=\"FontImage.html#drawTextScreen\">FontImage &rtrif; drawTextScreen</a>"},{"title":"Medal","link":"<a href=\"Medal.html\">Medal</a>"},{"title":"Medal#render","link":"<a href=\"Medal.html#render\">Medal &rtrif; render</a>"},{"title":"Medal#renderIcon","link":"<a href=\"Medal.html#renderIcon\">Medal &rtrif; renderIcon</a>"},{"title":"Medal#unlock","link":"<a href=\"Medal.html#unlock\">Medal &rtrif; unlock</a>"},{"title":"Music","link":"<a href=\"Music.html\">Music</a>"},{"title":"Music#play","link":"<a href=\"Music.html#play\">Music &rtrif; play</a>"},{"title":"Newgrounds","link":"<a href=\"Newgrounds.html\">Newgrounds</a>"},{"title":"Newgrounds#call","link":"<a href=\"Newgrounds.html#call\">Newgrounds &rtrif; call</a>"},{"title":"Newgrounds#getScores","link":"<a href=\"Newgrounds.html#getScores\">Newgrounds &rtrif; getScores</a>"},{"title":"Newgrounds#logView","link":"<a href=\"Newgrounds.html#logView\">Newgrounds &rtrif; logView</a>"},{"title":"Newgrounds#postScore","link":"<a href=\"Newgrounds.html#postScore\">Newgrounds &rtrif; postScore</a>"},{"title":"Newgrounds#unlockMedal","link":"<a href=\"Newgrounds.html#unlockMedal\">Newgrounds &rtrif; unlockMedal</a>"},{"title":"Particle","link":"<a href=\"Particle.html\">Particle</a>"},{"title":"Particle#addChild","link":"<a href=\"Particle.html#addChild\">Particle &rtrif; addChild</a>"},{"title":"Particle#applyAcceleration","link":"<a href=\"Particle.html#applyAcceleration\">Particle &rtrif; applyAcceleration</a>"},{"title":"Particle#applyForce","link":"<a href=\"Particle.html#applyForce\">Particle &rtrif; applyForce</a>"},{"title":"Particle#collideWithObject","link":"<a href=\"Particle.html#collideWithObject\">Particle &rtrif; collideWithObject</a>"},{"title":"Particle#collideWithTile","link":"<a href=\"Particle.html#collideWithTile\">Particle &rtrif; collideWithTile</a>"},{"title":"Particle#collideWithTileRaycast","link":"<a href=\"Particle.html#collideWithTileRaycast\">Particle &rtrif; collideWithTileRaycast</a>"},{"title":"Particle#destroy","link":"<a href=\"Particle.html#destroy\">Particle &rtrif; destroy</a>"},{"title":"Particle#getAliveTime","link":"<a href=\"Particle.html#getAliveTime\">Particle &rtrif; getAliveTime</a>"},{"title":"Particle#getMirrorSign","link":"<a href=\"Particle.html#getMirrorSign\">Particle &rtrif; getMirrorSign</a>"},{"title":"Particle#removeChild","link":"<a href=\"Particle.html#removeChild\">Particle &rtrif; removeChild</a>"},{"title":"Particle#render","link":"<a href=\"Particle.html#render\">Particle &rtrif; render</a>"},{"title":"Particle#setCollision","link":"<a href=\"Particle.html#setCollision\">Particle &rtrif; setCollision</a>"},{"title":"Particle#update","link":"<a href=\"Particle.html#update\">Particle &rtrif; update</a>"},{"title":"ParticleEmitter","link":"<a href=\"ParticleEmitter.html\">ParticleEmitter</a>"},{"title":"ParticleEmitter#addChild","link":"<a href=\"ParticleEmitter.html#addChild\">ParticleEmitter &rtrif; addChild</a>"},{"title":"ParticleEmitter#applyAcceleration","link":"<a href=\"ParticleEmitter.html#applyAcceleration\">ParticleEmitter &rtrif; applyAcceleration</a>"},{"title":"ParticleEmitter#applyForce","link":"<a href=\"ParticleEmitter.html#applyForce\">ParticleEmitter &rtrif; applyForce</a>"},{"title":"ParticleEmitter#collideWithObject","link":"<a href=\"ParticleEmitter.html#collideWithObject\">ParticleEmitter &rtrif; collideWithObject</a>"},{"title":"ParticleEmitter#collideWithTile","link":"<a href=\"ParticleEmitter.html#collideWithTile\">ParticleEmitter &rtrif; collideWithTile</a>"},{"title":"ParticleEmitter#collideWithTileRaycast","link":"<a href=\"ParticleEmitter.html#collideWithTileRaycast\">ParticleEmitter &rtrif; collideWithTileRaycast</a>"},{"title":"ParticleEmitter#destroy","link":"<a href=\"ParticleEmitter.html#destroy\">ParticleEmitter &rtrif; destroy</a>"},{"title":"ParticleEmitter#emitParticle","link":"<a href=\"ParticleEmitter.html#emitParticle\">ParticleEmitter &rtrif; emitParticle</a>"},{"title":"ParticleEmitter#getAliveTime","link":"<a href=\"ParticleEmitter.html#getAliveTime\">ParticleEmitter &rtrif; getAliveTime</a>"},{"title":"ParticleEmitter#getMirrorSign","link":"<a href=\"ParticleEmitter.html#getMirrorSign\">ParticleEmitter &rtrif; getMirrorSign</a>"},{"title":"ParticleEmitter#removeChild","link":"<a href=\"ParticleEmitter.html#removeChild\">ParticleEmitter &rtrif; removeChild</a>"},{"title":"ParticleEmitter#render","link":"<a href=\"ParticleEmitter.html#render\">ParticleEmitter &rtrif; render</a>"},{"title":"ParticleEmitter#setCollision","link":"<a href=\"ParticleEmitter.html#setCollision\">ParticleEmitter &rtrif; setCollision</a>"},{"title":"ParticleEmitter#update","link":"<a href=\"ParticleEmitter.html#update\">ParticleEmitter &rtrif; update</a>"},{"title":"Sound","link":"<a href=\"Sound.html\">Sound</a>"},{"title":"Sound#play","link":"<a href=\"Sound.html#play\">Sound &rtrif; play</a>"},{"title":"Sound#playNote","link":"<a href=\"Sound.html#playNote\">Sound &rtrif; playNote</a>"},{"title":"TileLayer","link":"<a href=\"TileLayer.html\">TileLayer</a>"},{"title":"TileLayer#addChild","link":"<a href=\"TileLayer.html#addChild\">TileLayer &rtrif; addChild</a>"},{"title":"TileLayer#applyAcceleration","link":"<a href=\"TileLayer.html#applyAcceleration\">TileLayer &rtrif; applyAcceleration</a>"},{"title":"TileLayer#applyForce","link":"<a href=\"TileLayer.html#applyForce\">TileLayer &rtrif; applyForce</a>"},{"title":"TileLayer#collideWithObject","link":"<a href=\"TileLayer.html#collideWithObject\">TileLayer &rtrif; collideWithObject</a>"},{"title":"TileLayer#collideWithTile","link":"<a href=\"TileLayer.html#collideWithTile\">TileLayer &rtrif; collideWithTile</a>"},{"title":"TileLayer#collideWithTileRaycast","link":"<a href=\"TileLayer.html#collideWithTileRaycast\">TileLayer &rtrif; collideWithTileRaycast</a>"},{"title":"TileLayer#destroy","link":"<a href=\"TileLayer.html#destroy\">TileLayer &rtrif; destroy</a>"},{"title":"TileLayer#drawAllTileData","link":"<a href=\"TileLayer.html#drawAllTileData\">TileLayer &rtrif; drawAllTileData</a>"},{"title":"TileLayer#drawCanvas2D","link":"<a href=\"TileLayer.html#drawCanvas2D\">TileLayer &rtrif; drawCanvas2D</a>"},{"title":"TileLayer#drawRect","link":"<a href=\"TileLayer.html#drawRect\">TileLayer &rtrif; drawRect</a>"},{"title":"TileLayer#drawTile","link":"<a href=\"TileLayer.html#drawTile\">TileLayer &rtrif; drawTile</a>"},{"title":"TileLayer#drawTileData","link":"<a href=\"TileLayer.html#drawTileData\">TileLayer &rtrif; drawTileData</a>"},{"title":"TileLayer#getAliveTime","link":"<a href=\"TileLayer.html#getAliveTime\">TileLayer &rtrif; getAliveTime</a>"},{"title":"TileLayer#getData","link":"<a href=\"TileLayer.html#getData\">TileLayer &rtrif; getData</a>"},{"title":"TileLayer#getMirrorSign","link":"<a href=\"TileLayer.html#getMirrorSign\">TileLayer &rtrif; getMirrorSign</a>"},{"title":"TileLayer#redraw","link":"<a href=\"TileLayer.html#redraw\">TileLayer &rtrif; redraw</a>"},{"title":"TileLayer#redrawEnd","link":"<a href=\"TileLayer.html#redrawEnd\">TileLayer &rtrif; redrawEnd</a>"},{"title":"TileLayer#redrawStart","link":"<a href=\"TileLayer.html#redrawStart\">TileLayer &rtrif; redrawStart</a>"},{"title":"TileLayer#removeChild","link":"<a href=\"TileLayer.html#removeChild\">TileLayer &rtrif; removeChild</a>"},{"title":"TileLayer#render","link":"<a href=\"TileLayer.html#render\">TileLayer &rtrif; render</a>"},{"title":"TileLayer#setCollision","link":"<a href=\"TileLayer.html#setCollision\">TileLayer &rtrif; setCollision</a>"},{"title":"TileLayer#setData","link":"<a href=\"TileLayer.html#setData\">TileLayer &rtrif; setData</a>"},{"title":"TileLayer#update","link":"<a href=\"TileLayer.html#update\">TileLayer &rtrif; update</a>"},{"title":"TileLayerData","link":"<a href=\"TileLayerData.html\">TileLayerData</a>"},{"title":"TileLayerData#clear","link":"<a href=\"TileLayerData.html#clear\">TileLayerData &rtrif; clear</a>"},{"title":"Timer","link":"<a href=\"Timer.html\">Timer</a>"},{"title":"Timer#active","link":"<a href=\"Timer.html#active\">Timer &rtrif; active</a>"},{"title":"Timer#elapsed","link":"<a href=\"Timer.html#elapsed\">Timer &rtrif; elapsed</a>"},{"title":"Timer#get","link":"<a href=\"Timer.html#get\">Timer &rtrif; get</a>"},{"title":"Timer#getPercent","link":"<a href=\"Timer.html#getPercent\">Timer &rtrif; getPercent</a>"},{"title":"Timer#isSet","link":"<a href=\"Timer.html#isSet\">Timer &rtrif; isSet</a>"},{"title":"Timer#set","link":"<a href=\"Timer.html#set\">Timer &rtrif; set</a>"},{"title":"Timer#toString","link":"<a href=\"Timer.html#toString\">Timer &rtrif; toString</a>"},{"title":"Timer#unset","link":"<a href=\"Timer.html#unset\">Timer &rtrif; unset</a>"},{"title":"Vector2","link":"<a href=\"Vector2.html\">Vector2</a>"},{"title":"Vector2#add","link":"<a href=\"Vector2.html#add\">Vector2 &rtrif; add</a>"},{"title":"Vector2#angle","link":"<a href=\"Vector2.html#angle\">Vector2 &rtrif; angle</a>"},{"title":"Vector2#area","link":"<a href=\"Vector2.html#area\">Vector2 &rtrif; area</a>"},{"title":"Vector2#arrayCheck","link":"<a href=\"Vector2.html#arrayCheck\">Vector2 &rtrif; arrayCheck</a>"},{"title":"Vector2#clampLength","link":"<a href=\"Vector2.html#clampLength\">Vector2 &rtrif; clampLength</a>"},{"title":"Vector2#copy","link":"<a href=\"Vector2.html#copy\">Vector2 &rtrif; copy</a>"},{"title":"Vector2#cross","link":"<a href=\"Vector2.html#cross\">Vector2 &rtrif; cross</a>"},{"title":"Vector2#direction","link":"<a href=\"Vector2.html#direction\">Vector2 &rtrif; direction</a>"},{"title":"Vector2#distance","link":"<a href=\"Vector2.html#distance\">Vector2 &rtrif; distance</a>"},{"title":"Vector2#distanceSquared","link":"<a href=\"Vector2.html#distanceSquared\">Vector2 &rtrif; distanceSquared</a>"},{"title":"Vector2#divide","link":"<a href=\"Vector2.html#divide\">Vector2 &rtrif; divide</a>"},{"title":"Vector2#dot","link":"<a href=\"Vector2.html#dot\">Vector2 &rtrif; dot</a>"},{"title":"Vector2#floor","link":"<a href=\"Vector2.html#floor\">Vector2 &rtrif; floor</a>"},{"title":"Vector2#invert","link":"<a href=\"Vector2.html#invert\">Vector2 &rtrif; invert</a>"},{"title":"Vector2#length","link":"<a href=\"Vector2.html#length\">Vector2 &rtrif; length</a>"},{"title":"Vector2#lengthSquared","link":"<a href=\"Vector2.html#lengthSquared\">Vector2 &rtrif; lengthSquared</a>"},{"title":"Vector2#lerp","link":"<a href=\"Vector2.html#lerp\">Vector2 &rtrif; lerp</a>"},{"title":"Vector2#multiply","link":"<a href=\"Vector2.html#multiply\">Vector2 &rtrif; multiply</a>"},{"title":"Vector2#normalize","link":"<a href=\"Vector2.html#normalize\">Vector2 &rtrif; normalize</a>"},{"title":"Vector2#rotate","link":"<a href=\"Vector2.html#rotate\">Vector2 &rtrif; rotate</a>"},{"title":"Vector2#scale","link":"<a href=\"Vector2.html#scale\">Vector2 &rtrif; scale</a>"},{"title":"Vector2#setAngle","link":"<a href=\"Vector2.html#setAngle\">Vector2 &rtrif; setAngle</a>"},{"title":"Vector2#subtract","link":"<a href=\"Vector2.html#subtract\">Vector2 &rtrif; subtract</a>"},{"title":"Vector2#toString","link":"<a href=\"Vector2.html#toString\">Vector2 &rtrif; toString</a>"},{"title":"Debug","link":"<a href=\"Debug.html\">Debug</a>"},{"title":"Debug.debugAABB","link":"<a href=\"Debug.html#.debugAABB\">Debug.debugAABB &rtrif; undefined</a>"},{"title":"Debug.debugCircle","link":"<a href=\"Debug.html#.debugCircle\">Debug.debugCircle &rtrif; undefined</a>"},{"title":"Debug.debugClear","link":"<a href=\"Debug.html#.debugClear\">Debug.debugClear &rtrif; undefined</a>"},{"title":"Debug.debugLine","link":"<a href=\"Debug.html#.debugLine\">Debug.debugLine &rtrif; undefined</a>"},{"title":"Debug.debugPoint","link":"<a href=\"Debug.html#.debugPoint\">Debug.debugPoint &rtrif; undefined</a>"},{"title":"Debug.debugRect","link":"<a href=\"Debug.html#.debugRect\">Debug.debugRect &rtrif; undefined</a>"},{"title":"Debug.debugSaveCanvas","link":"<a href=\"Debug.html#.debugSaveCanvas\">Debug.debugSaveCanvas &rtrif; undefined</a>"},{"title":"Debug.debugText","link":"<a href=\"Debug.html#.debugText\">Debug.debugText &rtrif; undefined</a>"},{"title":"Draw","link":"<a href=\"Draw.html\">Draw</a>"},{"title":"Draw.drawCanvas2D","link":"<a href=\"Draw.html#.drawCanvas2D\">Draw.drawCanvas2D &rtrif; undefined</a>"},{"title":"Draw.drawLine","link":"<a href=\"Draw.html#.drawLine\">Draw.drawLine &rtrif; undefined</a>"},{"title":"Draw.drawRect","link":"<a href=\"Draw.html#.drawRect\">Draw.drawRect &rtrif; undefined</a>"},{"title":"Draw.drawRectScreenSpace","link":"<a href=\"Draw.html#.drawRectScreenSpace\">Draw.drawRectScreenSpace &rtrif; undefined</a>"},{"title":"Draw.drawText","link":"<a href=\"Draw.html#.drawText\">Draw.drawText &rtrif; undefined</a>"},{"title":"Draw.drawTextScreen","link":"<a href=\"Draw.html#.drawTextScreen\">Draw.drawTextScreen &rtrif; undefined</a>"},{"title":"Draw.drawTile","link":"<a href=\"Draw.html#.drawTile\">Draw.drawTile &rtrif; undefined</a>"},{"title":"Draw.drawTileScreenSpace","link":"<a href=\"Draw.html#.drawTileScreenSpace\">Draw.drawTileScreenSpace &rtrif; undefined</a>"},{"title":"Draw.isFullscreen","link":"<a href=\"Draw.html#.isFullscreen\">Draw.isFullscreen &rtrif; undefined</a>"},{"title":"Draw.screenToWorld","link":"<a href=\"Draw.html#.screenToWorld\">Draw.screenToWorld &rtrif; undefined</a>"},{"title":"Draw.setBlendMode","link":"<a href=\"Draw.html#.setBlendMode\">Draw.setBlendMode &rtrif; undefined</a>"},{"title":"Draw.toggleFullscreen","link":"<a href=\"Draw.html#.toggleFullscreen\">Draw.toggleFullscreen &rtrif; undefined</a>"},{"title":"Draw.worldToScreen","link":"<a href=\"Draw.html#.worldToScreen\">Draw.worldToScreen &rtrif; undefined</a>"},{"title":"Input","link":"<a href=\"Input.html\">Input</a>"},{"title":"Input.clearInput","link":"<a href=\"Input.html#.clearInput\">Input.clearInput &rtrif; undefined</a>"},{"title":"Input.gamepadIsDown","link":"<a href=\"Input.html#.gamepadIsDown\">Input.gamepadIsDown &rtrif; undefined</a>"},{"title":"Input.gamepadStick","link":"<a href=\"Input.html#.gamepadStick\">Input.gamepadStick &rtrif; undefined</a>"},{"title":"Input.gamepadWasPressed","link":"<a href=\"Input.html#.gamepadWasPressed\">Input.gamepadWasPressed &rtrif; undefined</a>"},{"title":"Input.gamepadWasReleased","link":"<a href=\"Input.html#.gamepadWasReleased\">Input.gamepadWasReleased &rtrif; undefined</a>"},{"title":"Input.keyIsDown","link":"<a href=\"Input.html#.keyIsDown\">Input.keyIsDown &rtrif; undefined</a>"},{"title":"Input.keyWasPressed","link":"<a href=\"Input.html#.keyWasPressed\">Input.keyWasPressed &rtrif; undefined</a>"},{"title":"Input.keyWasReleased","link":"<a href=\"Input.html#.keyWasReleased\">Input.keyWasReleased &rtrif; undefined</a>"},{"title":"Input.vibrate","link":"<a href=\"Input.html#.vibrate\">Input.vibrate &rtrif; undefined</a>"},{"title":"Input.vibrateStop","link":"<a href=\"Input.html#.vibrateStop\">Input.vibrateStop &rtrif; undefined</a>"},{"title":"Medals","link":"<a href=\"Medals.html\">Medals</a>"},{"title":"Medals.medalsInit","link":"<a href=\"Medals.html#.medalsInit\">Medals.medalsInit &rtrif; undefined</a>"},{"title":"Random","link":"<a href=\"Random.html\">Random</a>"},{"title":"Random.rand","link":"<a href=\"Random.html#.rand\">Random.rand &rtrif; undefined</a>"},{"title":"Random.randColor","link":"<a href=\"Random.html#.randColor\">Random.randColor &rtrif; undefined</a>"},{"title":"Random.randInCircle","link":"<a href=\"Random.html#.randInCircle\">Random.randInCircle &rtrif; undefined</a>"},{"title":"Random.randInt","link":"<a href=\"Random.html#.randInt\">Random.randInt &rtrif; undefined</a>"},{"title":"Random.randSeeded","link":"<a href=\"Random.html#.randSeeded\">Random.randSeeded &rtrif; undefined</a>"},{"title":"Random.randSign","link":"<a href=\"Random.html#.randSign\">Random.randSign &rtrif; undefined</a>"},{"title":"Random.randVector","link":"<a href=\"Random.html#.randVector\">Random.randVector &rtrif; undefined</a>"},{"title":"Settings","link":"<a href=\"Settings.html\">Settings</a>"},{"title":"TileCollision","link":"<a href=\"TileCollision.html\">TileCollision</a>"},{"title":"TileCollision.getTileCollisionData","link":"<a href=\"TileCollision.html#.getTileCollisionData\">TileCollision.getTileCollisionData &rtrif; undefined</a>"},{"title":"TileCollision.initTileCollision","link":"<a href=\"TileCollision.html#.initTileCollision\">TileCollision.initTileCollision &rtrif; undefined</a>"},{"title":"TileCollision.setTileCollisionData","link":"<a href=\"TileCollision.html#.setTileCollisionData\">TileCollision.setTileCollisionData &rtrif; undefined</a>"},{"title":"TileCollision.tileCollisionRaycast","link":"<a href=\"TileCollision.html#.tileCollisionRaycast\">TileCollision.tileCollisionRaycast &rtrif; undefined</a>"},{"title":"TileCollision.tileCollisionTest","link":"<a href=\"TileCollision.html#.tileCollisionTest\">TileCollision.tileCollisionTest &rtrif; undefined</a>"},{"title":"Utilities","link":"<a href=\"Utilities.html\">Utilities</a>"},{"title":"Utilities.abs","link":"<a href=\"Utilities.html#.abs\">Utilities.abs &rtrif; undefined</a>"},{"title":"Utilities.clamp","link":"<a href=\"Utilities.html#.clamp\">Utilities.clamp &rtrif; undefined</a>"},{"title":"Utilities.formatTime","link":"<a href=\"Utilities.html#.formatTime\">Utilities.formatTime &rtrif; undefined</a>"},{"title":"Utilities.isOverlapping","link":"<a href=\"Utilities.html#.isOverlapping\">Utilities.isOverlapping &rtrif; undefined</a>"},{"title":"Utilities.lerp","link":"<a href=\"Utilities.html#.lerp\">Utilities.lerp &rtrif; undefined</a>"},{"title":"Utilities.max","link":"<a href=\"Utilities.html#.max\">Utilities.max &rtrif; undefined</a>"},{"title":"Utilities.min","link":"<a href=\"Utilities.html#.min\">Utilities.min &rtrif; undefined</a>"},{"title":"Utilities.mod","link":"<a href=\"Utilities.html#.mod\">Utilities.mod &rtrif; undefined</a>"},{"title":"Utilities.nearestPowerOfTwo","link":"<a href=\"Utilities.html#.nearestPowerOfTwo\">Utilities.nearestPowerOfTwo &rtrif; undefined</a>"},{"title":"Utilities.percent","link":"<a href=\"Utilities.html#.percent\">Utilities.percent &rtrif; undefined</a>"},{"title":"Utilities.sign","link":"<a href=\"Utilities.html#.sign\">Utilities.sign &rtrif; undefined</a>"},{"title":"Utilities.smoothStep","link":"<a href=\"Utilities.html#.smoothStep\">Utilities.smoothStep &rtrif; undefined</a>"},{"title":"Utilities.vec2","link":"<a href=\"Utilities.html#.vec2\">Utilities.vec2 &rtrif; undefined</a>"},{"title":"Utilities.wave","link":"<a href=\"Utilities.html#.wave\">Utilities.wave &rtrif; undefined</a>"},{"title":"WebGL","link":"<a href=\"WebGL.html\">WebGL</a>"},{"title":"WebGL.glCompileShader","link":"<a href=\"WebGL.html#.glCompileShader\">WebGL.glCompileShader &rtrif; undefined</a>"},{"title":"WebGL.glCopyToContext","link":"<a href=\"WebGL.html#.glCopyToContext\">WebGL.glCopyToContext &rtrif; undefined</a>"},{"title":"WebGL.glCreateBuffer","link":"<a href=\"WebGL.html#.glCreateBuffer\">WebGL.glCreateBuffer &rtrif; undefined</a>"},{"title":"WebGL.glCreateProgram","link":"<a href=\"WebGL.html#.glCreateProgram\">WebGL.glCreateProgram &rtrif; undefined</a>"},{"title":"WebGL.glCreateTexture","link":"<a href=\"WebGL.html#.glCreateTexture\">WebGL.glCreateTexture &rtrif; undefined</a>"},{"title":"WebGL.glDraw","link":"<a href=\"WebGL.html#.glDraw\">WebGL.glDraw &rtrif; undefined</a>"},{"title":"WebGL.glFlush","link":"<a href=\"WebGL.html#.glFlush\">WebGL.glFlush &rtrif; undefined</a>"},{"title":"WebGL.glSetBlendMode","link":"<a href=\"WebGL.html#.glSetBlendMode\">WebGL.glSetBlendMode &rtrif; undefined</a>"},{"title":"WebGL.glSetTexture","link":"<a href=\"WebGL.html#.glSetTexture\">WebGL.glSetTexture &rtrif; undefined</a>"},{"title":"engineFontImage","link":"<a href=\"global.html#engineFontImage\">engineFontImage</a>"},{"title":"engineInit","link":"<a href=\"global.html#engineInit\">engineInit</a>"},{"title":"engineName","link":"<a href=\"global.html#engineName\">engineName</a>"},{"title":"engineObjects","link":"<a href=\"global.html#engineObjects\">engineObjects</a>"},{"title":"engineObjectsCallback","link":"<a href=\"global.html#engineObjectsCallback\">engineObjectsCallback</a>"},{"title":"engineObjectsCollide","link":"<a href=\"global.html#engineObjectsCollide\">engineObjectsCollide</a>"},{"title":"engineObjectsDestroy","link":"<a href=\"global.html#engineObjectsDestroy\">engineObjectsDestroy</a>"},{"title":"engineObjectsUpdate","link":"<a href=\"global.html#engineObjectsUpdate\">engineObjectsUpdate</a>"},{"title":"engineVersion","link":"<a href=\"global.html#engineVersion\">engineVersion</a>"},{"title":"frame","link":"<a href=\"global.html#frame\">frame</a>"},{"title":"frameRate","link":"<a href=\"global.html#frameRate\">frameRate</a>"},{"title":"paused","link":"<a href=\"global.html#paused\">paused</a>"},{"title":"time","link":"<a href=\"global.html#time\">time</a>"},{"title":"timeDelta","link":"<a href=\"global.html#timeDelta\">timeDelta</a>"},{"title":"timeReal","link":"<a href=\"global.html#timeReal\">timeReal</a>"}];
684
+ var options =
685
+ setupSearch(list, options)
686
+ </script>
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+ </body>
699
+
700
+ </html>