From d2325e90907c99f1ce4cbd8ee1b66d53893b075a Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 9 Dec 2025 11:06:48 +0330 Subject: [PATCH] add the cube master --- public/assets/images/cube_logo.jpeg | Bin 0 -> 16380 bytes public/the-cube-master/.gitignore | 6 + public/the-cube-master/Cube.sublime-project | 36 + public/the-cube-master/assets/css/styles.css | 1 + .../assets/icons/android-chrome-192x192.png | Bin 0 -> 32491 bytes .../assets/icons/android-chrome-512x512.png | Bin 0 -> 103506 bytes .../assets/icons/apple-touch-icon.png | Bin 0 -> 31694 bytes .../assets/icons/browserconfig.xml | 9 + .../assets/icons/favicon-16x16.png | Bin 0 -> 1392 bytes .../assets/icons/favicon-32x32.png | Bin 0 -> 2782 bytes .../the-cube-master/assets/icons/favicon.ico | Bin 0 -> 15086 bytes .../assets/icons/meta-image.png | Bin 0 -> 35486 bytes .../assets/icons/mstile-150x150.png | Bin 0 -> 16070 bytes .../assets/icons/safari-pinned-tab.svg | 39 + .../assets/icons/site.webmanifest | 19 + .../assets/icons/twitter-card.png | Bin 0 -> 72428 bytes public/the-cube-master/assets/js/cube.js | 1 + public/the-cube-master/assets/js/three.js | 949 ++++++++++++++++++ public/the-cube-master/index.html | 154 +++ public/the-cube-master/package-lock.json | 727 ++++++++++++++ public/the-cube-master/package.json | 24 + public/the-cube-master/rollup.config.build.js | 14 + public/the-cube-master/rollup.config.dev.js | 10 + public/the-cube-master/src/js/Animation.js | 88 ++ public/the-cube-master/src/js/Background.js | 1 + public/the-cube-master/src/js/Confetti.js | 228 +++++ public/the-cube-master/src/js/Controls.js | 580 +++++++++++ public/the-cube-master/src/js/Cube.js | 236 +++++ public/the-cube-master/src/js/Draggable.js | 132 +++ public/the-cube-master/src/js/Easing.js | 83 ++ public/the-cube-master/src/js/Game.js | 417 ++++++++ public/the-cube-master/src/js/Icons.js | 107 ++ public/the-cube-master/src/js/Keyboard.js | 65 ++ .../the-cube-master/src/js/KeyboardArrows.js | 135 +++ public/the-cube-master/src/js/Preferences.js | 121 +++ public/the-cube-master/src/js/Range.js | 171 ++++ public/the-cube-master/src/js/Scores.js | 108 ++ public/the-cube-master/src/js/Scrambler.js | 96 ++ public/the-cube-master/src/js/States.js | 68 ++ public/the-cube-master/src/js/Storage.js | 200 ++++ public/the-cube-master/src/js/ThemeEditor.js | 179 ++++ public/the-cube-master/src/js/Themes.js | 94 ++ public/the-cube-master/src/js/Timer.js | 79 ++ public/the-cube-master/src/js/Transition.js | 478 +++++++++ public/the-cube-master/src/js/Tween.js | 103 ++ public/the-cube-master/src/js/World.js | 93 ++ .../src/js/plugins/RoundedBoxGeometry.js | 467 +++++++++ .../src/js/plugins/RoundedPlaneGeometry.js | 30 + public/the-cube-master/src/scss/.libsass.json | 16 + .../src/scss/components/_btn.sass | 46 + .../src/scss/components/_document.sass | 40 + .../src/scss/components/_icon.sass | 6 + .../src/scss/components/_range.sass | 137 +++ .../src/scss/components/_stats.sass | 26 + .../src/scss/components/_text.sass | 40 + .../src/scss/components/_ui.sass | 52 + .../src/scss/fonts/_bungee.scss | 7 + .../src/scss/mixins/_inset.sass | 6 + public/the-cube-master/src/scss/styles.sass | 13 + .../src/scss/variables/_easings.sass | 31 + public/the-cube-master/upup.min.js | 7 + public/the-cube-master/upup.sw.min.js | 7 + src/app/[name]/(Dialogs)/game/page.tsx | 30 + .../[name]/(Dialogs)/game/the-cube/page.tsx | 29 + .../(Dialogs)/game/tower-builder/page.tsx | 2 + 65 files changed, 6843 insertions(+) create mode 100644 public/assets/images/cube_logo.jpeg create mode 100644 public/the-cube-master/.gitignore create mode 100644 public/the-cube-master/Cube.sublime-project create mode 100644 public/the-cube-master/assets/css/styles.css create mode 100644 public/the-cube-master/assets/icons/android-chrome-192x192.png create mode 100644 public/the-cube-master/assets/icons/android-chrome-512x512.png create mode 100644 public/the-cube-master/assets/icons/apple-touch-icon.png create mode 100644 public/the-cube-master/assets/icons/browserconfig.xml create mode 100644 public/the-cube-master/assets/icons/favicon-16x16.png create mode 100644 public/the-cube-master/assets/icons/favicon-32x32.png create mode 100644 public/the-cube-master/assets/icons/favicon.ico create mode 100644 public/the-cube-master/assets/icons/meta-image.png create mode 100644 public/the-cube-master/assets/icons/mstile-150x150.png create mode 100644 public/the-cube-master/assets/icons/safari-pinned-tab.svg create mode 100644 public/the-cube-master/assets/icons/site.webmanifest create mode 100644 public/the-cube-master/assets/icons/twitter-card.png create mode 100644 public/the-cube-master/assets/js/cube.js create mode 100644 public/the-cube-master/assets/js/three.js create mode 100644 public/the-cube-master/index.html create mode 100644 public/the-cube-master/package-lock.json create mode 100644 public/the-cube-master/package.json create mode 100644 public/the-cube-master/rollup.config.build.js create mode 100644 public/the-cube-master/rollup.config.dev.js create mode 100644 public/the-cube-master/src/js/Animation.js create mode 100644 public/the-cube-master/src/js/Background.js create mode 100644 public/the-cube-master/src/js/Confetti.js create mode 100644 public/the-cube-master/src/js/Controls.js create mode 100644 public/the-cube-master/src/js/Cube.js create mode 100644 public/the-cube-master/src/js/Draggable.js create mode 100644 public/the-cube-master/src/js/Easing.js create mode 100644 public/the-cube-master/src/js/Game.js create mode 100644 public/the-cube-master/src/js/Icons.js create mode 100644 public/the-cube-master/src/js/Keyboard.js create mode 100644 public/the-cube-master/src/js/KeyboardArrows.js create mode 100644 public/the-cube-master/src/js/Preferences.js create mode 100644 public/the-cube-master/src/js/Range.js create mode 100644 public/the-cube-master/src/js/Scores.js create mode 100644 public/the-cube-master/src/js/Scrambler.js create mode 100644 public/the-cube-master/src/js/States.js create mode 100644 public/the-cube-master/src/js/Storage.js create mode 100644 public/the-cube-master/src/js/ThemeEditor.js create mode 100644 public/the-cube-master/src/js/Themes.js create mode 100644 public/the-cube-master/src/js/Timer.js create mode 100644 public/the-cube-master/src/js/Transition.js create mode 100644 public/the-cube-master/src/js/Tween.js create mode 100644 public/the-cube-master/src/js/World.js create mode 100644 public/the-cube-master/src/js/plugins/RoundedBoxGeometry.js create mode 100644 public/the-cube-master/src/js/plugins/RoundedPlaneGeometry.js create mode 100644 public/the-cube-master/src/scss/.libsass.json create mode 100644 public/the-cube-master/src/scss/components/_btn.sass create mode 100644 public/the-cube-master/src/scss/components/_document.sass create mode 100644 public/the-cube-master/src/scss/components/_icon.sass create mode 100644 public/the-cube-master/src/scss/components/_range.sass create mode 100644 public/the-cube-master/src/scss/components/_stats.sass create mode 100644 public/the-cube-master/src/scss/components/_text.sass create mode 100644 public/the-cube-master/src/scss/components/_ui.sass create mode 100644 public/the-cube-master/src/scss/fonts/_bungee.scss create mode 100644 public/the-cube-master/src/scss/mixins/_inset.sass create mode 100644 public/the-cube-master/src/scss/styles.sass create mode 100644 public/the-cube-master/src/scss/variables/_easings.sass create mode 100755 public/the-cube-master/upup.min.js create mode 100755 public/the-cube-master/upup.sw.min.js create mode 100644 src/app/[name]/(Dialogs)/game/the-cube/page.tsx diff --git a/public/assets/images/cube_logo.jpeg b/public/assets/images/cube_logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8e8077da48ef8b678b4bf513962a5b73c3aa4bc3 GIT binary patch literal 16380 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 DA@rIN literal 0 HcmV?d00001 diff --git a/public/the-cube-master/.gitignore b/public/the-cube-master/.gitignore new file mode 100644 index 0000000..ed1051b --- /dev/null +++ b/public/the-cube-master/.gitignore @@ -0,0 +1,6 @@ +.DS_Store +node_modules/ + +*.sublime-workspace + +export/ \ No newline at end of file diff --git a/public/the-cube-master/Cube.sublime-project b/public/the-cube-master/Cube.sublime-project new file mode 100644 index 0000000..a5df2c5 --- /dev/null +++ b/public/the-cube-master/Cube.sublime-project @@ -0,0 +1,36 @@ +{ + "build_systems": + [ + { + "file_patterns": + [ + "*.js" + ], + "name": "Rollup", + "shell_cmd": "rollup -c rollup.config.dev.js", + "working_dir": "${project_path}" + }, + { + "cmd": "$file", + "file_patterns": + [ + "*.scss" + ], + "name": "Libsass", + "target": "compile_sass", + "working_dir": "${project_path}" + } + ], + "folders": + [ + { + "path": "." + }, + { + "path": "/Users/boris/Desktop/the-cube-codepen" + } + ], + "settings": + { + } +} diff --git a/public/the-cube-master/assets/css/styles.css b/public/the-cube-master/assets/css/styles.css new file mode 100644 index 0000000..318061e --- /dev/null +++ b/public/the-cube-master/assets/css/styles.css @@ -0,0 +1 @@ +@font-face{font-family:'BungeeFont';font-weight:normal;font-style:normal;src:url("data:font/truetype;charset=utf-8;base64,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") format("woff2"),url("data:font/truetype;charset=utf-8;base64,d09GRgABAAAAADCIABIAAAAAbvQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAwbAAAABwAAAAcgMaRMEdERUYAACp8AAAAHAAAAB4AJwBoR1BPUwAAKygAAAVDAAAkYl+xQ2BHU1VCAAAqmAAAAI4AAADuG+w0B09TLzIAAAIMAAAATAAAAGCWIuetY21hcAAAA3gAAADPAAABmq1lz21jdnQgAAAGvAAAAFAAAABQHj4lfmZwZ20AAARIAAABsQAAAmVTtC+nZ2FzcAAAKnQAAAAIAAAACAAAABBnbHlmAAAHwAAAHtIAADeIYFYc6GhlYWQAAAGUAAAANQAAADYSj5dVaGhlYQAAAcwAAAAgAAAAJBWYAf1obXR4AAACWAAAAR4AAAGIw8giGmxvY2EAAAcMAAAAsgAAAMYcxw9WbWF4cAAAAewAAAAgAAAAIAF/Ah5uYW1lAAAmlAAAAvEAAAZjloOeOHBvc3QAACmIAAAA7AAAAY9ePAmCcHJlcAAABfwAAAC9AAABMcb0/DZ42mNgZGBgAGJzsc274vltvjLIczCAwKVr+xJB9A2mXjEGhv+6HM3sW4BcDgYmkCgAI/EKQwAAAHjaY2BkYOAV+tHJwMApxMDw/z9HMwNQBAUkAQBo9wSpAAEAAABiAFIABQAAAAAAAgABAAIAFgAAAQAByAAAAAB42mNgZtnEOIGBlYGF1ZjlLAMDwywIzQTCaQxIQIGBgR1IMcL4KVlFCgwODAqqf9ge/nvIwMArxF6uwMA4GSTH+IXpAlgLMwB4xA5BeNotkKFLQ2EUxX++9+7nNL5kMFhFTCYxrAguiMgQ02OMsWCZ8lCZYBpiEBnzf5iCimFpmAwGgwyxTZMY1gZi0er5nu+Dw7nc79zDPTcYs4pecAsTAwjrXNsCFQclW2KnUGTbzbEevLMf7lITEnvg0D7ohDFpmFD2HDwxba80oxdqNkvZZqjbHS1bJLVzmhaxYT2qqqvZnGB9Lr2P+N6KJO6LYxuyZwPa5jTzK16hHX2Lb2i6WPWQhrXYyv46tN2z4FSPpD/I2eu1uzyXpTvxnu5K3iOhq/3XqPgsfucsT59Nv0eEsnSZV/809Dr1spv4jG8w2VOdc3Che42F0j/4EZ+JG7k+h/eYivNb+cxH8hUKn6Re7z3sEf4AOzpYcgAAeNpjYGBgZoBgGQZGBhCYAuQxgvksDBVAWopBACjCxZDAUMewgGGtApeCiIKkgqyCmoK+Qrzqn///gWoUGKrBcgwKAgoSCjIIuf+P/5/8v+L/nAdeD1wfOD1weGDxwOAB461UqF04ACMbA1wBIxOQYEJXAHQyCysbOwcnFzcPLx+/gKCQsIiomLiEpJS0jKycvIKikrKKqpq6hqaWto6unr6BoZGxiamZuYWllbWNrZ29g6OTM27rXVzd3BmoBuI8wFREZExsVDTx2gAWWiwuAHjaXVG7TltBEN0NDwOBxNggOdoUs5mQxnuhBQnE1Y1iZDuF5QhpN3KRi3EBH0CBRA3arxmgoaRImwYhF0h8Qj4hEjNriKI0Ozuzc86ZM0vKkap36WvPU+ckkMLdBs02/U5ItbMA96Tr642MtIMHWmxm9Mp1+/4LBpvRlDtqAOU9bykPGU07gVq0p/7R/AqG+/wf8zsYtDTT9NQ6CekhBOabcUuD7xnNussP+oLV4WIwMKSYpuIuP6ZS/rc052rLsLWR0byDMxH5yTRAU2ttBJr+1CHV83EUS5DLprE2mJiy/iQTwYXJdFVTtcz42sFdsrPoYIMqzYEH2MNWeQweDg8mFNK3JMosDRH2YqvECBGTHAo55dzJ/qRA+UgSxrxJSjvjhrUGxpHXwKA2T7P/PJtNbW8dwvhZHMF3vxlLOvjIhtoYEWI7YimACURCRlX5hhrPvSwG5FL7z0CUgOXxj3+dCLTu2EQ8l7V1DjFWCHp+29zyy4q7VrnOi0J3b6pqqNIpzftezr7HA54eC8NBY8Gbz/v+SoH6PCyuNGgOBEN6N3r/orXqiKu8Fz6yJ9O/sVoAAAB42kXOOw6CQBCAYRZkeYo81pIEbbeztrAQLIiJsYLEA3gCGwttrIwexQxWxnN4HnHUce3m+5OZzI21B2AnrQR7UTWMneum4LIaQFiXIJY47OsUuFxVGhhZDoacgpPlV+Opyw9shHMkWAh7RuAIa0QwETwldBBmQnDf1x4ED+FuCT7CGxK6CN//gkFAr8RYg4suG6PYICNkvFYMkdFEsYcMx4pJlt+1YNdqqoh3SRj/lz6uiPmPNQj5AnNnVq8AAAAAAAXDBcMBhwE7AVwBbwF1AX8BgwGMAZEBrAIaAdEBvAHAAcUBywHRAdUB3wFnAV8BQgFOAXgBUAFZAb4AxwGUAYUArwArAC0BtAHIAEQFEXjaY2Bg0IHCNoZXTFZM15jXsSixRLHMYLnGasU6g/UWGxObGVsI2wq2b+w+7Os4mDiCOE5wKnAu4OLgCuHaxPWMW4U7gvsITxHPI94g3jm8D/gs+Dr4XvG78M/ifycQJbBIUEgwS3CfEJ9QidALYTvhNuFrIi4ih0STRK+JSYmFiZWIbRB7IS4gniN+QfyHRIwkFxCq4YBOknGSVZKLJE9J8Uj5Se2T1pOeB4ZHALNAMRwAAHja1Xt7dBTnlWd91Q+1RKu6+q1Wd6tVXeouNUWr6S615EbowcM2xrJMNJhhOIpgcSZLfEwU4vWwDMeHJQxhGYcwWZzYYWzW4yUMh2GYqlYno0McB8chxPEyHI4XdGaJBzMej6eJJyZewmAHFXvvV/0Uwh7vf6tzqO9R3V333u8+fvfWhWGZ5QzDfsHyCGNiGpgujTCpxfkGc/xfM5rV8svFeRMLU0Yz4bYFt/MNVunW4jzBfcUpOGOCU1jOtusd5Dl9k+WRj/9qufksAz/JHIXLK5bXGAcTYR5g8mGGkTWPvQi/yMj0QtT2lMpfVJmMFvAW1QY6TNoCvE3WHJ6i6khpNk9RE4gMz/c4Xeq83MK0O96jCBlfg4kjohCNSyZnN93wOj1W3DjGChLZI7WzITYm6T+RomxQlMg2KRqV9D2SaNkmiaJ0q4jrmX8hdlzp1+HKUJrH2dfM50s0r2MolapbKdibmQazrAYzdKe0pOQ7Lmo2rqja+MmHbA2crDHACJPSGry4p0WIrLVwxcmHIjzc83sNZu5kgsxab2AjWTKqRFgeJvrfZyMs+1h5y4lb/xu2LBPZSCQ7czQbaeth11bnyMcKhrFMAR8PMg+TnzN5OGJZzSl0zLuRqbBCx8ID5uXuZnnSsmD4oQ6/oj1gLU5mBwZXdPgzBa6B3rLKIw/jLQ5uOVoCUbhF1FUp7XNEVntaTw4+cuM045WbOPV+XnWe0pb4PlL9p04Obvy3KG6r/bwaPKX1wq5wygKfmbTc73TDr9KrA68nBz//bwx8dt4kj0uLuoSfbFnid8vw3clAfxA/MXbjt/QTrbi0qL38ZLRXgB+Q6XUBvWbxWv2xHlxa8DcG8Ev4q4P4q9UfG8IlpWkFPhg/MVx+7kP4ncmR8jcfxv080Nf+p+1/Klo5pyuXh6/jACThAI+DgRmy8/5Woad/6H5nsHdJV80fGQpZrA7e3xJoFaLygmxP/8Dg0P0rhh8aeXj2R2f/qUOtBLUm293TR3rFaLyf0NkA6SMZn4Mo1VnGFyYeq0waqjOOyCQaHyRidRaNw3fEFVFpV3gNWsDTQXNEmpYkc/C90szSOowmsjO8Gu/vDZfuh98rzSyhETCt3vfC75HxS5J4Roz/Uoq+ip991bhGJdg4I0pw8xe48QvjKpLhMwxhNt1eYb5i3c4MMnuYfD96BnNjMd9vbpInh/rvaZTzIVBOrcNUzIc6cC/kbwR7G0qpfRdVd0brdhTRGLv78F73wka8CvCtvm7c6GMaZdWR0ZaA9XX3OV3ft8yzxTrlDn+O0cz94EeUnNrh1JqTuZwacmkudw78Sm+W+pGebHdcinURlHBpC+RYEibYptXr8fktbQSXDV7D5fQTuGwSJVYKtrYG9bP7/+ZHR8Q4SYBYqHsRg+FwkKT3q1MvwWpaiurvSeLKD+BeiyiwsueZ49Mv/oB7Aj/7ZVECZxQNBmNswnPgr6efn+KfwHOYoP7Jwqy5fb3hpuUs4wT/lGKWMA8zp5n8IFr3AqVwr5nhzHLejHYdMuYiGnwHgY3h7kFzMwx0X/W2X3QWHHSOxqwyFwsuBzMP7rh4rYXIhSZj1cRrC2G11Fgt5bUVsFpEV2UHMCBc+57hANp5sHEt4f9I7TzFTLYLnQmq95UZqrHW4nK6NIc5l9NWLIXZYHcuh6qNXjzTxoIX51hQz5jHp8BZOLvjIoi8kRj63UAMDY594qfXHPjl5m+MRiKj+x6/9AxJBJJyS4ucDJBRssIWA91tt+lTxoRdc+DS5n30o5svHSCJlqQcCMjJFtNqsnvzHnFoLKtvz44NiXuOcz4fRxrsPp/9d6olFYO/j8/D5Sfk65u/Lg7C5/44OzaIn/P7OWK1+/12PC/CDMOhXQM/vIzJMvklqOeyrZiXl6Caygpo7DzUc4+tSNTlKe1ejHQe2enKm/sW51Ar0eR7DW00NNFQQhh9KBDDwo01VV5n9XMyKann8IGJ5dmT54hKlfFCOhRKR3B6OB0Op4mYFCA+7sON1I/yM2dePkM2Hd5/eF74qyMb90yK0vtSNBaQAx2i9CYq7FCgI5EgQSkqxv9Bin7+8E9PUz6fYF9jH6NxM8PUBngeVQujIf6btDUwGNo5I7RzRc05ZzR8km3rgVDXVo1+taGOPm/j7TGTy/pFsAKBoXEYnuLkinkng5J1NoIDaMmUgm0vCEVQqsICrakRXnt84zQRJtDIhtKimB6i5qZfntZNp08Wo9JNSUxnb13IZqJomVfh2WPwbHvts20XtQA82xbAZ9t4eDZTfrafumxDN1FzDcfdTtGKAJo7JkqDaTGaGaTGT4Tpaf3ylyVx3XUpmu4xydm0CAREiydv9U1dFeHZT5KQZQ3IeQEzn6G6Qy9ETSIVBYeD4cEwu8DvOWxgXHyUGpcLXP4A8VtM8R5qRaZYjy9CfNYGi99ndRBrXJoHhpUiXWSQxJ728Su5RJKIKVtb9wdK0JYggWTcOcz7Ff3MFdEsv5rsCDz37YCUPCWbxcv6z03rROUdxen7E5JRBEHR/+5P/M7udxTRprwvJdq+EZ4nE0G/LDeFvhHplN5XDLvYz+y0rLIsZURmlFGFlOpTNLOtqHKZvEBjgBAC2zALODU3ouvvSKmRi6olo7WA62/O5FsieK/FDR+LtOA0Ak5fixn6RP22k0oeJF2xGyc9/3jWCUq2H5R+BMxBipIRahd5wIeSqOclkd1clESylu4eFSVY6EdxQdaKlPYttxX2JVZhQkwXozanCh4zYwPn2JrSzHaw4zD1po1exmGWS4PWVlHEMlStKkOmpx8D8paoRA5J4pG9h/BZ+4Lht6XoSZKiVOx4/ruiNCqJbcFI1JDfKMuZmkwFsDc/0oBPNp7Op8pGNQsXj0J8iqHZzkBEZtcSF/3lX1PkCzwBaESeHBBV8s00HjcXK5OSHc9iynkHU/icEh/w2xul6Ery3+n0PxgAmzBNt1ewpyHuOxjG7x4gtWbP3QBkAUFTMuMEwqQ0YX0Rv/3RBjBJwLRbb1+xrLNcYbygNYsYMHUgLtBUzFvRhbbPK1IlAT/gA//i47UQWIHdVUSd0EI+sAantRxqBtia6NHF1oePrb1PX3/55d8+nc0+ff1HL19/upec69u0aXHflzb1kV3syfGDE/39E99dP3Pf+MHHBwYeP3g00dubYCWpt1cyzmYjw5h3gI22QWaVD1ERNhUBteQ5JLShCQiNpFTLRc3tLebdFlRedwvoscWNUwuDaMbSBNrcbgiYuhBnCfUZoq7ikfhGUXr3ZRQTCwryU5rcbAV0AV6DPY7OAzdcYhwnqDdAWwFoSzKdTF5G2qKAu7xIGNcIhHWltBQGIS4KArOGKTBCefXGBgggIwPtVGNMg4UDJFQNTPHR1Jqt9xK34GuJ6MtQ29jPnzh5/IBejPjY+yktGSCObNj63Udznt+3tQsRnyhdk8S/+d6rB/9Hcq3NK8ii9IFB6xeA1teA1h4mzeS7yxixA2kNm4oFT3N3RzPETiuQ3ZvS7qGxsxnQ3YIaNAfEVog2TG0OJgw0h9tfADGyGBb1w0jsNJ3uotLtO3Yku+xbW14/PbPNAG+xQG8gSvFtrCWC8RHCw6E9W0eeCPH/bc/ZQz+gdrUT4n8EeBCYISbfimCMXhCiqU6FjkSNUrVtBLVt5LUwoKrmDCqxJiJL5lZgyZ6rM2gIX7Osjvq0neCj+oHY0I9h0kcN7zQ4ryNnTrDH2HO4njknxNitOPv4PHVp9iOGzoL9my8AnQlGZvJSWdaekqyJOj+lyUhN2Ox0Tdqb2yIApu+Uci38EAVvvVdgnYG2SItuxueankDd0D0kcOTU9NTMfwJPARL1t6wKgDqwOn4EpLn78F/o7zw/JZZsX6ZyTDGPlmoJsYYiFaDWjNqwIGxGbbAAsQupPKMgTz6Tj1JEEEVEEOW1TiMh19IwdoKO55s9oOQ5tcUJMgb9WQDCdpaEnSC1gAucVTsua10G5RtdBiAIMk1LDDuHs+mdo8RzVtn9z+rL1/Yo5Fx67Vg6PbY2TXawL568KkofSmLqwSTHn/zB6fHnHl+8+PHndgiyLGyLzJ8fwbMYgbM4CLxG0X94UF08ZZ3R2tF7iCnVf1HjwXvwfmSOt4H38PM49WMU7MCTaseCiSNXjob0KDjWQSoKA1Y9SLIwhTBompJEaWTb6LOgMgVjemQGNMa8kzqQmY83/Nd1fYGkfpAqzVeN1RTNSUzMBjibVeCXRbDTQchI8hE8HckK8QNJXmwtFrJdkWY4nay5SJO4+Re1VmcxP78VSZ6PJGOq1joffI7LB05ay3bB1GeuR8CG165a7Fwn4a5bbXhqbHl3dvv57x4895+7e5aNPbV4//WpqRv7F5PT905MLFs2MXGvIq9ZK0lr18jkvp/tf94NqHfr8B+tTiZXb30QTdn1wv6frdq1XlHW73pBmC+3b47IcoRM43mtwynWWjaAjXuAf9TN+5g8j9z7TaW4tAC4j8R4K3AfKelm8KLamdHsgBiDdhRAEEAMKiSjxSJwZiGD6UqMsiZIxV8BZxAs2+P1TG9Qvv4u1bWL+mU9QY9oB6jh1z6nv/93oH5jazMZUEHTjtPjz27u69v87PjMBtTD34AeDic55w+vICfbkCdaA6NYwNJEa2BKFQ0AsAH/WiyhbTCtEg4AoF1GBMKciCBAPgEh3A0tsHo9dEC6EHcBXSFAv313Ii/0UQLSl6T0hSv0xTKFuEFf16fDsLsQWwfLammeC6Kx35xFO2EOM1vMumUEMAFDFRoQOD4B42epoIBLLDwc3r3DRKuSMwUPx3nYYRo1r+/YzX7nwHM7O962CZL+oSRZD5l5t8tpfsEqSfpvIKe9HNsJMtrPXLOsMr9Jz67VQIY24+Rs9OTK9cdsXT4Zd85aAzo2J/HBv8Okr2ZOcldxehWEwH6ziNNihccpZovFZfCIIi5BBuQJ40KlaGKxxqfAyQ97HA7PTIFGA/uO3bt33AKPP0UcUrzhBQgywNohYI1wkmB7O/ZfngPeY5dt7agHY+Af36H4qou5n8kvQP0U7aVYEEIHmaLJgjOjdYKP7KSZQif4SCxlaJ1gY3lf0JNDPxMSweC4XL1AkEIJcqUazDMbTEPaxn77zJXj35q5IIlW2QoW92ykJRSceUMSD8NiK40Fe0sO9Icnpo8/4xk2h5GdhDlnDkfCIfF31+qqzyyz/fZ91ietT4EPfYDZy6h9qULG0G9XqrCMlmoKbcbGfalCwKjjSKmCle4RdSWF6EkHrVQnec1L5MKQUbcZ4rXlsGozVm08akHBTj+pPQgyWT4EMpEyVoyEbU4sjwkurae3ApdJh5IxUxUFn1sT571OCpu7wBFz6Kra2Bol6ugitErhRBe1fdkxIv/zu0Q+tlT8wvf360+dO3jwHDkbbF2VSm+/dPTopafS6acuHSW7pQhg/+3v6v/r2DL2W+HE3idzAukzrdhycvfKlbtPbpl5f/zg5v4ju8nTe460BmeyX/ocKyz9ykgyOfKVpbeOLv3yiNwmLZLaHtj1QzIO2cTpVNDwHRPgozdR/CADBqYRSvUodMzb2NKl0BqN2MBRtzaADi2gICLIF9UgrYhheUFLInwIQmyKiqg+NkAQqmRg5J7eUj7jdxvGXIJlpRkRTF1Yu7I2TEidk3YFMwbFPpmIg578IhHXvw2K8CYkoxfIkg02t12xu20r2VD/XzxGzouCIOqpx14cmPkn6tvb9H9EB3mS9LqcTpcRg/cBf1uBPx/Tzsxn1hu4QfNbinkLWsV8S7EgtHsswJyAMVimzPldRVXI5P0UIfnBQFQ/rwWBRd5Z1BbAGPQDf7GcyhvoSGgvQdFe55zomVSgoLMUnWSyDyxl3+uvLu7fteO1N25BuknOkiYJ/vQbJ3A4sdICDvTgixvXbG61P/+dl48fBh+TSKxKAIJNJGBm+JatYPPHgT8akYw3SaYy+msqfloFaDaaQwhd1dT2+NabhCH/hxrjHw4O9A+RP6fz5tvMTfIS+9SFczSRUhS9RUmJEnzwLOoUynwnrXkFmIVM3o5U8Y0liQcQNbdSqngEorzmAYECxkcBV4KQUQjCAE+UcpEIJZYnzM2bt5mZEZDX+evpVCp9ncrp7IWZnRfOimRDWiEfKilDNkCHeRroENEbCkhFS2NZNo3FAucXEBlz1kqC3OIySihUUi0oqVDGqKWUCii9d+D42bNoHMg0/YDGqTfIfiquLWyWxqqVkB9ZaFSExO4FmiGppaSuQm+e+u97jfzYuFSgvJ8LIcF+k5EoI8HcLIJL1LZ/IrXOKqHfooTeIH9I044/B2JfqxAJ7vdCVLoBidJmI+8EXbP0A30dzGoG0gfUNcyFovhwT6BRrlG72Fxq56S+V2uDs47D6AUjVZupY7Xn7qKMs/I5QyNZhkaRNYMDqdQZwBwD9J3ldkMpd4AalJTSp6TJEK3s7KGaWZKxZTfViQcMnVB9Ch2N1JMzUs9CY4jqRqO9ohthfJmZUcO81gqJaFNGc3PFWVrhdQp3Zp9VYWMKStaUUlEqaP1YncD1ZeRHNSnoz/RFhtw3g15sqtNjs6kIRlypm6i+DCXTAhrhKeZbLOUSIOhv3kKrgFg3wepr7C6lE6PmW1s/2RyV3ngDJWv6El7PnMHrrWcBjYKds2qphAKXmVXU9I061urbVwDPYTxZXvJH9nnFvD2MNNgtjcZLVnqppPcOmt47MIJ4aG6vORpBM8K5mmIdreNXy/iVCtVqEStj0e7xteB/yBJJzO6+Wsj/y26F7CIUIH6MRSgTLVrcaioVpsp68BTQOZ95hMl3oh60KnSs04NyQOgwDr+Dx4Kl5ueMKNDWAWQ25VS/U3O6MeyZOyECNkZzuVqdUCrlvNrwR4NBnWqMvsll4mSx2MKdf2KvUaEQ2vXf1GtIgrwVi4iCLlq/s33mx1RN9gsxXa71IRYF+AowixkIYCD/RrDRRpoON3IlGy3x1lpbXmkChtyOei88l0qXFTkAYydFv7+ukHeryRD6zPZaeqzoM9LMMJNPoZxDCh0NOXvKcs5QWmRnUZV5dF/44kBTYGyXQaY2FxVvCqZ2oVa8iCkwRSljjKqAS+90U6SG7pWC7Jpqctjddq7pb12yQOirXP2nUnSbqxuSFMW1DWR8rsRPWNDzCCTIiBAuGyV7/m2xLRJ9eyZVqg+jvLfRmgT47Hbkz6vQ0eCvucyfSPkLAX8hXguAB2nMaC5AE7QkYW5HvQmWGcPqvH92Iauf1HByQeoNYjwkCtWKs+BKXjJGSnkgoi8ihaoruUWOzowhwUa9aOIz1oq5/5da8b6Pf/zKzX333LPv5iuv/G5fLznfPzHRP/Dlif5/T63YwBBJkKsHouEgk3ehROmFgog2W7HQ7HUhbGu2VqIhBzR7MypHBYx+pS4Olt8tlXFnHRJ7gvj/51n96vuGtZGzU33x2OIpKsx/yOsf59/SjyO0/NWA9Lg0wFA5rqByDIEHGWEM8Unz4Pkprb25AiQxaEDEEEtSRKcRZsBpBHKq6FStOdUOEqW63e5F4bbmcrNlW32X3kXuIuPYukPbDIfx6+/VyPk77F9W5PwHI7v/40p+C6r7FnH6TOKeexJsypC2IeuDNL4ksYZIo6K7FBWpuJPWYiHUIaC4Q1ZaDC8z15EBJ4++JYwoGVj1I0oGVlPoJ8PAamcFJXeE5kbJczrF+uM59u4JZXACveJPIJ7L+hWDXXLuYDYWyx6k5/TjZ9ev2QZQeadO31uRXFLWJ2BmSvQm7kv0Ym8FxNErdTV+rOW6aXZsqqnxhyDN1po77tL8UPu6uabnQZzd6vCPP2MH6rsc3qmUyKv9DSd+OKux4cRJ6ldycCZW6sfrtJ8iLD9EfHuG+m8vaD2k8pwXz4ADkJX3cjj1Yu0wOEdJo7YsnhMlc46S+GaUljch0SpXNuFyy01rEP9K6dkFfuNJGtcX18R1s9EGVl+u91Tjuetu8ZwmGnPE811GFB94bHM/zHol8Z59N1555cY3e8ku0w3qytbRgH6kPqCTSh6rMP3G2RoXSmCoTGC3QaCXEoipqwCAI0s9MEQZlZ/1MqE2uNRRWu2x6zJNAAC9T0rYbBusTt7PO60bbDYgfakUtfIB1+ucIs38SlK4110B3moaY8NGZuCZ79OveByclwj+Ti9L3fjMO+nl/cuT+jwpHJbIb5OwMGLodoihWOPPYQxV0DqjCh0N9nxl9hbVxnMXpqkQYPpgdIH8tfhCGkMVDDXzc3Wsuo0uEn9tNaeGRyM9r1lvN16jbOWz0hop6/wjWKYlsSn4xSZJ0D8QsrZxq9vusrtBFl0AYYRU0xeDTexGk5+yyRFWDIdFXWc/pKf47tKvDOtXI3K4nYygSPR8pC0hkNbhLQbvFuyf+BwzzuQfRt57FDrSGroaU+hI1FFa24Sg+iDkcM6M+iCvLYIoK2Q0BTYSGe33QA4Pou+15DRlEYxdII3mh0EagaVlSx8kUp2N+yLE0ABsE6i1fQfxV60e3RT2CKCUHISr7G8XkkeOpCKGrMzcuiY/H+C99jHOIsbJPVK0HW+3geX9XIqaHevsXj7Me5rHODMY5OvgJy6Njw9dvjy4ftyosHq6PF/jXS7+a56kl3alHIL7V96C+5doAxned/G8C+//ooK/xkB+Kyj+gig1H+U2/067yNQqDrULZ3EyLrTYwPWDsSRTWtxL0Rjoz/w5DKVWTNlaHaq+VAH5jJUlsb7J5/Tw/qb1yCpqjpDUXzdesOhnUhHTNbKXeiUVWHoGWXoGWCKr6N7W8fWD+jr9FnXxVnJ4cNzgEwZzkfqnNibfhv7JZyq9Z7FiQhpN0beGpYoUEWpfGiOhNQn8eKCVfKivpM7vBICpoB4jV2nyY8NXtC6pL8yOldIf/VxicWjmVDkBqvbfBBiZKSHsghu8sVmGBAIL7zhzZWg1yc3QBBi7YZx3y8I2QkgJ48OfeYZmue9I4jorraKih7bR3huxvn+g1DXkd/voL0icWcIkKWK+ARN9GibWdKV9QKrp2wlAXCzRDAluieyCiw5Vgi25SvtO/bv3SgX4wAEKlcM09X7HaNox3aQNO1Hpo70V3VxFxiyy5WWsiwdJ2QUB0bTM3EUa4tTpSLFofO1bsZ3Pffu5HdJbtghW+RPmF82c28PBkMB1hBwz2Xfs2UNr5SwLD1/lcbKs0zOj0nWpt+Z20rKKefMTekP8s0B3Xbl/b11rCPYMWFnT8QbsNfljRrWnan8L+/9uLji1nXb62rs4lTulWVs+sqjmUydv9p/ahm22qpmftJitbsg2+clmzu4GtGW21vTRwh52zk5amq0cbRj8vtliL83rel/LGAQhyijAVDR/caZHEq1HT4sd5rXmiPRTMYYjpTsB570CzruHSTHYIqAqF1Vzhia5nky+Q0EA0dEMeE7OYPeA1qHQt2+lh83uGjP8IX1dg36gvgOvHUy/iySWLJ0mwjqUnpwWpexyzm7nlmclMY2Jq7ROvzy9dAl7csXKUQ9xVnrLrvUvstlZu4Ozs8223MCvyp1mU6TJ8wjysRt0finVeT9T7qhD1I//5j7P3bRcINJmU7Gui4Yp2cH2WrnYLqr+jLYQ5CJl8raFtIstYtRRUC4LbdQX1nSzoTFQJ2hEBAPA1ja3lV71VJvc5pQHEUAeS5dM65fXGdaTyf4KhNHM2jkOLrZF/dcqDXD6B57RlStW/p5Xv4GdcFTPWY9llekCE2P+CXvItIbGohpov+hUWxWNs2HFkKjxlCYZanpDO3WCqmlrl9rQpbbyWnPDR5zawGttDR/BMGlraHbLk4302kSv8+jVjle1jZ8MtrXCMkSvYbzm4StVPVYbc1glmQfZTi4P93ErlFODOWaosbFpXijcZrMHa7rB7cZmg83e3Bq8o9tbEwIg9Y6c1sCVWxJQKQdYX4RtA9H39hh5BcfGU2wX6GWDNb4/GRl57NGvrM0MbtiyenQw25MOjjz+6FfXpEZHJ9auzik97Lq/z3Y1BVtYvtlq4+Y1+NyckHwjm4Qtk9NunWe32bwurq2uv4z5DI1k//98bz/Lge58lv65Oh95R/8c/J5t12f9vYYNNAV5ca5+PPY19iWI8yF8s0BLtc2Vd93Oapehz2jI89V2GbpLpZWq41JqXmcf2fuC8SI7dLn8CttkJzufP0jfXkdaAcfp59FTzEGD1movVl+7f1Kno/uzdjqaV1bfo0fLlOC7XvY1S5jSkGOWGVSoglIWRiKDYbxHQZGoXZlSalASB9Z1wkQuKAZhfZ8unNgn3Ryro1eMg+RE9s/+veKU5hLxXfmjgu7JgKzVhFLuckhX+Cv1NRjNYuXehr5PF3zsk24ibD0kResYYv9s1lHB5txHJc11fIwJe0lsW2hfKf5/hZFSN0logaJgS4nm6chkarpMF85ijwf2AsYqQMulhYTBbHrORpPYp6zrGk/Y94Boyqv+KHD6nli9J9Y2okh3mRtYC/9TBvYomrBHkcGUg14IW7oQ1Ux5MnnxZXtp0CyU/LRTcOKXP+6H7/xffa44cwAAeNqllM1uEzEQx2fT9CPqx4GeQEj4gCoQrZNWVFWTXlpVQa0i9SNVL5ycrJPdZrMb2U7yALwA4sKJA0/BBY7cOPAsSHDmb6/bNKjqgWa19s/jmfHMeDZE9DS4pIDy3yq98BzQHB17LtA8Cc8z9Jg+eS5C57vnWdoJ9jzP0UrwwfM8vQx+e16g1cIbzyXwO8+L9KjwzfMS+I/nZXpffOV5hZ4Uf+H0oFjCas1FYjmAxZ7nArTOPM/QFsWei9D54nmWUvrheQ65G8/zdB589rxAa4Vnnkvgt54X6Xnho+cl8E/PywGbKXleodfFr3RJkhQZRNBG5RJibjROmoItaaJLqUzcFgkTiZEqFUZCeEBD6HShIbEYpl2J+RyLLjYSGCssZXeYCMAmcaq4p0YhXWGPgW672PjXdpNXKpVaeKVYLfe+cePtzqPzXDRyybDJpo48peaNpEYRNAwytnqjGzmnHdxFjfo4vgdfVqcDaQKPLexw2nbvrvNpa6LjLGV5mKdNC7UoM+0sHVnmO1u1vujJzHR4Ere2+Dbf3q1U6P6k78uUIRDtroghNIU5hLTvDHuQZQiX0QXSs7p1l54BWR8KMoGZXx/BYs0EM0qEsi9Uj2UddhFJVs9Sww6GSoohVA9hM8KpIbwcO3+2JSKMtsDnkGjbHodiFIfsOENjRCJl55nWD7ONoGloQFUq4xm7h/u+4e7i+lAyZlAtl8fjMUeT8HbWf4ChrVpe3Undmq6iBi6Eq991/RP3uUhoaYw2P3tHoWs/5nKUzvqIGphPEI50OU88N6Y8rENyV/Pal92KbPrcSTeM8MaugVoY7c4YaxtH3it12sffDXP1r2KeLpKGTwX9AWQaJ2rniyMOhb4rI/464qWLCA3juqOZdcxYKNdBSdyWqZYhG6ahVMygg5pHDXYykGmu3MgV1tnkc9nkzDnztq4RRyJORCuRbBybCH1Z3z9jwlSZvyrdVvHAaK7jhGeqWz6pN+j/0rjH4V9fXDYhAAAAeNp9zEdOw2AUReHzUuzE6ZXee//txCm0YIKyDCAISCIhhEAZsCZm1O0h5DfmTj7pDg4R/t8NSESiRIkRx8ImQRKHFGkyZMmRp0CREmUqVJlgkimmmWGWOeZZYJEllllhlTXW2WCTLbbZYZc99jnA4OJRo45PgyYt2hxyxDEnnNLhjIBzulxyxTV9iUlcLLElIUlxJCVpyUhWcpKXghSlxDsffPPDJ1+8SVkqUrUGD69PQzfEs8ePI2MCo1786RljVFf11JpaV321oTbVltpWg1BXu67r3I8G4+e72/7LMLy8Xqgf6ve6v1wlP+4AAQAB//8AD3jaY2BkYGDgAWIxIGZiYATCRCBmAfMYAAfJAJB42n2NvQrCQBCEv7tICotDNEgQi7yBjS8gylWKIHkANZZHAuL7x8nlgp0s+zczO4sB5nju2JM/17jw+LRsmAmn7zGKBfZ4qCvK2/VSaZvwoVvJDDZ0TcB171dLERFiFUOui1ybFbNPk+dJFhXyZq1/o3oXL8fpxxeUyXPKTHWpdOnP4GlYsf3PfQGAahI0AAB42s1aO2wbRxAdkZatMJIo0bQlW7Kpnx1KkBM4TpEigRPEMFzkAxgqglguUgQIYMMAgyAIECCdazepWAYug0NK9qxZb83+ilRXcvN2bsnbO96X3jV8izvud3Z2dv4SLRFRg76gH6j24OHXZ7T+/MdfX9AuXUA/SUk1/CzRBtW++vJsjzYef/cNvsZI7dlPv7yg9d+e4dvmniX+EsYvqnVca9NpWGv+vvEAoy1a4VmraqYUvKqD0W9Vf7Pb/JRO6EOM+FJg1MkjA1UcwR6j+NJ3AtsH3r4jvH1dAkd4O8M82sUJTdxR/J7sxyjv2+RwV1SeDFKpJPg7lD2uDdV3EdhJvJUO0GUoz2ewRXV62aZwDHY/yYNupMgBzKE7qTTpHdXt7FftLqtwI+R9OKVNmfuQffmy7I1NgogKU36c6pjZrowrbEgQtVVL3VSch7NtmKnH4xp9fkWZe9GYBmVvr8rthDQJYc/TRL7ktqaJeZ+qVUQTDU1Ed5qvJ02Pw+TdPDsP2CKDM8bzuCRprmcGcVzkI+P29F3OfofSy6BJENlwQ94Svg7z0riCPNjXmg3+titLscY61yuMYFfyHmVHeikykSEtk2ASFMn8vKTb1/zzkKcU0hwipta5WL71Sn8mNRbsZfH6kvqkiv527GW68raKrM27eooiPRmTzPY7FKe5hO078zZrKC2UJh2i1NGqc/uI2zfpPkpHxeboO8TvvxzNr9IBdRFVf0YP6Qzx/nP6E+2/6G/M2OEY/CpoUac11LfAiR28NdQC1Hz0b+F7HW+H56raBV4R9o/pgHtaWLWj1+zjXcYcf7ZWzbmP9XVqY17YKxj2gGu7DHsVeF8Gn1yhq7RN1+g67dAu7eNUtcs/q7Ns/tf6hz6hU/a8hBOf2DfusG8RrgcLNkrwiGUOtIlvJm8PXfC38qNxn30unmmNy3v5tm2J4W26i5I8+Rg79GxbNPkacEf5cBfPbbjis6x7t0f/MNKy4ZNpL8smZok8mRER2M9tCaaDsJNlfdveyyL0gKSN0rzlLE+aCzRRkY4GVBHFYYl7U1HiOH6TrE9ew+pR6Jkv7p2lx6tVtKF9uHLAenyYBzcjZhFykGGLE1mqGDXHKfcm1F1Xo2+GjIjq1ob5IRtfP641NJ8NplopB5seLOMosZMfSXNijDOlk9FkVOTHyHvyXP4RZSHU7Cks2UA5jnnNnspATF5NXjGVz+3FE/Nnz49Zi7gxGcUbNB9n5EKHRj4lMHNn4DKRKseeomw+n837eXF+SBspb52AwSNg10uVNy/iqmScxhzjFd1dGSxMbtfyPXbzl7uCHMYoO8+Xxo9VaL2gDxZk5LGq64dZLqdwzxHHRf2cPG6SGyMdMs6L7kN7mE2fOUsRyc4oL+uU5u9oiCIlR1uYr2Y96SUk259FGb2MNT3Wez1T98e5OMy7vonNSIcdxlOF/C2KOdSWN/cm8VVV+5rid4kCe+WX0xRxblVcqPRk+XgobR+TX5nP+ul8VpEGIkOf+TYydkYmOnCTxXQSHS9RnZ7QOmp3Z3139cgdOqYTvGtoLdMmNbl/ld4P/3eFnzv6N8wn7XJGaQvtbTrgvJJ6dukG3pvUoT30HtIR3aLb1OU8W9XnhP9v5SN+Q9xvoHeTx9Zon2uH2H2dLgGnS9iP6AO8Xeyqnts4zy0NS51aYahOs6L7Vjh/ujzbb0W/W9jtPWrg7BeB9RX0XKuMe5hR3OC3BjrWURRllzXsGk7QAjZt0LAB+Dto75H6b6AjnHqTTnHmbfqYPgc1VQayS9/TUzr+H7peH0IAAAAAAQAAAADV7UW4AAAAANLWvmEAAAAA2AKNFg==") format("woff")}*,*:before,*:after{-webkit-user-select:none;-moz-user-select:none;user-select:none;box-sizing:border-box;cursor:inherit;margin:0;padding:0;outline:none;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:uppercase}*:focus{outline:none}html{-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;overflow:hidden;height:100%}body{font-family:'BungeeFont', sans-serif;font-weight:normal;font-style:normal;line-height:1;cursor:default;overflow:hidden;height:100%;font-size:5rem}.icon{display:inline-block;font-size:inherit;overflow:visible;vertical-align:-0.125em;preserveAspectRatio:none}.range{position:relative;width:14em;z-index:1;opacity:0}.range:not(:last-child){margin-bottom:2em}.range__label{position:relative;font-size:0.9em;line-height:0.75em;padding-bottom:0.5em;z-index:2}.range__track{position:relative;height:1em;margin-left:0.5em;margin-right:0.5em;z-index:3}.range__track-line{position:absolute;background:rgba(0,0,0,0.2);height:2px;top:50%;margin-top:-1px;left:-0.5em;right:-0.5em;transform-origin:left center}.range__handle{position:absolute;width:0;height:0;top:50%;left:0;cursor:pointer;z-index:1}.range__handle div{transition:background 500ms ease;position:absolute;left:0;top:0;width:0.9em;height:0.9em;border-radius:0.2em;margin-left:-0.45em;margin-top:-0.45em;background:#41aac8;border-bottom:2px solid rgba(0,0,0,0.2)}.range.is-active .range__handle div{transform:scale(1.25)}.range__handle:after{content:'';position:absolute;left:0;top:0;width:3em;height:3em;margin-left:-1.5em;margin-top:-1.5em}.range__list{display:flex;flex-flow:row nowrap;justify-content:space-between;position:relative;padding-top:0.5em;font-size:0.55em;color:rgba(0,0,0,0.5);z-index:1}.range--type-color:not(:last-child){margin-bottom:1em}.range--type-color .range__list{display:none}.range--type-color .range__handle>div{background:currentColor !important}.range--type-color .range__track-line{background:transparent}.range--type-color .range__track-line:after{position:absolute;top:0;left:0;right:0;bottom:0;content:'';opacity:0.5}.range--color-hue .range__handle{color:red}.range--color-hue .range__track{color:red}.range--color-hue .range__track-line:after{background:linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red)}.range--color-saturation .range__handle{color:red}.range--color-saturation .range__track{color:red}.range--color-saturation .range__track-line:after{background:linear-gradient(to right, gray, currentColor)}.range--color-lightness .range__handle{color:red}.range--color-lightness .range__track{color:red}.range--color-lightness .range__track-line:after{background:linear-gradient(to right, #000, currentColor, #fff)}.stats{position:relative;width:14em;z-index:1;display:flex;justify-content:space-between;opacity:0}.stats:not(:last-child){margin-bottom:1.5em}.stats>i{display:block;color:rgba(0,0,0,0.5);font-size:0.9em}.stats>b{display:block;font-size:0.9em}.stats>b>i{font-size:0.75em}.stats[name="worst-time"]{display:none}.text{position:absolute;left:0;right:0;text-align:center;line-height:0.75;perspective:100rem;opacity:0}.text i{display:inline-block;opacity:0;white-space:pre-wrap}.text--title{bottom:75%;font-size:4.4em;height:1.2em}.text--title span{display:block}.text--title span:first-child{font-size:0.5em;margin-bottom:0.2em}.text--note{top:87%;font-size:1em}.text--timer{bottom:78%;font-size:3.5em;line-height:1}.text--complete,.text--best-time{font-size:1.5em;top:83%;line-height:1em}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-radius:0;border-width:0;position:absolute;pointer-events:none;font-size:1.2em;color:rgba(0,0,0,0.25);opacity:0}.btn:after{position:absolute;content:'';width:3em;height:3em;left:50%;top:50%;margin-left:-1.5em;margin-top:-1.5em;border-radius:100%}.btn--tr{top:0.8em;right:0.8em}.btn--tl{top:0.8em;left:0.8em}.btn--bl{bottom:0.8em;left:0.8em}.btn--br{bottom:0.8em;right:0.8em}.btn--bc{bottom:0.8em;left:calc(50% - 0.5em)}.btn svg{display:block}.ui{pointer-events:none;color:#070d15}.ui,.ui__background,.ui__game,.ui__texts,.ui__prefs,.ui__theme,.ui__stats,.ui__buttons{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden}.ui__background{z-index:1;transition:background 500ms ease;background:#d1d5db}.ui__background:after{position:absolute;top:0;left:0;right:0;bottom:0;content:'';background-image:linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0) 100%)}.ui__game{pointer-events:all;z-index:2}.ui__game canvas{display:block;width:100%;height:100%}.ui__texts{z-index:3}.ui__prefs,.ui__stats,.ui__theme{display:flex;flex-flow:column nowrap;justify-content:center;align-items:center;overflow:hidden;z-index:4}.ui__theme{padding-top:15em}.ui__buttons{z-index:5} diff --git a/public/the-cube-master/assets/icons/android-chrome-192x192.png b/public/the-cube-master/assets/icons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..22359413b2245fdb148bf51ab4668ee5cb4b197f GIT binary patch literal 32491 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 KMNUMnLSTYUXETKW literal 0 HcmV?d00001 diff --git a/public/the-cube-master/assets/icons/android-chrome-512x512.png b/public/the-cube-master/assets/icons/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..4a19efb58bef5243f8c30c4579a133bb50e97159 GIT binary patch literal 103506 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

r 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 i1uHS*wtWZgRCR;4{;JG)aX|Ngnz9== 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�{st*SPdc0f`oq7vU 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

E(Fi(l^JzTrf6W(u@Cmm|c6R8SDs6pM4BFLz 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 + + + + + #da532c + + + diff --git a/public/the-cube-master/assets/icons/favicon-16x16.png b/public/the-cube-master/assets/icons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..a53b75e8ef2b1c3217b3c56bb4728c6f366ab0a3 GIT binary patch literal 1392 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 literal 0 HcmV?d00001 diff --git a/public/the-cube-master/assets/icons/favicon.ico b/public/the-cube-master/assets/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c6c73fee6e5c4646d5a846e50143d4010504ece GIT binary patch literal 15086 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 RM&Rjh6TXJ8<$L(v{{v;X`tAS# literal 0 HcmV?d00001 diff --git a/public/the-cube-master/assets/icons/meta-image.png b/public/the-cube-master/assets/icons/meta-image.png new file mode 100644 index 0000000000000000000000000000000000000000..f24eb2173c02422ede14a7d99d23be7bf4dd2cfe GIT binary patch literal 35486 zcmd422UL^Y(=Uo5MGyfYpduxpfOMoIMFL1sq!&SYmq6&f384s56brqJNbem2NbexM zgOo_`y__cjec$hYzkBYv=dN|v$y$(*XYbiFvuA$uoBcezRd^vqfOi)U0|SFVMp{A% z1LImA2F6uK+^fJhwX`ev7#R55=HlWC66SW+P<G1pE3XtbwV$haZyc|ZRWQ|@)VyvO7Elf;gPz&`Hd?u#0iu7QDPmix_ ztc9K0BrL`YZFk1-ed|1Yu@H5|JG$-`-nODD2Hv$>itc6@bUdtaVy?JE-dE-HuExHE z=7--QC&x;3kMknB=3UBXERT^h(&ql=T&|!06(>c-TVMWQIur6I?id&>-mIiD7`0R4 zlSU;HxSV2y1{JvUxcR;}7T^7%xzlyG`MYgg!@-k4eKsRwvS%MLF^q4{-H}|mhYV1{ z$@lgC0SLi1(B%zlyy7kE?`$h3mUN@?2{dZgHzD?XD{8lsA^6iaL0GON+Z;`eMr1b= z_Brff%NNfO{Tl&~r73fOge|Eq0t9Vw|7dV6G06C~h{y?e|>yWdcCJ#RRwwd6I zK5fJAS2osH8}cf9I-s7?2XNrZm&iv+%9;)Gp;0{#NfsYSylBXNID^&n90?_s`4vHb z&;(TsgobRKrr_W;Y>gY881gQ=v0P{8gkD7~1SzM~Y~8a`*cdt~_eq7@yi0<}JULO< ziDX~jw23?EdFyJBF`IlXDqFCj;?}Sp$;sR+HHqQ3)U-|t5`I6uStJ^ul9zwzTZBy#;w(Tauqwtp{V2T#!M+B{XwAz zZDGUjGMui4Q)}2bX#ai%5$kl`)f@ac#KLbwCHQKujd+JGJy|cOAvPFqn2{@h=;b_O;KR(a9$rfI(apQIrb1A#OlHZ07vq5Bo{ z#x$G7b?6%sYs|@7>VU3)_$NidjIijGy>y&53A$bh zd%-csUu|<_w8^7W?eg({X9&11dTl zun28vxb%I>4+O0Nq|XfA-%rKs6YR6PVHcRE|WBjPx|KBxFitdSqsqbpDHc$<2?m!i{{g zva(IG@v_RF4rK8^Eq&Z$ic?%tKT6EXfo9)Jk4<7x)yb(6KaAY6oaZCOYmA+hm-!~m z*#1!NBgsdckNYZj2SV?@m{%ZISpII=pV|L~36IHy>G`KSOb?ifnT}Q2zTf!HlpdXl zol&5&m^qk9rL?L_shILzAfqt@l+LO=_SI2sHA+xs;+3#QT#8Okjoc~xi0#0bAF_GKd7kmSFA++DiMcDMDe9rqGXsM(IWLG(iOO!Q&&K=d&; z?6qfq-;lv;o8r%}i_NqLT)zp+jOoT?YJZ=|@DM*vxhc+|!60w?^+jcuhxV%>O{a`C z=!9IwH~RqkUIrI=1Nn^DB3K`#uu8WkyACX8lD8V)mF@`pDCr1t>Ttxc6L5o@;Do@I zK#juw&W*c$H#`Uq{WA%|?uwY2aYVjze@gl5zTvQRH)DtN>!JZ?!wo&U_-$usKk)}nOTl+TIpy;ks8V&!+Yv}5dj z9l{E!*ycxJT=CbsF}kth1B6AL%Uxuu_FPU^EtlgKtJ{x9NP{1aKOFlew8gone+b?E zy={D8a%8o+y3Ms^c*t`gyu-J-c))igYOKj=7gZU>j(P8@#1$OONi0{aE_@*}IF=u_ zDz^3wHNqEoI@BjL4gB{RQU#3o`+4lGkog=C4Wr?_;6+G`rs%Frm7%-2 zyZlvFeUthec9#T>GZC9w|R^GWIlREV!#d z_j2YXMS=gwo0Z}f@_Sxgue)f50 zb$NUtk13^tv4}oE6nno4e`zh9$ksv<%fihVtL!XkMwdmj*SQs4Y%-X~sMOE+wBctX z{M^67ON(F&i@j3+_?FrLbvI&DLX=ARjt|_ z%f?TyvGbEBv(sSuz{h?eO;B})C6A%Q{F2vT$1A&%!LN?nnvKPM#U2id4wTE!hq5*H z&4pp7AxGXvg9NS=pRJrr-xqE!(Vxq)#_aN`Tb`BqA?61Md$KJF76^*R0>^?%gh%45 zsu$J6bYt#1P-NZ}T_;*Wj@?0Q8%4M&|75Gy9_TbHEON1SYFcY|^Vzd68ZLoa4nVU< z@%Lo+Mb25bOJj~{_Z`;vho@|7S8Dxzi+n#>N^9ASSwGIL&ZW!#)s_?}J`pz=hvQXx z?9r^B@?%$uJ5_oZD{43=l5R)i}PK~$~pGhyOpjd znmxrohkoQHAc*aLwRNV(l)7@c9$VR130KB>9S_7MKTdHXpQIbltjcvo?7f-v^%u=P zgRa^wKklRM_nOhK|4|t>9Ht{gCVIxLa0cH>-TOZCGtKlx_f10o8#X`8SBu^BRs=L7@%Vo!2Y71$=@q$CF=M^83=`Exx5#FsUiknjsg&wr_Jl zeAq+kgwU=ti6fQ$ktMsuFD>l*O?XXBa2Dcco}{(YPYMgKI9Fp%g8MKMwf&oAmkxxD zXFdJg5$2~9REYMLMgniSW{hykToUrD3YeyL{F$|OGWYJiJ;QKtJmaO8h+SRbUVHYP zl1lD%bJOG#ocqieBKx5sAthlU9#-(y$t%;tW1GkCp9f}R+_pR^b!+p&uy2xQFuiN| z3Frc@TT8#R1KI!*)Xx=+=-AsB7+7THDjN10a?b?~VU}$AMlb_oHfKv~U^E7Xkf^h@ zzM+M&J&l2}skxOf?Rq7Gmd4yjm{y%fjzi8`+}O-q+SS%r+4Y5rp{s?VfDx^z2#t`l zARxff*j}H;*%E4HC+I9pi8~Q+7@P0ReW7N9>Otu>vDl?Od$v^_^L*?CAbTkTAA0v^BT3 zH-}l#pd{)Wz#Qy_X#q_yOt7^6E7r>H(oKNF*q!yQ**V!bP$r=V8X5i_XYF7MMK5k- z$ZiZZwlub~w*$s<{v8W=NlxzX@c&k`c{U#mtlUNdT&xECj|^CO_)IwX1i1K&3{1HG%$I-}I-s`k&wQi*m-FRq z&4D!1hyL%&`MXVm;xH)8Rt{zacp1>|pYLUW4&N4LVh#l^Tz2}X7)QsNptQLiu%RxO zS)*)hbNLBsPJ<3FL48A11_;v{qPE`Hi1zYp^Z#wfU5IruGX{kIPom*sm>tZ--bvrq zSj-e~^8Z@Mu>%&cqZ0PQ8210P6MgMp$^Bo@mYnAhQ6<$6EWq9}VM zQ(sbHJaw^_OWwrf@s#yXqf_>JkDn$h#p`vIrCEL3+nHml!uAJ&O-)U)qI)yVCaZQ& zhIC8tMh<0p$LQR9lB8;cVBmF23=GsZ(%_umb~Cn7RiGMr<>Wi->%QhkzI|X0Lu}{7 ztLv?fvU?6xj3NmU%kjs>UMo#umsP@=P$qC!&Y zxnh#DPtEd`$2I1zIzaTr#xxUBd-gJ}Qjcx4Su}cZ`XRUWurETY2)S8V(?wkG*_@Di zK*L_`{)$S}a?4VAr|N29yt7~!wdY>>qWSsod56pQGWLZ&<8~J}ObiSNE^1-aZ*L+X zKp}zX-{?PS;s1R3zx&yn4>_^F52*D^UXTFH%{-WW{GpT&1A_*To!FQVaM~#V;Wz02 ziktMX*E3;iWAf4(+l@_zXJf0?2oh+X@)uvV9L-fbFjSFvgs#XGOgyBl)9ivFyeAAD?kwy`gIVAdR(FhG^$1-I^-8*>&%848#f z`pb`eae)C&kXxlTEgFKd9Ho~x5z1QhcF@34oAQ5gQe@DCmfC5CgG1MWaVF7)3xRpx z;5~hL(zr3DoQ^9EI>%J*XMW^f2uq4}`HS$t0Na-mEszh%RlVJ3__NlLBCfp9?(@ln zKh8!>3i7tKvSHS3@s6Q`;qM_wtC^~WB zJr5xKdeaZ9L@)CL-V+9K?rl7uJH7tL;2M&8HXN!7*UrU%jhaA@azE`X-E9u)R^#R2 z*<3&`4JcM$gxX>{sj${N2vM6ny9*zG16DvgMn4I{e^~O+)$<^WA^s`Kl>do-e@#It z{l_febI(=qiR$vwR$DZLR^#XImdR5x#F5~-#$Ufi5JiJl_a+mZSpMZ#$tW2 zFq|-ldF{s^e_KABIgA?H2!3jQu8~yN2&!kV(P)k#yVzQefRGs8FY1H02R`r)td@G7 zd%QWf_v~zSnsn3cCM2Kjhlb_#QhV-u{4DZXN$Z@N+q8`W@laN7gkoI;M8{nIOZhdY zjTyn+?=CSdu!=qBg>v%ehu_#Mm!gHeJZi1x>tfH>)>tzI9YxH5EZ8~UFz2HBeG+4Z zc&(lNvzYBR=j+9;I03Jfj^>2Eb3i;R6RmdG!Ndtxuyf^Q#sCgN=LPB=WiaZ6_7(7s z_6hKg#u3zo|9=MPJsR^os9QLg30PGVdQa_j(wZeT+~03xdc8q(agMyCY@IAX$i}NC zFAaX6w`Dv>RvHh$h_3-wBjC4u^5O$>1yQpj2kCjs3Bge zEN=#6x4e7ewJ^Mqw|{QAe|4zl?BJI?;E_2_hC}1bo_vN_AlQh&b1E%<52)!Bx8kzDZ4kopRWC(MU;v(^?OH2kZDl@iVh-I+*i( zF@$OnpS^20FRJLq;Mwj;FfVl2?3`g}j2+rFd~~{h0+dMrF%xOjvUThR6Z}7^4>}wA z9JF*ahtyn!)l@f>1gH+iSUM!;Yo=Y0Y^2Cn>Wd zIXG;~%(WRt0f8BxKtl`1O-eDCLvo@K5Rm<3 zvwSJ~x@Y9YmE;ks8F_Vge^g0D0Rw5oaa!j_>osDaRK<}oBzW@vk*L63GgiUV=SdA{ zD}fsf8l2F^2G8*cp_LU#rxxuMy|6^DpTbLPtNv18WUW5|#Xj!pTVMrTed3hn^&{ZJ zg^7~2ux&|{@p?c!wnvr7CFunnGv+(dQ&*DmeWx??9wunN6)T{kzUyzRk~ti8f!r1%X6@U{^{HmOobMQHOQ9 z_61yMZnEOmqyNWG-X14Fn4;^Py|l`}n%^H64NC=d;hN=L% zuN((>&TCG)Oyk{Vwu>#cJ+lFSC?s#gD!}lPYKJRm981t;@mHF=v&(x`(hXGLyjGd;x z`P=hj9Pco|VxebE*?i6@3idX}s=Tv8N_EU!mwB=p5Qlv#K8g~e zg3}jrkSlYJ3TQ&ynGn9IrD1XugF;cjdrWZoPS2Y_S_#v@y%0uO4q>nB>al@YC@!{< zNF=gfAB>8(E8u(1TSUuNKP-AH$uB3PBa}r2*J*A1VNqvtz)p924g?U2f(Ue~QZm6K zU@-<0;z!dz!Y;KzF;QX&1Ktc^q%Th#i>pw;{)*v5`QVAD^oq9YhRv0ljV=K^d;C>7|sjN3&$_72ZaT!yEz+&DhH4{aCKp1A@pV%s3OYIx5t2r?E(7)JQdKBrs;-Qfz)=IzI5T)j|qf^zp4gXZbl?h^j-!skKN>;y8{bzSdmQvK>{Yo{AJtFVw_E;~>wJ>I zK`pCJla`B>Lz(O=1B1CGSZLp)9Rcr|BLWE&NlgfN37i9zquayftSj#EU#LapLdeO0m_bJsYLe*F1Z~M{Haj^6<}up@&%nXfq=oD?*KL({GU?+jx^`T(-{7*kklrl6r^s!XAY}ek7>%a z`Iq|7pyNeRxC+A*cEo@7PN_gf^YNRp+V3L?5oFA(VfFa;eGjBYSGOs zQG(_Ec^dWDr$`yF5#~j)LHl9h&J^%~zyW@xVRQGdTtt3VK~qV9$FI&(TDWD#7;wHY z7x&m{>)$~cOb@?B0;_5ShRqKQ2^{)?G925pois>+oZ135QP*pG_1xo_6;XW!m8=($ zP7E0y9zIw;CCp#c54$Ja)XJXq8>W5H2%rN_3O`A27>jPzWq9#s^~F4tdw?*p4<{Ne zdA-xm)g|^{lK4J6tjoPVKEPw^w<+BP)}RgpXyG?+)dOXk3=n&nYO3P6AoP_>IGdIN z-?Nhx{*SMO&QgC8LE<*s)sogrExDH8!-mUROQb>pi6=Ujsi6`$`r;VH2yv6TG)|V5 zO@z0A(~0Y73(&?SMnV`34kS|mL7e7WmcaF+O%h^ArXO%R0BCus09(p3F``h}Rzhee zT?@u)SV-i*f3jQQpi6d^r=Fv!edl)|ktQp=R4ytASRD2s^ECH^Y6a1gMN-RvS02!W?$5H z2KH>iW&gBW*YJC(A;-~DWSBKTEKca*nM3ZLwO}b4c-OnrnuW zl@MLu9!ZXnFTyp3H-dVHUY{Q2ZdAwS>*@Py!Sga4a{)5F9SqoKP+gC!Pvx6W#s1*Pqp8nc0b71g7-4>+gn~vuQWM+|Xb^dTZV!D&4r$QlPO@wn#1Rv2Pt{_dWzKlz~9iD}ofKZGeNI#k=8U#!aYq(Mk0vwHuS z6_QLTuyXh?pkKqrcxxqiDLJ-Nduch+w8M`l0fPM*u#+^N_b2GNe@uX z96FGTcW4T>(|wAY9V%ra(uE%kP!}Lc^h7L%JQa0b`VuY85PpmEi!y4s5^zty?U)GM z9|%xnU9ajlf0es+#ob?_&TU{-0APK-2HpmaQ%R;g0g}AfyZxsE-CmIQq6`I02=fx@Ui@sUl5j=z?0^JV zbLS36;9vdeqobo=+;yjiL`DEiB_)g!IVR)y1(R^1=#av0$_-cFvEP1WYotx}@7jC$ zKw}97aQP}-L;IJ(Xu}M__E*;m&dHs~oMgOwqt}Fylmz*1}d_q7$ zz?`=2JBud+FlI@)b%I&ek=|t50_$FbKR)nI-t2N)cUtbH0C%+V3{7lg4i0!mY7tiI zrIsIKZ;~~dfuP4bT-|@oB#lZ-OY@RDa%$Jh{z4zfH_kn>L%uYzFT$UCtVk8F>V$Nk zj{UOm^2nreXUir%F|Y>c7YCMjs`5-4x6h+~z--aUgg1*i$`CR&b1@F#qYp$iJVEN_ zKz9k$wFmu6TXj#vv zy{0_fx=(+4Id#}rCD7Cy?%i6}c>sQas;0m}3oL!QrPpvU_q;8hZy1Qbz3d`5K>lYM z&-0L9_qOpXwOp*n2t_x>DA0_9>t*?Chtq?%h{CkA* z7_f-2*5 zY;={X=HH)Jt1FpQ`?z3y6*X*y8Y;dh8sSgpThKi zFr$uOzJ3X-)N4pD>=uUgJT$#GaSjJM1cx)ZQt5!M#tH#Bxn?$?KjO39i6o%lC0lMh z1aQ}?%-j~JX>pFCN=ci^Pt=EFcUCIXzztb1+r0#wySKRXxz2nVElqVq^@+y*;YFgo9XGxTH2G2k%v zXl^VGS7vxW@kdaf+UoFOqO$+VCW_l{Rrvv&2%-oa2%?G}<5exh`Pq*!5f|Wi^33Bn z4mdczW8ZcsU@sluREa^>0avqg9aJlC#u1|GVJL!6GT`au-O$Cy+U6Q&9zyLxeEI_(7Nz%2r_L2EMgon`{i z2(8UYrjOa5Icy4bP4xJd9Ct)l=e}OvHK~>1HS@(w_PacUJ$6rM_E$AK zXio@JOVc0i+_QbQ5>DG$!f9 zKc?^ok`?%nUby55*6BSc%cU&}Vrt=l-%xJ!Mk|V5z3dqlMNHn`1ve51l70R)r9Sqr zo_fATcz~tofFdeHL>8PZms;~a4rP8NoUl)EA$Xb;R5hQ1NPbr)!4njFyZ}q(!9tEjl7!jEy?lA!qYwj)Lp?aQe7gNACpsZpHj!jFtJ!8@s zEYQ3L(fG(;G4)mnbf0wvF-28LrrmlBJPCv{Auoul=|-rF-Ycw>-i(TxGwhu#T*&ab z#P@5qtW{RS7?WQwcEr2&U8SSXMo8+lCR&!p!1rHrv}>@%3t4MkmYPrEvs3p~v+W(J zo0`q^Hs5@em-pt+Z56%G1Ul5ZG|}NtTyVj!_Ue>o;A6a2je}XCpQv+*co|9RH5w>N zY#3O~70dOAUtDf#q=D~z1}~!%gqS}`nD^kDU4W@7xR;5A{Kf5t>zAJNv9vyEKrR#& z?djbYeiUcjUeOsD1Ijn~&E!DwTp+3cK8po7HqT(Zn8X?2d}yDzd@%N%DHwe3oX$V9 zbe{7HVLL$>gOHl(2r6zLs>+`(R$pN4di5}a4XzZCmver-D&TT0ca1zVo0X@Jz=y0x z$=Jh!$!UI4_Xf^;?}XtqNZ`w}W$ zpW-+&{DfTzrAzR7A?*~tZy&cAUDw};WXpEuy0oe(a;yKoKIuzJ$f@S-t{#Y5xMsGG zEJWjFU-E3T{9-$ErFHMD(S`^P8WL*5xKE3e8&Du)Hd@1VH$-mMOJV5Td4$rqzbp0$ zezuaBwuOY2i9|a0o$Fv0ODe>WS<&oRG1JY9G&TxvK}jHs;Dh$PN*-f zjXMyhU}u=r1G$m6vFek-8!70LY&)(>LRK@Lxcpwv|8lY#)~>Uj8cXC)g&|n@-uE3S z3(MNw-shlqr8t>Q+72Efgx3MgK|>el`Oo@t0;&DSiiPqmcuEZ4r^}Y*oZ$d?6=I^R zop&w(Q1*3>b!B+|&y~e0fXqkXNSO|nTyY&Y>q>$${)mRzFUPviHlTNt_nU$OLIA)- z<^A*{iXsi@QnMU)it6nlNCK3_{^+hE3Z+o^rJ~@K=hIJqfm0~3QxM}Nb9Jet$p-QT z_4jy&&zKXLy4$b@^8G3rUr`CiRw&lYNJN1zT=taouMI|q;QuNIU`B~aC@evpZF_gC z_LPM9h4w+hVB|(v4=wadDP?+fdF|IgVGb%dC8*l zwev0Q(k#{PLGb<+KFfskUG-@k)nGKAiT;`i z@3+)A{nP_FHDOfQsOFmlZ4M^$Y0w2-dR^}gfT@Ep7Wb7T1~?JD_#<%w!jqkp`44!q zHj{^5QvWie)QUx@VBaR?sjkTK3`2zG!C}F`$Y$>c!g(hC6CXvF?=)jrBN`V@#9%_^ zh4_8ABdeJXhSy^fu8*jH!7I@23Hsw@XEm(+Is+KX^T-)*#T2&gKw>(!&fVO+ryo(} z1{E@MroPX2;_~zJyr29_iG3Igw>TEyOH{qOhyy+ti%}&FP)T3n#!#uVVsLjE&-pEtbddty$|@T@_ zyA#L6xQorObwoa+S5TY*@ZFPMXUEgH03A|wG4lahu3dw;m+Vfw9?a4M z>klHT4fBL7L(;1NF}-jFwav5R)%=4xi^Gs>7j(7xj-h-+@S9ZXj{aae_^JH!-5n!2 zAvso+$Ck9ua7je7QzebJ2qQ$xfx4t~PHTDZ)2D}OiOXG&t%jlxPhMX|14WiG0P&-H z<6Om^&le~xzU1l`SlMNrI5&bPmW|lH+$t|1JK`f_$|nC*X}l%%^}L9fj(wuY5mPmf z3n*T{KU2U|^Y%3|t?QDpJ*9vrasYf79GTwT#D4!lkL6hJyLG)KMd>4p(oXEf>J3{6 zF6c&5k&EA2h~ID7D5bi#19^p`WeBchuMH%IIi3j8n1QvN8&wMfA_0h*S|th ziD@`*LuD>ot1afCFyxo3LSJ%0s!;lHuUwqqaE4|+ALEE#5t8YVOM~L6snAB?jwA*s zzZqNdk>Z?t~`F#*N9`rH@LKAKy^kv!zNUffKu!mGU{mgb(h1i!{TzW}N zCOGKBaHrm*FCI+se2fUMcSgRfnV=V?Urz007*6!J_f?u-Q+(usf2yc_3%g={5!$uf zWNeyQ)7VTnBa}8OUP(9!9y`B}J}q-x`zh``#Jo*rF{&3$BR3Reoc6=G z!~zY8s!dVX^5fur{1z(TeM**Cl7=VR6HBYG>b*FoTZ#hp3wE2I;= zppR4PPY3TC4KSj2N#VA`seE{xWR7!Xw{kxRu;)ERV zWJ_`tknfz#yt-VZsOkIn$$TwAIk~f>6W5s{5AbN1&ei2O_MA&n{Ln@^>tNwWR>;&{9wZiyiZe$c``3R(VjyJ&F@8*^*6zD73C#au9JfM~VCD<-c&=>iT1WQUb z;73`Fx2ELP5IbZ#9&=D2KRn7m{QTATH!QyHu1t^pqY<$^Y#nut_ng^${Wi-v(N zsk&M_JUPWDiw5h@67Ik^A%5wox`L`kOp)Kfb6!E!0lZ{KkQ;N7`=?EiXD5j9muKBT zB|@o>A|w}*%`W6NDgjkKU@Q@)9==eho%ad91YgM>-A0Jty>3t(g@e|)s;>9&&yCYV_sST2Q4er^`O^*aCL^eYRwJ*;;- zy^`_haW3n7CXxBU%FbP{pe}$MUAVClpf@$p-O+gq2`E5asKkk6X=YK(1zdhbn0Ck# z*gHUFR1r>3?5=#e8REx9?Fq5PEC(|_Rl5Fx6W}5mZz%Z4f|9#k4`hTLz9CUPBMSE& zLF1tWqZN?~4ezVNA}Hz?+to}1UR~eOyfTL6p<%CrYOR5BG+q=&XQl;UiFbE>aC!K8 zlCD9??W4%(mvc0B+|pif6(Z*+MU_4PL-Hli%zG^K9bjDjJ84o)qgA#H4Z-7fFkP~cyx1BSP zQJ`G5ugET&dZ00u6UDpmLu{r`fKDDCuf~1hGM(XQ5%Hc$)$|4I3}M=a#Pk=pAEo)F zfrO=dgXiHeLIR263#KmheL9ctCK)ed+PjY7puz;}7rxxe-Obmv%!A*2#(SD#Y*sgp zEvrzKjPpw~-Odm!>EsePgqZTQOx7&hkj)W6`Si)Ai^)XX2fWWuO~2ym+sw8$n=qKJ z9#uRY-H%n#Vv97#QtGwwHJDJ9)*&^V!kT-zqgQ~G?{@usi&P31crvGSiVF5hz0{)9 zolP7q&qm{HVk|(X$jNq=v6DV32lNcLy|2{ycMl}w_&HO#*k{oF;7}s6O(e04!*e#* zat!a9%>7JG31*2V3UV#(ILTx8+<2WM zi&DtVlwNa3qWcLFZn7{mEyW~-wi#IFa^F%SKdDLOP&+CqeZN16%*C9iWb zzCF7)kKO+chiat6hS@K#99cT?P2@fPCwBG!;{yLZ#pHvTu*|`6a?v5Rw1ubs2piQaK92hp3nP=jbq+H9Pv{EI4FoSu$JBz9C+vn{cb7)C5#LrGoccQ1Y>_~MPw@N(1k9sgD4q_ zvXQh!!E7GH;i@~Y3xncMXfYUy3X#8cPg9446?d?L0Y-#M19}RT8g2c)>wI4M@1tTR zH&>5X*J~>7XUcsPko#B(u&l(BG#V!2wp+eTyU9`oan`Fr-QQnuLOEi~P54Vr|F>fdF ziL3KI!^ujD{7~+z=I6aT8kO#y6!ZK8^9uW{+kHl~WB0BzDZ!b(X=FXKsr>|BhGLBJDX z%jG6lP;fv`7emJ+M^b1K1e|B+;wDAX%W_FBIMTl$`r4xJ`x_Ez?b|kY_@+%U9*iv} zE*T~`v(x-RQi||7`;qRMYf}8!kJOvVL?D=szHM*e5?ibSli(CqWZ5;Em-}N3Q|5Wd zUV88l3)-X4$yhX5Do6B=qD-Q>8l_Byx}NviGv5}3!UOM-G&IoXzcV*z%HMj~-1)U3 zk!4Smt=-XgrQ#cTHNfgxD^mPSUcOOrN|6kkQj&gs^c7Ssn}Yo62LdcBr`{Xqjby5* zlHq^DOpYo{dUpZt)e=pY24jX0#+qXNF1;-SyY<@dK6ag%sm!Vt2IUmiEB8%f7d{nYHLtqd@WAxPzf>b$Q8@|92 z5)fR$w3p64BuINlVQD9D0VEilv&HJ2zkXF>B0_TUN4#z?;c72KLh?6w-Urnbbo!aI zX!H|_`oGvEeO&SMMUl_DN-5d>PcjvCWi~_1Pqn8=3=9;a4#;RyJ>h_c{CfJ<&p@2v z6VIhdwKaJ(hny0h_WnBm)$zD(L*J=CpjxvzKv>6qjRy}EL6P)u*=9nx-0!I44W+CF4lAL}KAe=Xy>0JV2|C5JerWcOkvMp4h! zx<^5f$l|0$nde1paLj*?*}V?dPN9X7_X{b~Fn-iKiIM#v98R&nJNf^g( zBsrAgb4QYz&uX?ec`f@OuQDGAD1>q#FC8_%GCdq@=-LyMqqxZsC;(8p8~Rp1dQV>z zK?u!=AD19EEA~Zuv(~R3u~O)unwAAsIXJuQ=vVoaWf3QE;DKXBe&dFS=-Qjsvfa0}#rxNe z2vJYs16(n}FV9qR0BOBDdh@$5Pf?&;jZ4-W zx(BzI_~+`)g!VM2ll;qYCi&?yd%n|Xj!j-l(a}^-OZ5<(O&pS$NUCgN>YONK61q~qi;rR&d1|;{hlfSJ z`VmmR4*MQtWS&I5{&+SYbuKrd$4f@$5|VBO`Zycpb#wLz4YiTA7R|*!$sls9JHPOh z2w~**^}VE4-z!Ti>&U#wiEP@N>SxoZQv>WqX#ju(0(qDfuH-(%8Jq7@)IXc@@ZNwh z$1u%S8b~7*=S9svi{!q3@bCvKYZoyK39i{P=JUD>#W=2<@ zdUMA#R6UdRhNH(sb!C1}Jl%sWwK^l~i*Ur7ZywU&WP*#l5?dNu^${6@Oj(iJw=~r! z_fJHPVGS6ZEwPsep)<3QxPAqc8s85o!50L$ILgjZ$5i+vA@G>6$0OA|&)2W8sGYwP zQJ@~d0blc;#ZMY-s(%#BM>fhKXH=Oey6c^MTqwCxME3yjAgbKSLCo5FNlTWls7;Ft zhm&isNBugoqE!MQCv0gAIHFwBqzeKFDBzHrAV@b9;OvRzu6kLLE5#M+hlOiaKxZ`f zSJ)?r*;X%U`A+S)dGc3)?wVooLRq-KO1{I>Bz+~Bh^O!~^JH!w_w^7bNtTxfq*L>(f{5_+XZipPf1|1XhHwj8Mc~)q#Q#eB%T<9N*r&7A#qV z;O-tG9uEdy=6kSTPgjUvLDa1G$`h>W92}rtR#aLV>etOQ{M{{jC>bi6Aov7Sa>OOh z(Ll@K1Y;?x!%MHkvLL9GoNBR7%ZnXx8Qs>IM6&wby`+BKH%HizJ_IIy zLzJMMh9(Fzg>U0H8|oinfMB5_g?Lcl<0sHB#j+S+Q9VXk2nx;_r^#4;99~hGx<>VP z=p-q`f{$!zmGVv`B_6Zh(b_vu>d|tSqgYtZy{^hND}JS`7ntFGAO2cO`D3ŽRl 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
bjy|v6@wZ?b88~Ug@BEFvct7{C?l{A9?o{Z) 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 literal 0 HcmV?d00001 diff --git a/public/the-cube-master/assets/icons/safari-pinned-tab.svg b/public/the-cube-master/assets/icons/safari-pinned-tab.svg new file mode 100644 index 0000000..741ec36 --- /dev/null +++ b/public/the-cube-master/assets/icons/safari-pinned-tab.svg @@ -0,0 +1,39 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/public/the-cube-master/assets/icons/site.webmanifest b/public/the-cube-master/assets/icons/site.webmanifest new file mode 100644 index 0000000..d2abefd --- /dev/null +++ b/public/the-cube-master/assets/icons/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "The Cube", + "short_name": "The Cube", + "icons": [ + { + "src": "android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/public/the-cube-master/assets/icons/twitter-card.png b/public/the-cube-master/assets/icons/twitter-card.png new file mode 100644 index 0000000000000000000000000000000000000000..c2bead04a80f96b51db7c6ed548eb04ce1099b0e GIT binary patch literal 72428 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.push([]),L.push([]);for(var r=i/2,l=new THREE.Vector3(b,f,z),c=0;c<=o;c++){var m=c/o,d=m*r,g=e(d),p=n(d);if(c==o){M.set(0,1,0);var h=M.clone().multiplyScalar(t).add(l);C[0].push(h),A.push(h);var v=M.clone();L[0].push(v),E.push(v);continue}for(var S=0;S<=o;S++){var w=S/o,u=w*r;M.x=g*e(u),M.y=p,M.z=g*n(u);var h=M.clone().multiplyScalar(t).add(l);C[0].push(h),A.push(h);var v=M.clone().normalize();L[0].push(v),E.push(v)}}for(var T=1;8>T;T++)for(var h,s=0;sr;r++){e=_*r;for(var n=0;ne;e++)for(var t=e*_,s=4*_+t,r=!0&e,n=0;ns;s++)for(var r=_*e[s],n=_*t[s],l=1>=s,m=0;mn;n++)for(var l=t[n]*_,m=s[n]*_,g=0;g<=e;g++){var p=l+o+g*x,a=l+(g==e?_-1:o+(g+1)*x),h=m+o+g*x,c=m+(g==e?_-1:o+(g+1)*x);r[n]?(P.push(p),P.push(h),P.push(a),P.push(a),P.push(h),P.push(c)):(P.push(p),P.push(a),P.push(h),P.push(a),P.push(c),P.push(h))}}THREE.BufferGeometry.call(this),this.type='RoundedBoxGeometry',o=isNaN(o)?1:c(1,d(o));var p,h,y;p=h=y=e,t=e*t,t=l(t,l(p,l(h,l(y)))/2);var b=p/2-t,f=h/2-t,z=y/2-t;this.parameters={width:p,height:h,depth:y,radius:t,radiusSegments:o};var x=o+1,v=x*o+1<<3,S=new THREE.BufferAttribute(new Float32Array(3*v),3),w=new THREE.BufferAttribute(new Float32Array(3*v),3),C=[],L=[],T=new THREE.Vector3,M=new THREE.Vector3,A=[],E=[],P=[],D=x*o,_=x*o+1;a(),r(),s(),m(),g(),u();for(var k=0,V=0;V{let e=0;return new class{constructor(){this.ids=[],this.animations={},this.update=this.update.bind(this),this.raf=0,this.time=0}update(){const e=performance.now(),t=e-this.time;this.time=e;let a=this.ids.length;for(this.raf=a?requestAnimationFrame(this.update):0;a--;)this.animations[this.ids[a]]&&this.animations[this.ids[a]].update(t)}add(t){t.id=e++,this.ids.push(t.id),this.animations[t.id]=t;0!==this.raf||(this.time=performance.now(),this.raf=requestAnimationFrame(this.update))}remove(e){const t=this.ids.indexOf(e.id);0>t||(this.ids.splice(t,1),delete this.animations[e.id],e=null)}}})();class g{constructor(e){!0===e&&this.start()}start(){u.add(this)}stop(){u.remove(this)}update(){}}class p extends g{constructor(e){super(!0),this.game=e,this.container=this.game.dom.game,this.scene=new THREE.Scene,this.renderer=new THREE.WebGLRenderer({antialias:!0,alpha:!0}),this.renderer.setPixelRatio(window.devicePixelRatio),this.container.appendChild(this.renderer.domElement),this.camera=new THREE.PerspectiveCamera(2,1,.1,1e4),this.stage={width:2,height:3},this.fov=10,this.createLights(),this.onResize=[],this.resize(),window.addEventListener('resize',()=>this.resize(),!1)}update(){this.renderer.render(this.scene,this.camera)}resize(){this.width=this.container.offsetWidth,this.height=this.container.offsetHeight,this.renderer.setSize(this.width,this.height),this.camera.fov=this.fov,this.camera.aspect=this.width/this.height;const e=this.stage.width/this.stage.height,t=this.fov*THREE.Math.DEG2RAD;let a=ee())}createLights(){this.lights={holder:new THREE.Object3D,ambient:new THREE.AmbientLight(16777215,.69),front:new THREE.DirectionalLight(16777215,.36),back:new THREE.DirectionalLight(16777215,.19)},this.lights.front.position.set(1.5,5,3),this.lights.back.position.set(-1.5,-5,-3),this.lights.holder.add(this.lights.ambient),this.lights.holder.add(this.lights.front),this.lights.holder.add(this.lights.back),this.scene.add(this.lights.holder)}}e.prototype=Object.create(THREE.BufferGeometry.prototype),e.constructor=e;class h{constructor(e){this.game=e,this.size=3,this.geometry={pieceCornerRadius:.12,edgeCornerRoundness:.15,edgeScale:.82,edgeDepth:.01},this.holder=new THREE.Object3D,this.object=new THREE.Object3D,this.animator=new THREE.Object3D,this.holder.add(this.animator),this.animator.add(this.object),this.game.world.scene.add(this.holder)}init(){this.cubes=[],this.object.children=[],this.object.add(this.game.controls.group),2===this.size?this.scale=1.25:3===this.size?this.scale=1:3{this.cubes.push(e.userData.cube),this.object.add(e)}),this.holder.traverse(e=>{e.frustumCulled&&(e.frustumCulled=!1)}),this.updateColors(this.game.themes.getColors()),this.sizeGenerated=this.size}resize(e=!1){(this.size!==this.sizeGenerated||e)&&(this.size=this.game.preferences.ranges.size.value,this.reset(),this.init(),this.game.saved=!1,this.game.timer.reset(),this.game.storage.clearGame())}reset(){this.game.controls.edges.rotation.set(0,0,0),this.holder.rotation.set(0,0,0),this.object.rotation.set(0,0,0),this.animator.rotation.set(0,0,0)}generatePositions(){const e=this.size-1,t=0==this.size%2?.5-this.size/2:0-d(this.size/2);let a,o,s;for(this.positions=[],a=0;a{const n=new THREE.Object3D,l=s.clone(),c=[];n.position.copy(e.clone().divideScalar(3)),n.add(l),n.name=t,n.edgesName='',e.edges.forEach(e=>{const t=new THREE.Mesh(r,o.clone()),s=['L','R','D','U','B','F'][e],l=a/2;t.position.set(l*[-1,1,0,0,0,0][e],l*[0,0,-1,1,0,0][e],l*[0,0,0,0,-1,1][e]),t.rotation.set(i/2*[0,0,1,-1,0,0][e],i/2*[-1,1,0,0,2,0][e],0),t.scale.set(this.geometry.edgeScale,this.geometry.edgeScale,this.geometry.edgeScale),t.name=s,n.add(t),c.push(s),this.edges.push(t)}),n.userData.edges=c,n.userData.cube=l,n.userData.start={position:n.position.clone(),rotation:n.rotation.clone()},this.pieces.push(n)})}updateColors(e){'object'!=typeof this.pieces&&'object'!=typeof this.edges||(this.pieces.forEach(t=>t.userData.cube.material.color.setHex(e.P)),this.edges.forEach(t=>t.material.color.setHex(e[t.name])))}loadFromData(e){this.size=e.size,this.reset(),this.init(),this.pieces.forEach(t=>{const a=e.names.indexOf(t.name),o=e.positions[a],s=e.rotations[a];t.position.set(o.x,o.y,o.z),t.rotation.set(s.x,s.y,s.z)})}}const y={Power:{In:e=>(e=r(e||1),a=>s(a,e)),Out:e=>(e=r(e||1),a=>1-o(s(a-1,e))),InOut:e=>(e=r(e||1),a=>.5>a?s(2*a,e)/2:(1-o(s(2*a-1-1,e)))/2+.5)},Sine:{In:()=>e=>1+n(i/2*e-i/2),Out:()=>e=>n(i/2*e),InOut:()=>e=>(1+n(i*e-i/2))/2},Back:{Out:e=>(e=e||1.70158,a=>(a-=1)*a*((e+1)*a+e)+1),In:e=>(e=e||1.70158,a=>a*a*((e+1)*a-e))},Elastic:{Out:(e,t)=>{let a=2*i,o=1<=e?e:1,r=(t||.3)/(1>e?e:1),l=r/a*(Math.asin(1/o)||0);return r=a/r,e=>o*s(2,-10*e)*n((e-l)*r)+1}}};class b extends g{constructor(e){super(!1),this.duration=e.duration||500,this.easing=e.easing||(e=>e),this.onUpdate=e.onUpdate||(()=>{}),this.onComplete=e.onComplete||(()=>{}),this.delay=e.delay||!1,this.yoyo=!e.yoyo&&null,this.progress=0,this.value=0,this.delta=0,this.getFromTo(e),this.delay?setTimeout(()=>super.start(),this.delay):super.start(),this.onUpdate(this)}update(e){const t=1*this.value,a=!0===this.yoyo?-1:1;this.progress+=e/this.duration*a,this.value=this.easing(this.progress),this.delta=this.value-t,null!==this.values&&this.updateFromTo(),null===this.yoyo?1>=this.progress?this.onUpdate(this):(this.progress=1,this.value=1,this.onUpdate(this),this.onComplete(this),super.stop()):this.updateYoyo()}updateYoyo(){(1this.progress)&&(this.value=this.progress=1{this.target[e]=this.from[e]+(this.to[e]-this.from[e])*this.value})}getFromTo(e){return e.target&&e.to?void(this.target=e.target||null,this.from=e.from||{},this.to=e.to||null,this.values=[],1>Object.keys(this.from).length&&Object.keys(this.to).forEach(e=>{this.from[e]=this.target[e]}),Object.keys(this.to).forEach(e=>{this.values.push(e)})):void(this.values=null)}}window.addEventListener('touchmove',()=>{}),document.addEventListener('touchmove',e=>{e.preventDefault()},{passive:!1});class v{constructor(e,t){return this.position={current:new THREE.Vector2,start:new THREE.Vector2,delta:new THREE.Vector2,old:new THREE.Vector2,drag:new THREE.Vector2},this.options=Object.assign({calcDelta:!1},t||{}),this.element=e,this.touch=null,this.drag={start:e=>{'mousedown'==e.type&&1!=e.which||'touchstart'==e.type&&1{this.options.calcDelta&&(this.position.old=this.position.current.clone()),this.getPositionCurrent(e),this.options.calcDelta&&(this.position.delta=this.position.current.clone().sub(this.position.old),this.position.drag=this.position.current.clone().sub(this.position.start)),this.onDragMove(this.position)},end:e=>{this.getPositionCurrent(e),this.onDragEnd(this.position),window.removeEventListener(this.touch?'touchmove':'mousemove',this.drag.move,!1),window.removeEventListener(this.touch?'touchend':'mouseup',this.drag.end,!1)}},this.onDragStart=()=>{},this.onDragMove=()=>{},this.onDragEnd=()=>{},this.enable(),this}enable(){return this.element.addEventListener('touchstart',this.drag.start,!1),this.element.addEventListener('mousedown',this.drag.start,!1),this}disable(){return this.element.removeEventListener('touchstart',this.drag.start,!1),this.element.removeEventListener('mousedown',this.drag.start,!1),this}getPositionCurrent(e){const t=e.touches?e.touches[0]||e.changedTouches[0]:e;this.position.current.set(t.pageX,t.pageY)}convertPosition(e){return e.x=2*(e.x/this.element.offsetWidth)-1,e.y=-(2*(e.y/this.element.offsetHeight)-1),e}}const f=0;class x{constructor(e){this.game=e,this.flipConfig=0,this.flipEasings=[y.Power.Out(3),y.Sine.Out(),y.Back.Out(1.5)],this.flipSpeeds=[125,200,300],this.raycaster=new THREE.Raycaster;const t=new THREE.MeshBasicMaterial({depthWrite:!1,transparent:!0,opacity:0,color:13311});this.group=new THREE.Object3D,this.group.name='controls',this.game.cube.object.add(this.group),this.helper=new THREE.Mesh(new THREE.PlaneBufferGeometry(200,200),t.clone()),this.helper.rotation.set(0,i/4,0),this.game.world.scene.add(this.helper),this.edges=new THREE.Mesh(new THREE.BoxBufferGeometry(1,1,1),t.clone()),this.game.world.scene.add(this.edges),this.onSolved=()=>{},this.onMove=()=>{},this.momentum=[],this.scramble=null,this.state=f,this.enabled=!1,this.initDraggable()}enable(){this.draggable.enable(),this.enabled=!0}disable(){this.draggable.disable(),this.enabled=!1}initDraggable(){this.draggable=new v(this.game.dom.game),this.draggable.onDragStart=e=>{if(null===this.scramble&&1!==this.state&&2!==this.state){this.gettingDrag=3===this.state;const t=this.getIntersect(e.current,this.edges,!1);!1!==t&&(this.dragIntersect=this.getIntersect(e.current,this.game.cube.cubes,!0)),!1!==t&&!1!==this.dragIntersect?(this.dragNormal=t.face.normal.round(),this.flipType='layer',this.attach(this.helper,this.edges),this.helper.rotation.set(0,0,0),this.helper.position.set(0,0,0),this.helper.lookAt(this.dragNormal),this.helper.translateZ(.5),this.helper.updateMatrixWorld(),this.detach(this.helper,this.edges)):(this.dragNormal=new THREE.Vector3(0,0,1),this.flipType='cube',this.helper.position.set(0,0,0),this.helper.rotation.set(0,i/4,0),this.helper.updateMatrixWorld());let a=this.getIntersect(e.current,this.helper,!1);!1===a||(this.dragCurrent=this.helper.worldToLocal(a.point),this.dragTotal=new THREE.Vector3,this.state=this.state===f?1:this.state)}},this.draggable.onDragMove=e=>{if(null===this.scramble&&this.state!==f&&(3!==this.state||!1!==this.gettingDrag)){const t=this.getIntersect(e.current,this.helper,!1);if(!1!==t){const a=this.helper.worldToLocal(t.point.clone());if(this.dragDelta=a.clone().sub(this.dragCurrent).setZ(0),this.dragTotal.add(this.dragDelta),this.dragCurrent=a,this.addMomentumPoint(this.dragDelta),1===this.state&&.05this.game.world.width/2?'z':'x';this.flipAxis=new THREE.Vector3,this.flipAxis[t]=1*('x'==t?-1:1)}this.flipAngle=0,this.state=2}else if(2===this.state){const e=this.dragDelta[this.dragDirection];'layer'===this.flipType?(this.group.rotateOnAxis(this.flipAxis,e),this.flipAngle+=e):(this.edges.rotateOnWorldAxis(this.flipAxis,e),this.game.cube.object.rotation.copy(this.edges.rotation),this.flipAngle+=e)}}}},this.draggable.onDragEnd=()=>{if(null===this.scramble){if(2!==this.state)return this.gettingDrag=!1,void(this.state=f);this.state=3;const e=this.getMomentum()[this.dragDirection],t=.05{this.game.storage.saveGame(),this.state=this.gettingDrag?1:f,this.gettingDrag=!1,this.checkIsSolved()}):this.rotateCube(r,()=>{this.state=this.gettingDrag?1:f,this.gettingDrag=!1})}}}rotateLayer(e,t,a){const o=t?0:this.flipConfig,s=this.flipEasings[o],r=this.flipSpeeds[o],n=2==o?this.bounceCube():()=>{};this.rotationTween=new b({easing:s,duration:r,onUpdate:t=>{let a=t.delta*e;this.group.rotateOnAxis(this.flipAxis,a),n(t.value,a,e)},onComplete:()=>{t||this.onMove();const e=this.flipLayer.slice(0);this.game.cube.object.rotation.setFromVector3(this.snapRotation(this.game.cube.object.rotation.toVector3())),this.group.rotation.setFromVector3(this.snapRotation(this.group.rotation.toVector3())),this.deselectLayer(this.flipLayer),a(e)}})}bounceCube(){let e=!0;return(t,a,o)=>{1<=t&&(e&&(a=(t-1)*o,e=!1),this.game.cube.object.rotateOnAxis(this.flipAxis,a))}}rotateCube(e,t){const a=this.flipConfig,o=[y.Power.Out(4),y.Sine.Out(),y.Back.Out(2)][a],s=[100,150,350][a];this.rotationTween=new b({easing:o,duration:s,onUpdate:t=>{this.edges.rotateOnWorldAxis(this.flipAxis,t.delta*e),this.game.cube.object.rotation.copy(this.edges.rotation)},onComplete:()=>{this.edges.rotation.setFromVector3(this.snapRotation(this.edges.rotation.toVector3())),this.game.cube.object.rotation.copy(this.edges.rotation),t()}})}selectLayer(e){this.group.rotation.set(0,0,0),this.movePieces(e,this.game.cube.object,this.group),this.flipLayer=e}deselectLayer(e){this.movePieces(e,this.group,this.game.cube.object),this.flipLayer=null}movePieces(e,t,a){t.updateMatrixWorld(),a.updateMatrixWorld(),e.forEach(e=>{const o=this.game.cube.pieces[e];o.applyMatrix(t.matrixWorld),t.remove(o),o.applyMatrix(new THREE.Matrix4().getInverse(a.matrixWorld)),a.add(o)})}getLayer(e){const t={2:6,3:3,4:4,5:3}[this.game.cube.size],a=[];let o;if(!1===e){const a=this.dragIntersect.object.parent;o=this.getMainAxis(this.flipAxis),e=a.position.clone().multiplyScalar(t).round()}else o=this.getMainAxis(e);return this.game.cube.pieces.forEach(s=>{const r=s.position.clone().multiplyScalar(t).round();r[o]==e[o]&&a.push(s.name)}),a}keyboardMove(e,t){if(this.state===f&&!0===this.enabled)if('LAYER'===e){const e=this.getLayer(t.position);this.flipAxis=new THREE.Vector3,this.flipAxis[t.axis]=1,this.state=2,this.selectLayer(e),this.rotateLayer(t.angle,!1,()=>{this.game.storage.saveGame(),this.state=f,this.checkIsSolved()})}else'CUBE'===e&&(this.flipAxis=new THREE.Vector3,this.flipAxis[t.axis]=1,this.state=2,this.rotateCube(t.angle,()=>{this.state=f}))}scrambleCube(){null==this.scramble&&(this.scramble=this.game.scrambler,this.scramble.callback='function'==typeof callback?callback:()=>{});const e=this.scramble.converted,t=e[0],a=this.getLayer(t.position);this.flipAxis=new THREE.Vector3,this.flipAxis[t.axis]=1,this.selectLayer(a),this.rotateLayer(t.angle,!0,()=>{e.shift(),0o(e[t])>o(e[a])?t:a)}detach(e,t){e.applyMatrix(t.matrixWorld),t.remove(e),this.game.world.scene.add(e)}attach(e,t){e.applyMatrix(new THREE.Matrix4().getInverse(t.matrixWorld)),this.game.world.scene.remove(e),t.add(e)}addMomentumPoint(e){const t=Date.now();this.momentum=this.momentum.filter(e=>500>t-e.time),!1!==e&&this.momentum.push({delta:e,time:t})}getMomentum(){const e=this.momentum.length,t=new THREE.Vector2;return this.addMomentumPoint(!1),this.momentum.forEach((a,o)=>{t.add(a.delta.multiplyScalar(o/e))}),t}roundAngle(e){const t=i/2;return a(e)*r(o(e)/t)*t}snapRotation(e){return e.set(this.roundAngle(e.x),this.roundAngle(e.y),this.roundAngle(e.z))}checkIsSolved(){performance.now();let e=!0;const t={"x-":[],"x+":[],"y-":[],"y+":[],"z-":[],"z+":[]};this.game.cube.edges.forEach(e=>{const a=e.parent.localToWorld(e.position.clone()).sub(this.game.cube.object.position),o=this.getMainAxis(a),s=1>a.multiplyScalar(2).round()[o]?'-':'+';t[o+s].push(e.name)}),Object.keys(t).forEach(a=>{t[a].every(e=>e===t[a][0])||(e=!1)}),e&&this.onSolved()}}class z{constructor(e){this.game=e,this.dificulty=0,this.scrambleLength={2:[7,9,11],3:[20,25,30],4:[30,40,50],5:[40,60,80]},this.moves=[],this.conveted=[],this.pring=''}scramble(e){let t=0;if(this.moves='undefined'==typeof e?[]:e.split(' '),1>this.moves.length){const a=this.scrambleLength[this.game.cube.size][this.dificulty],o=4>this.game.cube.size?'UDLRFB':'UuDdLlRrFfBb',s=['','\'','2'],r='undefined'==typeof e?a:e;for(;t{},this.convert(),this.print=this.moves.join(' '),this}convert(){this.converted=[],this.moves.forEach(e=>{const t=this.convertMove(e),a=e.charAt(1);this.converted.push(t),'2'==a&&this.converted.push(t)})}convertMove(e){const t=e.charAt(0),a=e.charAt(1),o={D:'y',U:'y',L:'x',R:'x',F:'z',B:'z'}[t.toUpperCase()];let s={D:-1,U:1,L:-1,R:1,F:1,B:-1}[t.toUpperCase()];3new b({target:e.style,duration:300,easing:t?y.Power.Out(2):y.Power.In(3),from:{opacity:t?0:1},to:{opacity:t?1:0},onUpdate:a=>{const o=t?1-a.value:a.value;e.style.transform=`translate3d(0, ${1.5*o}em, 0)`},onComplete:()=>e.style.pointerEvents=t?'all':'none'});t.forEach(e=>this.tweens.buttons[e]=a(this.game.dom.buttons[e],!1)),setTimeout(()=>e.forEach(e=>{this.tweens.buttons[e]=a(this.game.dom.buttons[e],!0)}),t?500:0)}cube(e,t=!1){this.activeTransitions++;try{this.tweens.cube.stop()}catch(t){}const a=this.game.cube.animator.position.y,o=this.game.cube.animator.rotation.x;this.tweens.cube=new b({duration:e?3e3:1250,easing:e?y.Elastic.Out(.8,.6):y.Back.In(1),onUpdate:s=>{this.game.cube.animator.position.y=e?t?.9+3.5*(1-s.value):4*(1-s.value):a+4*s.value,this.game.cube.animator.rotation.x=e?(1-s.value)*i/3:o+s.value*-i/3}}),t&&(e?(this.game.world.camera.zoom=.75,this.game.world.camera.updateProjectionMatrix()):setTimeout(()=>{this.game.world.camera.zoom=this.data.cameraZoom,this.game.world.camera.updateProjectionMatrix()},1500)),this.durations.cube=e?1500:1500,setTimeout(()=>this.activeTransitions--,this.durations.cube)}float(){try{this.tweens.float.stop()}catch(t){}this.tweens.float=new b({duration:1500,easing:y.Sine.InOut(),yoyo:!0,onUpdate:e=>{this.game.cube.holder.position.y=-.02+.04*e.value,this.game.cube.holder.rotation.x=.005-.01*e.value,this.game.cube.holder.rotation.z=-this.game.cube.holder.rotation.x,this.game.cube.holder.rotation.y=this.game.cube.holder.rotation.x,this.game.controls.edges.position.y=this.game.cube.holder.position.y+this.game.cube.object.position.y}})}zoom(e,t){this.activeTransitions++;const a=e?1:this.data.cameraZoom,o=0{this.game.world.camera.updateProjectionMatrix()}}),this.tweens.rotate=new b({target:this.game.cube.animator.rotation,duration:o,easing:n,to:{y:2*-i*s},onComplete:()=>{this.game.cube.animator.rotation.y=0}}),this.durations.zoom=o,setTimeout(()=>this.activeTransitions--,this.durations.zoom)}elevate(e){this.activeTransitions++;this.tweens.elevate=new b({target:this.game.cube.object.position,duration:e?1500:0,easing:y.Power.InOut(3),to:{y:e?-.05:this.data.cubeY}});this.durations.elevate=1500,setTimeout(()=>this.activeTransitions--,this.durations.elevate)}complete(e,t){this.activeTransitions++;const a=t?this.game.dom.texts.best:this.game.dom.texts.complete;null===a.querySelector('span i')&&a.querySelectorAll('span').forEach(e=>this.splitLetters(e));const o=a.querySelectorAll('.icon, i');this.flipLetters(t?'best':'complete',o,e),a.style.opacity=1;const s=this.durations[t?'best':'complete'];e||setTimeout(()=>this.game.dom.texts.timer.style.transform='',s),setTimeout(()=>this.activeTransitions--,s)}stats(e){e&&this.game.scores.calcStats(),this.activeTransitions++,this.tweens.stats.forEach(e=>{e.stop(),e=null});let t=-1;const a=this.game.dom.stats.querySelectorAll('.stats'),o=e?y.Power.Out(2):y.Power.In(3);a.forEach((a,s)=>{const r=s*(e?80:60);this.tweens.stats[t++]=new b({delay:r,duration:400,easing:o,onUpdate:t=>{const o=e?2*(1-t.value):t.value,s=e?t.value:1-t.value;a.style.transform=`translate3d(0, ${o}em, 0)`,a.style.opacity=s}})}),this.durations.stats=0,setTimeout(()=>this.activeTransitions--,this.durations.stats)}preferences(e){this.ranges(this.game.dom.prefs.querySelectorAll('.range'),'prefs',e)}theming(e){this.ranges(this.game.dom.theme.querySelectorAll('.range'),'prefs',e)}ranges(e,t,a){this.activeTransitions++,this.tweens[t].forEach(e=>{e.stop(),e=null});const o=a?y.Power.Out(2):y.Power.In(3);let s=-1,r=0;e.forEach((e,n)=>{const i=e.querySelector('.range__label'),l=e.querySelector('.range__track-line'),c=e.querySelector('.range__handle'),m=e.querySelectorAll('.range__list div'),d=n*(a?120:100);i.style.opacity=a?0:1,l.style.opacity=a?0:1,c.style.opacity=a?0:1,c.style.pointerEvents=a?'all':'none',this.tweens[t][s++]=new b({delay:a?d:d,duration:400,easing:o,onUpdate:e=>{const t=a?1-e.value:e.value,o=a?e.value:1-e.value;i.style.transform=`translate3d(0, ${t}em, 0)`,i.style.opacity=o}}),this.tweens[t][s++]=new b({delay:a?d+100:d,duration:400,easing:o,onUpdate:e=>{const t=a?1-e.value:e.value,o=a?e.value:1-e.value;l.style.transform=`translate3d(0, ${t}em, 0) scale3d(${o}, 1, 1)`,l.style.opacity=o}}),this.tweens[t][s++]=new b({delay:a?d+100:d,duration:400,easing:o,onUpdate:e=>{const t=a?1-e.value:e.value,o=1-t,s=.5+.5*o;c.style.transform=`translate3d(0, ${t}em, 0) scale3d(${s}, ${s}, ${s})`,c.style.opacity=o}}),m.forEach((e,r)=>{e.style.opacity=a?0:1,this.tweens[t][s++]=new b({delay:a?d+200+50*r:d,duration:400,easing:o,onUpdate:t=>{const o=a?1-t.value:t.value,s=a?t.value:1-t.value;e.style.transform=`translate3d(0, ${o}em, 0)`,e.style.opacity=s}})}),r=m.length>r?m.length-1:r,e.style.opacity=1}),this.durations[t]=a?100*(e.length-1)+200+50*r+400:100*(e.length-1)+400,setTimeout(()=>this.activeTransitions--,this.durations[t])}title(e){this.activeTransitions++;const t=this.game.dom.texts.title;null===t.querySelector('span i')&&t.querySelectorAll('span').forEach(e=>this.splitLetters(e));const a=t.querySelectorAll('i');this.flipLetters('title',a,e),t.style.opacity=1;const o=this.game.dom.texts.note;this.tweens.title[a.length]=new b({target:o.style,easing:y.Sine.InOut(),duration:e?800:400,yoyo:!!e||null,from:{opacity:e?0:parseFloat(getComputedStyle(o).opacity)},to:{opacity:e?1:0}}),setTimeout(()=>this.activeTransitions--,this.durations.title)}timer(e){this.activeTransitions++;const t=this.game.dom.texts.timer;t.style.opacity=0,this.game.timer.convert(),this.game.timer.setText(),this.splitLetters(t);const a=t.querySelectorAll('i');this.flipLetters('timer',a,e),t.style.opacity=1,setTimeout(()=>this.activeTransitions--,this.durations.timer)}splitLetters(e){const t=e.innerHTML;e.innerHTML='',t.split('').forEach(t=>{const a=document.createElement('i');a.innerHTML=t,e.appendChild(a)})}flipLetters(e,t,a){try{this.tweens[e].forEach(e=>e.stop())}catch(t){}t.forEach((t,o)=>{t.style.opacity=a?0:1,this.tweens[e][o]=new b({easing:y.Sine.Out(),duration:a?800:400,delay:50*o,onUpdate:e=>{const o=a?-80*(1-e.value):80*e.value;t.style.transform=`rotate3d(0, 1, 0, ${o}deg)`,t.style.opacity=a?e.value:1-e.value}})}),this.durations[e]=50*(t.length-1)+(a?800:400)}}class w extends g{constructor(e){super(!1),this.game=e,this.reset()}start(e){this.startTime=e?Date.now()-this.deltaTime:Date.now(),this.deltaTime=0,this.converted=this.convert(),super.start()}reset(){this.startTime=0,this.currentTime=0,this.deltaTime=0,this.converted='0:00'}stop(){return this.currentTime=Date.now(),this.deltaTime=this.currentTime-this.startTime,this.convert(),super.stop(),{time:this.converted,millis:this.deltaTime}}update(){const e=this.converted;this.currentTime=Date.now(),this.deltaTime=this.currentTime-this.startTime,this.convert(),this.converted!=e&&(localStorage.setItem('theCube_time',this.deltaTime),this.setText())}convert(){const e=parseInt(this.deltaTime/1e3%60),t=parseInt(this.deltaTime/60000);this.converted=t+':'+(10>e?'0':'')+e}setText(){this.game.dom.texts.timer.innerHTML=this.converted}}document.querySelectorAll('range').forEach(e=>{const t=document.createElement('div');t.innerHTML='

\n
\n
\n
\n
\n
\n
\n
';const a=t.querySelector('.range'),o=a.querySelector('.range__label'),s=a.querySelector('.range__list');a.setAttribute('name',e.getAttribute('name')),o.innerHTML=e.getAttribute('title'),e.hasAttribute('color')&&(a.classList.add('range--type-color'),a.classList.add('range--color-'+e.getAttribute('name'))),e.hasAttribute('list')&&e.getAttribute('list').split(',').forEach(e=>{const t=document.createElement('div');t.innerHTML=e,s.appendChild(t)}),e.parentNode.replaceChild(a,e)});class C{constructor(e,t){t=Object.assign({range:[0,1],value:0,step:0,onUpdate:()=>{},onComplete:()=>{}},t||{}),this.element=document.querySelector('.range[name="'+e+'"]'),this.track=this.element.querySelector('.range__track'),this.handle=this.element.querySelector('.range__handle'),this.list=[].slice.call(this.element.querySelectorAll('.range__list div')),this.value=t.value,this.min=t.range[0],this.max=t.range[1],this.step=t.step,this.onUpdate=t.onUpdate,this.onComplete=t.onComplete,this.setValue(this.value),this.initDraggable()}setValue(e){this.value=this.round(this.limitValue(e)),this.setHandlePosition()}initDraggable(){let e;this.draggable=new v(this.handle,{calcDelta:!0}),this.draggable.onDragStart=()=>{e=this.positionFromValue(this.value),this.handle.style.left=e+'px'},this.draggable.onDragMove=t=>{e=this.limitPosition(e+t.delta.x),this.value=this.round(this.valueFromPosition(e)),this.setHandlePosition(),this.onUpdate(this.value)},this.draggable.onDragEnd=()=>{this.onComplete(this.value)}}round(e){return 1>this.step?e:r((e-this.min)/this.step)*this.step+this.min}limitValue(e){const t=c(this.max,this.min),a=l(this.max,this.min);return l(c(e,a),t)}limitPosition(e){return l(c(e,0),this.track.offsetWidth)}percentsFromValue(e){return(e-this.min)/(this.max-this.min)}valueFromPosition(e){return this.min+(this.max-this.min)*(e/this.track.offsetWidth)}positionFromValue(e){return this.percentsFromValue(e)*this.track.offsetWidth}setHandlePosition(){this.handle.style.left=100*this.percentsFromValue(this.value)+'%'}}class L{constructor(e){this.game=e}init(){this.ranges={size:new C('size',{value:this.game.cube.size,range:[2,5],step:1,onUpdate:e=>{this.game.cube.size=e,this.game.preferences.ranges.scramble.list.forEach((e,t)=>{e.innerHTML=this.game.scrambler.scrambleLength[this.game.cube.size][t]})},onComplete:()=>this.game.storage.savePreferences()}),flip:new C('flip',{value:this.game.controls.flipConfig,range:[0,2],step:1,onUpdate:e=>{this.game.controls.flipConfig=e},onComplete:()=>this.game.storage.savePreferences()}),scramble:new C('scramble',{value:this.game.scrambler.dificulty,range:[0,2],step:1,onUpdate:e=>{this.game.scrambler.dificulty=e},onComplete:()=>this.game.storage.savePreferences()}),fov:new C('fov',{value:this.game.world.fov,range:[2,45],onUpdate:e=>{this.game.world.fov=e,this.game.world.resize()},onComplete:()=>this.game.storage.savePreferences()}),theme:new C('theme',{value:{cube:0,erno:1,dust:2,camo:3,rain:4}[this.game.themes.theme],range:[0,4],step:1,onUpdate:e=>{const t=['cube','erno','dust','camo','rain'][e];this.game.themes.setTheme(t)},onComplete:()=>this.game.storage.savePreferences()}),hue:new C('hue',{value:0,range:[0,360],onUpdate:()=>this.game.themeEditor.updateHSL(),onComplete:()=>this.game.storage.savePreferences()}),saturation:new C('saturation',{value:100,range:[0,100],onUpdate:()=>this.game.themeEditor.updateHSL(),onComplete:()=>this.game.storage.savePreferences()}),lightness:new C('lightness',{value:50,range:[0,100],onUpdate:()=>this.game.themeEditor.updateHSL(),onComplete:()=>this.game.storage.savePreferences()})},this.ranges.scramble.list.forEach((e,t)=>{e.innerHTML=this.game.scrambler.scrambleLength[this.game.cube.size][t]})}}class T{constructor(e){this.game=e,this.started=0,this.options={speed:{min:.0011,max:.0022},revolution:{min:.01,max:.05},size:{min:.1,max:.15},colors:[4303560,8571448,16772936,15677731,16747530]},this.geometry=new THREE.PlaneGeometry(1,1),this.material=new THREE.MeshLambertMaterial({side:THREE.DoubleSide}),this.holders=[new M(this.game,this,1,20),new M(this.game,this,-1,30)]}start(){0{this.game.world.scene.add(e.holder),e.start(),this.started++})}stop(){0==this.started||this.holders.forEach(e=>{e.stop(()=>{this.game.world.scene.remove(e.holder),this.started--})})}updateColors(e){this.holders.forEach(t=>{t.options.colors.forEach((a,o)=>{t.options.colors[o]=e[['D','F','R','B','L'][o]]})})}}class M extends g{constructor(e,t,a,o){super(!1),this.game=e,this.parent=t,this.distanceFromCube=a,this.count=o,this.particles=[],this.holder=new THREE.Object3D,this.holder.rotation.copy(this.game.world.camera.rotation),this.object=new THREE.Object3D,this.holder.add(this.object),this.resizeViewport=this.resizeViewport.bind(this),this.game.world.onResize.push(this.resizeViewport),this.resizeViewport(),this.geometry=this.parent.geometry,this.material=this.parent.material,this.options=this.parent.options;for(let s=this.count;s--;)this.particles.push(new A(this))}start(){this.time=performance.now(),this.playing=!0;for(let e=this.count;e--;)this.particles[e].reset();super.start()}stop(e){this.playing=!1,this.completed=0,this.callback=e}reset(){super.stop(),this.callback()}update(){const e=performance.now(),t=e-this.time;this.time=e;for(let e=this.count;e--;)this.particles[e].completed||this.particles[e].update(t);this.playing||this.completed!=this.count||this.reset()}resizeViewport(){const e=this.game.world.camera.fov*THREE.Math.DEG2RAD;this.height=2*m(e/2)*(this.game.world.camera.position.length()-this.distanceFromCube),this.width=this.height*this.game.world.camera.aspect;const t=1/this.game.transition.data.cameraZoom;this.width*=t,this.height*=t,this.object.position.z=this.distanceFromCube,this.object.position.y=this.height/2}}class A{constructor(e){return this.confetti=e,this.options=this.confetti.options,this.velocity=new THREE.Vector3,this.force=new THREE.Vector3,this.mesh=new THREE.Mesh(this.confetti.geometry,this.confetti.material.clone()),this.confetti.object.add(this.mesh),this.size=THREE.Math.randFloat(this.options.size.min,this.options.size.max),this.mesh.scale.set(this.size,this.size,this.size),this}reset(e=!0){this.completed=!1,this.color=new THREE.Color(this.options.colors[d(Math.random()*this.options.colors.length)]),this.mesh.material.color.set(this.color),this.speed=-1*THREE.Math.randFloat(this.options.speed.min,this.options.speed.max),this.mesh.position.x=THREE.Math.randFloat(-this.confetti.width/2,this.confetti.width/2),this.mesh.position.y=e?THREE.Math.randFloat(this.size,this.confetti.height+this.size):this.size,this.revolutionSpeed=THREE.Math.randFloat(this.options.revolution.min,this.options.revolution.max),this.revolutionAxis=['x','y','z'][d(3*Math.random())],this.mesh.rotation.set(Math.random()*i/3,Math.random()*i/3,Math.random()*i/3)}stop(){this.completed=!0,this.confetti.completed++}update(e){this.mesh.position.y+=this.speed*e,this.mesh.rotation[this.revolutionAxis]+=this.revolutionSpeed,this.mesh.position.y<-this.confetti.height-this.size&&(this.confetti.playing?this.reset(!1):this.stop())}}class E{constructor(e){this.game=e,this.data={2:{scores:[],solves:0,best:0,worst:0},3:{scores:[],solves:0,best:0,worst:0},4:{scores:[],solves:0,best:0,worst:0},5:{scores:[],solves:0,best:0,worst:0}}}addScore(e){const t=this.data[this.game.cube.sizeGenerated];t.scores.push(e),t.solves++,100t.worst&&(t.worst=e),this.game.storage.saveScores(),a}calcStats(){const e=this.game.cube.sizeGenerated,t=this.data[e];this.setStat('cube-size',`${e}x${e}x${e}`),this.setStat('total-solves',t.solves),this.setStat('best-time',this.convertTime(t.best)),this.setStat('worst-time',this.convertTime(t.worst)),this.setStat('average-5',this.getAverage(5)),this.setStat('average-12',this.getAverage(12)),this.setStat('average-25',this.getAverage(25))}setStat(e,t){0===t&&(t='-'),this.game.dom.stats.querySelector(`.stats[name="${e}"] b`).innerHTML=t}getAverage(e){const t=this.data[this.game.cube.sizeGenerated];return t.scores.lengthe+t,0)/e)}convertTime(e){if(0>=e)return 0;const t=parseInt(e/1e3%60),a=parseInt(e/60000);return a+':'+(10>t?'0':'')+t}}class P{constructor(e){this.game=e;const t=localStorage.getItem('theCube_version');t&&t===window.gameVersion||(this.clearGame(),this.clearPreferences(),this.migrateScores(),localStorage.setItem('theCube_version',window.gameVersion))}init(){this.loadPreferences(),this.loadScores()}loadGame(){try{const e='true'===localStorage.getItem('theCube_playing');if(!e)throw new Error;const t=JSON.parse(localStorage.getItem('theCube_savedState')),a=parseInt(localStorage.getItem('theCube_time'));if(!t||null===a)throw new Error;if(t.size!==this.game.cube.sizeGenerated)throw new Error;this.game.cube.loadFromData(t),this.game.timer.deltaTime=a,this.game.saved=!0}catch(t){this.game.saved=!1}}saveGame(){const e={names:[],positions:[],rotations:[]},t=this.game.timer.deltaTime;e.size=this.game.cube.sizeGenerated,this.game.cube.pieces.forEach(t=>{e.names.push(t.name),e.positions.push(t.position),e.rotations.push(t.rotation.toVector3())}),localStorage.setItem('theCube_playing',!0),localStorage.setItem('theCube_savedState',JSON.stringify(e)),localStorage.setItem('theCube_time',t)}clearGame(){localStorage.removeItem('theCube_playing'),localStorage.removeItem('theCube_savedState'),localStorage.removeItem('theCube_time')}loadScores(){try{const e=JSON.parse(localStorage.getItem('theCube_scores'));if(!e)throw new Error;this.game.scores.data=e}catch(t){}}saveScores(){const e=this.game.scores.data;localStorage.setItem('theCube_scores',JSON.stringify(e))}clearScores(){localStorage.removeItem('theCube_scores')}migrateScores(){try{const e=JSON.parse(localStorage.getItem('theCube_scoresData')),t=parseInt(localStorage.getItem('theCube_scoresBest')),a=parseInt(localStorage.getItem('theCube_scoresWorst')),o=parseInt(localStorage.getItem('theCube_scoresSolves'));if(!e||!t||!o||!a)return!1;this.game.scores.data[3].scores=e,this.game.scores.data[3].best=t,this.game.scores.data[3].solves=o,this.game.scores.data[3].worst=a,localStorage.removeItem('theCube_scoresData'),localStorage.removeItem('theCube_scoresBest'),localStorage.removeItem('theCube_scoresWorst'),localStorage.removeItem('theCube_scoresSolves')}catch(t){}}loadPreferences(){try{const e=JSON.parse(localStorage.getItem('theCube_preferences'));if(!e)throw new Error;return this.game.cube.size=parseInt(e.cubeSize),this.game.controls.flipConfig=parseInt(e.flipConfig),this.game.scrambler.dificulty=parseInt(e.dificulty),this.game.world.fov=parseFloat(e.fov),this.game.world.resize(),this.game.themes.colors=e.colors,this.game.themes.setTheme(e.theme),!0}catch(t){return this.game.cube.size=3,this.game.controls.flipConfig=0,this.game.scrambler.dificulty=1,this.game.world.fov=10,this.game.world.resize(),this.game.themes.setTheme('cube'),this.savePreferences(),!1}}savePreferences(){const e={cubeSize:this.game.cube.size,flipConfig:this.game.controls.flipConfig,dificulty:this.game.scrambler.dificulty,fov:this.game.world.fov,theme:this.game.themes.theme,colors:this.game.themes.colors};localStorage.setItem('theCube_preferences',JSON.stringify(e))}clearPreferences(){localStorage.removeItem('theCube_preferences')}}class D{constructor(e){this.game=e,this.theme=null,this.defaults={cube:{U:16775167,D:16772936,F:15677731,R:4303560,B:16747530,L:8571448,P:528410,G:13751771},erno:{U:16777215,D:16766208,F:12852794,R:20922,B:16734208,L:40544,P:528410,G:9092607},dust:{U:16774891,D:15189133,F:9381182,R:6323817,B:12480354,L:8691549,P:528410,G:15189133},camo:{U:16774891,D:12564082,F:3613724,R:7439446,B:8411185,L:3621661,P:528410,G:12564082},rain:{U:16448255,D:15579437,F:13508917,R:4496009,B:15489071,L:10725703,P:528410,G:8894892}},this.colors=JSON.parse(JSON.stringify(this.defaults))}getColors(){return this.colors[this.theme]}setTheme(e=!1,t=!1){if(e===this.theme&&!1===t)return;!1!==e&&(this.theme=e);const a=this.getColors();this.game.dom.prefs.querySelectorAll('.range__handle div').forEach(e=>{e.style.background='#'+a.R.toString(16).padStart(6,'0')}),this.game.cube.updateColors(a),this.game.confetti.updateColors(a),this.game.dom.back.style.background='#'+a.G.toString(16).padStart(6,'0')}}class _{constructor(e){this.game=e,this.editColor='R',this.getPieceColor=this.getPieceColor.bind(this)}colorFromHSL(e,t,a){return e=r(e),t=r(t),a=r(a),new THREE.Color(`hsl(${e}, ${t}%, ${a}%)`)}setHSL(e=null,t=!1){this.editColor=null===e?'R':e;const a=new THREE.Color(this.game.themes.getColors()[this.editColor]),{h:o,s:r,l:s}=a.getHSL(a),{hue:n,saturation:i,lightness:l}=this.game.preferences.ranges;if(t){const e=n.value/360,t=i.value/100,c=l.value/100,m=this.colorFromHSL(n.value,i.value,l.value);this.tweenHSL&&this.tweenHSL.stop(),this.tweenHSL=new b({duration:200,easing:y.Sine.Out(),onUpdate:d=>{n.setValue(360*(e+(o-e)*d.value)),i.setValue(100*(t+(r-t)*d.value)),l.setValue(100*(c+(s-c)*d.value));const u=m.clone().lerp(a,d.value),g=u.getStyle(),p=u.getHSL(u);n.handle.style.color=g,i.handle.style.color=g,l.handle.style.color=g,i.track.style.color=this.colorFromHSL(360*p.h,100,50).getStyle(),l.track.style.color=this.colorFromHSL(360*p.h,100*p.s,50).getStyle(),this.game.dom.theme.style.display='none',this.game.dom.theme.offsetHeight,this.game.dom.theme.style.display=''},onComplete:()=>{this.updateHSL(),this.game.storage.savePreferences()}})}else n.setValue(360*o),i.setValue(100*r),l.setValue(100*s),this.updateHSL(),this.game.storage.savePreferences()}updateHSL(){const{hue:e,saturation:t,lightness:a}=this.game.preferences.ranges,o=e.value,r=t.value,s=a.value,n=this.colorFromHSL(o,r,s).getStyle();e.handle.style.color=n,t.handle.style.color=n,a.handle.style.color=n,t.track.style.color=this.colorFromHSL(o,100,50).getStyle(),a.track.style.color=this.colorFromHSL(o,r,50).getStyle(),this.game.dom.theme.style.display='none',this.game.dom.theme.offsetHeight,this.game.dom.theme.style.display='';const i=this.game.themes.theme;this.game.themes.colors[i][this.editColor]=this.colorFromHSL(o,r,s).getHex(),this.game.themes.setTheme()}colorPicker(e){e?this.game.dom.game.addEventListener('click',this.getPieceColor,!1):this.game.dom.game.removeEventListener('click',this.getPieceColor,!1)}getPieceColor(e){const t=e.touches?e.touches[0]||e.changedTouches[0]:e,a=new THREE.Vector2(t.pageX,t.pageY);let o=this.game.controls.getIntersect(a,this.game.cube.edges,!0),s=this.game.controls.getIntersect(a,this.game.cube.cubes,!0);if(!1!==o){const e=o.object,t=e.parent.localToWorld(e.position.clone()).sub(this.game.cube.object.position).sub(this.game.cube.animator.position),a=this.game.controls.getMainAxis(t);1>t.multiplyScalar(2).round()[a]&&(o=!1)}const r=o?o.object.name:s?'P':'G';this.setHSL(r,!0)}resetTheme(){this.game.themes.colors[this.game.themes.theme]=JSON.parse(JSON.stringify(this.game.themes.defaults[this.game.themes.theme])),this.game.themes.setTheme(),this.setHSL(this.editColor,!0)}}const k={3:{checkerboard:{names:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],positions:[{x:1/3,y:-1/3,z:1/3},{x:-1/3,y:1/3,z:0},{x:1/3,y:-1/3,z:-1/3},{x:-1/3,y:0,z:-1/3},{x:1/3,y:0,z:0},{x:-1/3,y:0,z:1/3},{x:1/3,y:1/3,z:1/3},{x:-1/3,y:-1/3,z:0},{x:1/3,y:1/3,z:-1/3},{x:0,y:1/3,z:-1/3},{x:0,y:-1/3,z:0},{x:0,y:1/3,z:1/3},{x:0,y:0,z:1/3},{x:0,y:0,z:0},{x:0,y:0,z:-1/3},{x:0,y:-1/3,z:-1/3},{x:0,y:1/3,z:0},{x:0,y:-1/3,z:1/3},{x:-1/3,y:-1/3,z:1/3},{x:1/3,y:1/3,z:0},{x:-1/3,y:-1/3,z:-1/3},{x:1/3,y:0,z:-1/3},{x:-1/3,y:0,z:0},{x:1/3,y:0,z:1/3},{x:-1/3,y:1/3,z:1/3},{x:1/3,y:-1/3,z:0},{x:-1/3,y:1/3,z:-1/3}],rotations:[{x:-i,y:0,z:i},{x:i,y:0,z:0},{x:-i,y:0,z:i},{x:0,y:0,z:0},{x:0,y:0,z:i},{x:0,y:0,z:0},{x:-i,y:0,z:i},{x:i,y:0,z:0},{x:-i,y:0,z:i},{x:0,y:0,z:i},{x:0,y:0,z:0},{x:0,y:0,z:i},{x:-i,y:0,z:0},{x:i,y:0,z:i},{x:i,y:0,z:0},{x:0,y:0,z:i},{x:0,y:0,z:0},{x:0,y:0,z:i},{x:i,y:0,z:i},{x:-i,y:0,z:0},{x:i,y:0,z:i},{x:0,y:0,z:0},{x:0,y:0,z:i},{x:0,y:0,z:0},{x:i,y:0,z:i},{x:-i,y:0,z:0},{x:i,y:0,z:i}],size:3}}};const V=new class{constructor(e){if(e=Object.assign({tagName:'icon',className:'icon',styles:!1,icons:{},observe:!1,convert:!1},e||{}),this.tagName=e.tagName,this.className=e.className,this.icons=e.icons,this.svgTag=document.createElementNS('http://www.w3.org/2000/svg','svg'),this.svgTag.setAttribute('class',this.className),e.styles&&this.addStyles(),e.convert&&this.convertAllIcons(),e.observe){const e=window.MutationObserver||window.WebKitMutationObserver;this.observer=new e(()=>{this.convertAllIcons()}),this.observer.observe(document.documentElement,{childList:!0,subtree:!0})}return this}convertAllIcons(){document.querySelectorAll(this.tagName).forEach(e=>{this.convertIcon(e)})}convertIcon(e){const t=this.icons[e.attributes[0].localName];if('undefined'!=typeof t){const a=this.svgTag.cloneNode(!0),o=t.viewbox.split(' ');a.setAttributeNS(null,'viewBox',t.viewbox),a.style.width=o[2]/o[3]+'em',a.style.height='1em',a.innerHTML=t.content,e.parentNode.replaceChild(a,e)}}addStyles(){const e=document.createElement('style');e.innerHTML=`.${this.className} { display: inline-block; font-size: inherit; overflow: visible; vertical-align: -0.125em; preserveAspectRatio: none; }`,document.head.appendChild(e)}}({icons:{settings:{viewbox:'0 0 512 512',content:''},back:{viewbox:'0 0 512 512',content:''},trophy:{viewbox:'0 0 576 512',content:''},cancel:{viewbox:'0 0 352 512',content:''},theme:{viewbox:'0 0 512 512',content:''},reset:{viewbox:'0 0 512 512',content:''},trash:{viewbox:'0 0 448 512',content:''}},convert:!0}),I={Menu:0,Playing:1,Complete:2,Stats:3,Prefs:4,Theme:5},H={Menu:['stats','prefs'],Playing:['back'],Complete:[],Stats:[],Prefs:['back','theme'],Theme:['back','reset'],None:[]};window.game=new class{constructor(){this.dom={ui:document.querySelector('.ui'),game:document.querySelector('.ui__game'),back:document.querySelector('.ui__background'),prefs:document.querySelector('.ui__prefs'),theme:document.querySelector('.ui__theme'),stats:document.querySelector('.ui__stats'),texts:{title:document.querySelector('.text--title'),note:document.querySelector('.text--note'),timer:document.querySelector('.text--timer'),complete:document.querySelector('.text--complete'),best:document.querySelector('.text--best-time'),theme:document.querySelector('.text--theme')},buttons:{prefs:document.querySelector('.btn--prefs'),back:document.querySelector('.btn--back'),stats:document.querySelector('.btn--stats'),reset:document.querySelector('.btn--reset'),theme:document.querySelector('.btn--theme')}},this.world=new p(this),this.cube=new h(this),this.controls=new x(this),this.scrambler=new z(this),this.transition=new S(this),this.timer=new w(this),this.preferences=new L(this),this.scores=new E(this),this.storage=new P(this),this.confetti=new T(this),this.themes=new D(this),this.themeEditor=new _(this),this.initActions(),this.state=I.Menu,this.newGame=!1,this.saved=!1,this.storage.init(),this.preferences.init(),this.cube.init(),this.transition.init(),this.storage.loadGame(),this.scores.calcStats(),setTimeout(()=>{this.transition.float(),this.transition.cube(!0),setTimeout(()=>this.transition.title(!0),700),setTimeout(()=>this.transition.buttons(H.Menu,H.None),1e3)},500)}initActions(){let e=!1;this.dom.game.addEventListener('click',()=>{if(!(0e=!1,300),!1;this.game(!0)}else this.state===I.Complete?this.complete(!1):this.state===I.Stats&&this.stats(!1)},!1),this.controls.onMove=()=>{this.newGame&&(this.timer.start(!0),this.newGame=!1)},this.dom.buttons.back.onclick=()=>{0{this.state===I.Theme&&this.themeEditor.resetTheme()},this.dom.buttons.prefs.onclick=()=>this.prefs(!0),this.dom.buttons.theme.onclick=()=>this.theme(!0),this.dom.buttons.stats.onclick=()=>this.stats(!0),this.controls.onSolved=()=>this.complete(!0)}game(e){if(e){this.saved||(this.scrambler.scramble(),this.controls.scrambleCube(),this.newGame=!0);const e=this.saved?0:this.scrambler.converted.length*(this.controls.flipSpeeds[0]+10);this.state=I.Playing,this.saved=!0,this.transition.buttons(H.None,H.Menu),this.transition.zoom(I.Playing,e),this.transition.title(!1),setTimeout(()=>{this.transition.timer(!0),this.transition.buttons(H.Playing,H.None)},this.transition.durations.zoom-1e3),setTimeout(()=>{this.controls.enable(),this.newGame||this.timer.start(!0)},this.transition.durations.zoom)}else this.state=I.Menu,this.transition.buttons(H.Menu,H.Playing),this.transition.zoom(I.Menu,0),this.controls.disable(),this.newGame||this.timer.stop(),this.transition.timer(!1),setTimeout(()=>this.transition.title(!0),this.transition.durations.zoom-1e3),this.playing=!1,this.controls.disable()}prefs(e){if(e){if(0this.transition.preferences(!0),1e3)}else this.cube.resize(),this.state=I.Menu,this.transition.buttons(H.Menu,H.Prefs),this.transition.preferences(!1),setTimeout(()=>this.transition.cube(!0),500),setTimeout(()=>this.transition.title(!0),1200)}theme(e){if(this.themeEditor.colorPicker(e),e){if(0this.transition.cube(!0,!0),500),setTimeout(()=>this.transition.theming(!0),1e3)}else this.state=I.Prefs,this.transition.buttons(H.Prefs,H.Theme),this.transition.cube(!1,!0),this.transition.theming(!1),setTimeout(()=>this.transition.preferences(!0),1e3),setTimeout(()=>{const e=JSON.parse(localStorage.getItem('theCube_savedState'));return e?void this.cube.loadFromData(e):void this.cube.resize(!0)},1500)}stats(e){if(e){if(0this.transition.stats(!0),1e3)}else this.state=I.Menu,this.transition.buttons(H.Menu,H.None),this.transition.stats(!1),setTimeout(()=>this.transition.cube(!0),500),setTimeout(()=>this.transition.title(!0),1200)}complete(e){return e?void(this.transition.buttons(H.Complete,H.Playing),this.state=I.Complete,this.saved=!1,this.controls.disable(),this.timer.stop(),this.storage.clearGame(),this.bestTime=this.scores.addScore(this.timer.deltaTime),this.transition.zoom(I.Menu,0),this.transition.elevate(!0),setTimeout(()=>{this.transition.complete(!0,this.bestTime),this.confetti.start()},1e3)):(this.state=I.Stats,this.saved=!1,this.transition.timer(!1),this.transition.complete(!1,this.bestTime),this.transition.cube(!1),this.timer.reset(),setTimeout(()=>{this.cube.reset(),this.confetti.stop(),this.transition.stats(!0),this.transition.elevate(0)},1e3),!1)}}})(); diff --git a/public/the-cube-master/assets/js/three.js b/public/the-cube-master/assets/js/three.js new file mode 100644 index 0000000..c67a7e4 --- /dev/null +++ b/public/the-cube-master/assets/js/three.js @@ -0,0 +1,949 @@ +// threejs.org/license +(function(l,ya){"object"===typeof exports&&"undefined"!==typeof module?ya(exports):"function"===typeof define&&define.amd?define(["exports"],ya):ya(l.THREE={})})(this,function(l){function ya(){}function z(a,b){this.x=a||0;this.y=b||0}function I(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];0b&&(b=a[c]);return b}function C(){Object.defineProperty(this,"id",{value:If+=2});this.uuid=H.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}function Ib(a,b,c,d,e,f){R.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e, +depthSegments:f};this.fromBufferGeometry(new kb(a,b,c,d,e,f));this.mergeVertices()}function kb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,N,O,Jf){var r=f/N,v=g/O,P=f/2,y=g/2,w=l/2;g=N+1;var E=O+1,x=f=0,B,z,A=new p;for(z=0;zm;m++){if(n=d[m])if(h=n[0],k=n[1]){q&&e.addAttribute("morphTarget"+m,q[h]);f&&e.addAttribute("morphNormal"+ +m,f[h]);c[m]=k;continue}c[m]=0}g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function Vf(a,b){var c={};return{update:function(d){var e=b.render.frame,f=d.geometry,g=a.get(d,f);c[g.id]!==e&&(f.isGeometry&&g.updateFromObject(d),a.update(g),c[g.id]=e);return g},dispose:function(){c={}}}}function Ua(a,b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];T.call(this,a,void 0!==b?b:301,c,d,e,f,g,h,k,m);this.flipY=!1}function Jb(a,b,c){var d=a[0];if(0>=d||0/gm, +function(a,c){a=S[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return Xd(a)})}function Xe(a){return a.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);cb||a.height>b){if("data"in a){console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+a.width+"x"+a.height+")."); +return}b/=Math.max(a.width,a.height);var c=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");c.width=Math.floor(a.width*b);c.height=Math.floor(a.height*b);c.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,c.width,c.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+c.width+"x"+c.height);return c}return a}function k(a){return H.isPowerOfTwo(a.width)&&H.isPowerOfTwo(a.height)}function m(a,b){return a.generateMipmaps&&b&&1003!== +a.minFilter&&1006!==a.minFilter}function q(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function n(b,c){if(!e.isWebGL2)return b;if(b===a.RGB){if(c===a.FLOAT)return a.RGB32F;if(c===a.HALF_FLOAT)return a.RGB16F;if(c===a.UNSIGNED_BYTE)return a.RGB8}if(b===a.RGBA){if(c===a.FLOAT)return a.RGBA32F;if(c===a.HALF_FLOAT)return a.RGBA16F;if(c===a.UNSIGNED_BYTE)return a.RGBA8}return b}function t(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function u(b){b= +b.target;b.removeEventListener("dispose",u);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d.remove(b)}b.isVideoTexture&&delete B[b.id];g.memory.textures--}function r(b){b=b.target;b.removeEventListener("dispose",r);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e= +0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function l(b,t){var r=d.get(b);if(b.isVideoTexture){var l=b.id,v=g.render.frame;B[l]!==v&&(B[l]=v,b.update())}if(0w;w++)v[w]=t||l?l?b.image[w].image:b.image[w]:h(b.image[w],e.maxCubemapSize);var y=v[0],E=k(y),P=f.convert(b.format),x=f.convert(b.type),N=n(P,x);p(a.TEXTURE_CUBE_MAP,b,E);for(w=0;6>w;w++)if(t)for(var B,z=v[w].mipmaps,A=0,D=z.length;At;t++)e.__webglFramebuffer[t]=a.createFramebuffer()}else e.__webglFramebuffer= +a.createFramebuffer();if(h){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);p(a.TEXTURE_CUBE_MAP,b.texture,n);for(t=0;6>t;t++)x(e.__webglFramebuffer[t],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+t);m(b.texture,n)&&q(a.TEXTURE_CUBE_MAP,b.texture,b.width,b.height);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),p(a.TEXTURE_2D,b.texture,n),x(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),m(b.texture,n)&&q(a.TEXTURE_2D,b.texture,b.width,b.height), +c.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&& +b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);l(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error("Unknown depthTexture format"); +}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),w(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),w(e.__webglDepthbuffer,b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture,f=k(b);if(m(e,f)){f=b.isWebGLRenderTargetCube?a.TEXTURE_CUBE_MAP:a.TEXTURE_2D;var g=d.get(e).__webglTexture; +c.bindTexture(f,g);q(f,e,b.width,b.height);c.bindTexture(f,null)}}}function $e(a,b,c){return{convert:function(d){if(1E3===d)return a.REPEAT;if(1001===d)return a.CLAMP_TO_EDGE;if(1002===d)return a.MIRRORED_REPEAT;if(1003===d)return a.NEAREST;if(1004===d)return a.NEAREST_MIPMAP_NEAREST;if(1005===d)return a.NEAREST_MIPMAP_LINEAR;if(1006===d)return a.LINEAR;if(1007===d)return a.LINEAR_MIPMAP_NEAREST;if(1008===d)return a.LINEAR_MIPMAP_LINEAR;if(1009===d)return a.UNSIGNED_BYTE;if(1017===d)return a.UNSIGNED_SHORT_4_4_4_4; +if(1018===d)return a.UNSIGNED_SHORT_5_5_5_1;if(1019===d)return a.UNSIGNED_SHORT_5_6_5;if(1010===d)return a.BYTE;if(1011===d)return a.SHORT;if(1012===d)return a.UNSIGNED_SHORT;if(1013===d)return a.INT;if(1014===d)return a.UNSIGNED_INT;if(1015===d)return a.FLOAT;if(1016===d){if(c.isWebGL2)return a.HALF_FLOAT;var e=b.get("OES_texture_half_float");if(null!==e)return e.HALF_FLOAT_OES}if(1021===d)return a.ALPHA;if(1022===d)return a.RGB;if(1023===d)return a.RGBA;if(1024===d)return a.LUMINANCE;if(1025=== +d)return a.LUMINANCE_ALPHA;if(1026===d)return a.DEPTH_COMPONENT;if(1027===d)return a.DEPTH_STENCIL;if(100===d)return a.FUNC_ADD;if(101===d)return a.FUNC_SUBTRACT;if(102===d)return a.FUNC_REVERSE_SUBTRACT;if(200===d)return a.ZERO;if(201===d)return a.ONE;if(202===d)return a.SRC_COLOR;if(203===d)return a.ONE_MINUS_SRC_COLOR;if(204===d)return a.SRC_ALPHA;if(205===d)return a.ONE_MINUS_SRC_ALPHA;if(206===d)return a.DST_ALPHA;if(207===d)return a.ONE_MINUS_DST_ALPHA;if(208===d)return a.DST_COLOR;if(209=== +d)return a.ONE_MINUS_DST_COLOR;if(210===d)return a.SRC_ALPHA_SATURATE;if(33776===d||33777===d||33778===d||33779===d)if(e=b.get("WEBGL_compressed_texture_s3tc"),null!==e){if(33776===d)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===d)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===d)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===d)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===d||35841===d||35842===d||35843===d)if(e=b.get("WEBGL_compressed_texture_pvrtc"),null!==e){if(35840===d)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; +if(35841===d)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===d)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===d)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===d&&(e=b.get("WEBGL_compressed_texture_etc1"),null!==e))return e.COMPRESSED_RGB_ETC1_WEBGL;if(37808===d||37809===d||37810===d||37811===d||37812===d||37813===d||37814===d||37815===d||37816===d||37817===d||37818===d||37819===d||37820===d||37821===d)if(e=b.get("WEBGL_compressed_texture_astc"),null!==e)return d;if(103===d||104=== +d){if(c.isWebGL2){if(103===d)return a.MIN;if(104===d)return a.MAX}e=b.get("EXT_blend_minmax");if(null!==e){if(103===d)return e.MIN_EXT;if(104===d)return e.MAX_EXT}}if(1020===d){if(c.isWebGL2)return a.UNSIGNED_INT_24_8;e=b.get("WEBGL_depth_texture");if(null!==e)return e.UNSIGNED_INT_24_8_WEBGL}return 0}}}function Kb(){D.call(this);this.type="Group"}function Z(a,b,c,d){Na.call(this);this.type="PerspectiveCamera";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3; +this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function yc(a){Z.call(this);this.cameras=a||[]}function af(a){function b(){return null!==e&&!0===e.isPresenting}function c(){if(b()){var c=e.getEyeParameters("left"),f=c.renderWidth;c=c.renderHeight;x=a.getPixelRatio();y=a.getSize();a.setDrawingBufferSize(2*f,c,1);B.start()}else d.enabled&&(a.setDrawingBufferSize(y.width,y.height,x),B.stop())}var d=this,e=null,f=null,g=null,h= +[],k=new I,m=new I;"undefined"!==typeof window&&"VRFrameData"in window&&(f=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",c,!1));var q=new I,n=new fa,t=new p,u=new Z;u.bounds=new V(0,0,.5,1);u.layers.enable(1);var r=new Z;r.bounds=new V(.5,0,.5,1);r.layers.enable(2);var l=new yc([u,r]);l.layers.enable(1);l.layers.enable(2);var y,x,w=[];this.enabled=!1;this.userHeight=1.6;this.getController=function(a){var b=h[a];void 0===b&&(b=new Kb,b.matrixAutoUpdate=!1,b.visible=!1,h[a]= +b);return b};this.getDevice=function(){return e};this.setDevice=function(a){void 0!==a&&(e=a);B.setContext(a)};this.setPoseTarget=function(a){void 0!==a&&(g=a)};this.getCamera=function(a){if(null===e)return a.position.set(0,d.userHeight,0),a;e.depthNear=a.near;e.depthFar=a.far;e.getFrameData(f);var b=e.stageParameters;b?k.fromArray(b.sittingToStandingTransform):k.makeTranslation(0,d.userHeight,0);b=f.pose;var c=null!==g?g:a;c.matrix.copy(k);c.matrix.decompose(c.position,c.quaternion,c.scale);null!== +b.orientation&&(n.fromArray(b.orientation),c.quaternion.multiply(n));null!==b.position&&(n.setFromRotationMatrix(k),t.fromArray(b.position),t.applyQuaternion(n),c.position.add(t));c.updateMatrixWorld();if(!1===e.isPresenting)return a;u.near=a.near;r.near=a.near;u.far=a.far;r.far=a.far;l.matrixWorld.copy(a.matrixWorld);l.matrixWorldInverse.copy(a.matrixWorldInverse);u.matrixWorldInverse.fromArray(f.leftViewMatrix);r.matrixWorldInverse.fromArray(f.rightViewMatrix);m.getInverse(k);u.matrixWorldInverse.multiply(m); +r.matrixWorldInverse.multiply(m);a=c.parent;null!==a&&(q.getInverse(a.matrixWorld),u.matrixWorldInverse.multiply(q),r.matrixWorldInverse.multiply(q));u.matrixWorld.getInverse(u.matrixWorldInverse);r.matrixWorld.getInverse(r.matrixWorldInverse);u.projectionMatrix.fromArray(f.leftProjectionMatrix);r.projectionMatrix.fromArray(f.rightProjectionMatrix);l.projectionMatrix.copy(u.projectionMatrix);a=e.getLayers();a.length&&(a=a[0],null!==a.leftBounds&&4===a.leftBounds.length&&u.bounds.fromArray(a.leftBounds), +null!==a.rightBounds&&4===a.rightBounds.length&&r.bounds.fromArray(a.rightBounds));a:for(a=0;af.normalMatrix.determinant();ba.setMaterial(e,h);var k=t(a,c,e,f),m=!1;if(b!==d.id||S!==k.id||nd!==(!0===e.wireframe))b=d.id,S=k.id,nd=!0===e.wireframe,m=!0;f.morphTargetInfluences&&(va.update(f,d,e,k),m=!0);h=d.index;var q=d.attributes.position;c=1;!0===e.wireframe&& +(h=ra.getWireframeAttribute(d),c=2);a=xa;if(null!==h){var n=pa.get(h);a=ya;a.setIndex(n)}if(m){if(d&&d.isInstancedBufferGeometry&!ua.isWebGL2&&null===ha.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{ba.initAttributes();m=d.attributes;k=k.getAttributes();var u=e.defaultAttributeValues;for(N in k){var l=k[N];if(0<=l){var r=m[N];if(void 0!==r){var v=r.normalized, +p=r.itemSize,w=pa.get(r);if(void 0!==w){var y=w.buffer,E=w.type;w=w.bytesPerElement;if(r.isInterleavedBufferAttribute){var x=r.data,B=x.stride;r=r.offset;x&&x.isInstancedInterleavedBuffer?(ba.enableAttributeAndDivisor(l,x.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=x.meshPerAttribute*x.count)):ba.enableAttribute(l);F.bindBuffer(F.ARRAY_BUFFER,y);F.vertexAttribPointer(l,p,E,v,B*w,r*w)}else r.isInstancedBufferAttribute?(ba.enableAttributeAndDivisor(l,r.meshPerAttribute),void 0=== +d.maxInstancedCount&&(d.maxInstancedCount=r.meshPerAttribute*r.count)):ba.enableAttribute(l),F.bindBuffer(F.ARRAY_BUFFER,y),F.vertexAttribPointer(l,p,E,v,0,0)}}else if(void 0!==u&&(v=u[N],void 0!==v))switch(v.length){case 2:F.vertexAttrib2fv(l,v);break;case 3:F.vertexAttrib3fv(l,v);break;case 4:F.vertexAttrib4fv(l,v);break;default:F.vertexAttrib1fv(l,v)}}}ba.disableUnusedAttributes()}null!==h&&F.bindBuffer(F.ELEMENT_ARRAY_BUFFER,n.buffer)}n=Infinity;null!==h?n=h.count:void 0!==q&&(n=q.count);h=d.drawRange.start* +c;q=null!==g?g.start*c:0;var N=Math.max(h,q);g=Math.max(0,Math.min(n,h+d.drawRange.count*c,q+(null!==g?g.count*c:Infinity))-1-N+1);if(0!==g){if(f.isMesh)if(!0===e.wireframe)ba.setLineWidth(e.wireframeLinewidth*(null===R?U:1)),a.setMode(F.LINES);else switch(f.drawMode){case 0:a.setMode(F.TRIANGLES);break;case 1:a.setMode(F.TRIANGLE_STRIP);break;case 2:a.setMode(F.TRIANGLE_FAN)}else f.isLine?(e=e.linewidth,void 0===e&&(e=1),ba.setLineWidth(e*(null===R?U:1)),f.isLineSegments?a.setMode(F.LINES):f.isLineLoop? +a.setMode(F.LINE_LOOP):a.setMode(F.LINE_STRIP)):f.isPoints?a.setMode(F.POINTS):f.isSprite&&a.setMode(F.TRIANGLES);d&&d.isInstancedBufferGeometry?0=ua.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+a+" texture units while this GPU supports only "+ua.maxTextures);X+=1;return a}; +this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);ia.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),a=!0);ia.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&& +b.isWebGLRenderTargetCube&&(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?ia.setTextureCube(b,c):ia.setTextureCubeDynamic(b,c)}}();this.setFramebuffer=function(a){L=a};this.getRenderTarget=function(){return R};this.setRenderTarget=function(a){(R=a)&&void 0===Ba.get(a).__webglFramebuffer&&ia.setupRenderTarget(a);var b=L,c=!1;a?(b= +Ba.get(a).__webglFramebuffer,a.isWebGLRenderTargetCube&&(b=b[a.activeCubeFace],c=!0),T.copy(a.viewport),wc.copy(a.scissor),ea=a.scissorTest):(T.copy(od).multiplyScalar(U),wc.copy(fa).multiplyScalar(U),ea=qa);Q!==b&&(F.bindFramebuffer(F.FRAMEBUFFER,b),Q=b);ba.viewport(T);ba.scissor(wc);ba.setScissorTest(ea);c&&(c=Ba.get(a.texture),F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,c.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels= +function(a,b,c,d,e,f){if(a&&a.isWebGLRenderTarget){var g=Ba.get(a).__webglFramebuffer;if(g){var h=!1;g!==Q&&(F.bindFramebuffer(F.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,q=k.type;1023!==m&&da.convert(m)!==F.getParameter(F.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===q||da.convert(q)===F.getParameter(F.IMPLEMENTATION_COLOR_READ_TYPE)||1015===q&&(ua.isWebGL2||ha.get("OES_texture_float")|| +ha.get("WEBGL_color_buffer_float"))||1016===q&&(ua.isWebGL2?ha.get("EXT_color_buffer_float"):ha.get("EXT_color_buffer_half_float"))?F.checkFramebufferStatus(F.FRAMEBUFFER)===F.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&F.readPixels(b,c,d,e,da.convert(m),da.convert(q),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&& +F.bindFramebuffer(F.FRAMEBUFFER,Q)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")};this.copyFramebufferToTexture=function(a,b,c){var d=b.image.width,e=b.image.height,f=da.convert(b.format);this.setTexture2D(b,0);F.copyTexImage2D(F.TEXTURE_2D,c||0,f,a.x,a.y,d,e,0)};this.copyTextureToTexture=function(a,b,c,d){var e=b.image.width,f=b.image.height,g=da.convert(c.format),h=da.convert(c.type);this.setTexture2D(c,0);b.isDataTexture?F.texSubImage2D(F.TEXTURE_2D, +d||0,a.x,a.y,e,f,g,h,b.image.data):F.texSubImage2D(F.TEXTURE_2D,d||0,a.x,a.y,g,h,b.image)}}function Lb(a,b){this.name="";this.color=new G(a);this.density=void 0!==b?b:2.5E-4}function Mb(a,b,c){this.name="";this.color=new G(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function qd(){D.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function ob(a,b){this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange= +{offset:0,count:-1};this.version=0}function zc(a,b,c,d){this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function cb(a){J.call(this);this.type="SpriteMaterial";this.color=new G(16777215);this.map=null;this.rotation=0;this.lights=!1;this.transparent=!0;this.setValues(a)}function Ac(a){D.call(this);this.type="Sprite";if(void 0===Nb){Nb=new C;var b=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]);b=new ob(b,5);Nb.setIndex([0,1,2,0,2,3]);Nb.addAttribute("position", +new zc(b,3,0,!1));Nb.addAttribute("uv",new zc(b,2,3,!1))}this.geometry=Nb;this.material=void 0!==a?a:new cb;this.center=new z(.5,.5)}function Bc(){D.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Cc(a,b){a=a||[];this.bones=a.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."), +this.boneInverses=[],a=0,b=this.bones.length;ac;c++){var n=q[h[c]];var t=q[h[(c+1)%3]];f[0]=Math.min(n,t);f[1]=Math.max(n,t);n=f[0]+","+f[1];void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]})}}for(n in g)m=g[n],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new p,null!==a.index){k=a.attributes.position;q=a.index;var u=a.groups;0===u.length&&(u=[{start:0, +count:q.count,materialIndex:0}]);a=0;for(e=u.length;ac;c++)n=q.getX(m+c),t=q.getX(m+(c+1)%3),f[0]=Math.min(n,t),f[1]=Math.max(n,t),n=f[0]+","+f[1],void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]});for(n in g)m=g[n],h.fromBufferAttribute(k,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,m.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position,m=0,d=k.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(k,g),b.push(h.x, +h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z);this.addAttribute("position",new A(b,3))}function Fc(a,b,c){R.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Rb(a,b,c));this.mergeVertices()}function Rb(a,b,c){C.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new p,k=new p,m=new p,q=new p,n=new p,t,u;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); +var r=b+1;for(t=0;t<=c;t++){var l=t/c;for(u=0;u<=b;u++){var y=u/b;a(y,l,k);e.push(k.x,k.y,k.z);0<=y-1E-5?(a(y-1E-5,l,m),q.subVectors(k,m)):(a(y+1E-5,l,m),q.subVectors(m,k));0<=l-1E-5?(a(y,l-1E-5,m),n.subVectors(k,m)):(a(y,l+1E-5,m),n.subVectors(m,k));h.crossVectors(q,n).normalize();f.push(h.x,h.y,h.z);g.push(y,l)}}for(t=0;td&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}C.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a, +indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new p,d=new p,g=new p,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position",new A(h,3));this.addAttribute("normal",new A(h.slice(),3));this.addAttribute("uv",new A(k,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Hc(a, +b){R.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sb(a,b));this.mergeVertices()}function Sb(a,b){na.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ic(a,b){R.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new pb(a,b));this.mergeVertices()}function pb(a,b){na.call(this,[1,0,0, +-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Jc(a,b){R.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tb(a,b));this.mergeVertices()}function Tb(a,b){var c=(1+Math.sqrt(5))/2;na.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5, +11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Kc(a,b){R.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ub(a,b));this.mergeVertices()}function Ub(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;na.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c, +0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Lc(a,b,c,d,e,f){R.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, +closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new Vb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Vb(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(t=0;t<=d;t++){var m=t/d*Math.PI*2,n=Math.sin(m);m=-Math.cos(m);k.x=m*f.x+n*e.x;k.y=m*f.y+n*e.y;k.z=m*f.z+n*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=q.x+c*k.x;h.y=q.y+c*k.y;h.z= +q.z+c*k.z;l.push(h.x,h.y,h.z)}}C.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new p,k=new p,m=new z,q=new p,n,t,l=[],r=[],v=[],y=[];for(n=0;n=b;e-=d)f=cf(e,a[e],a[e+1],f);f&&qb(f,f.next)&&(Oc(f),f=f.next);return f}function Pc(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!qb(a,a.next)&&0!==ma(a.prev,a,a.next))a=a.next;else{Oc(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b} +function Qc(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,k=h;do null===k.z&&(k.z=ae(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;h=k;var m,q,n,t,l=1;do{k=h;var r=h=null;for(q=0;k;){q++;var v=k;for(m=n=0;mn.x?q.x>l.x?q.x:l.x:n.x>l.x?n.x:l.x,B=q.y>n.y?q.y>l.y?q.y:l.y:n.y>l.y?n.y:l.y;m=ae(q.x=m;){if(p!==r.prev&&p!==r.next&&ud(q.x,q.y,n.x,n.y,l.x,l.y,p.x,p.y)&&0<=ma(p.prev,p,p.next)){r=!1;break a}p= +p.prevZ}r=!0}}else a:if(r=a,q=r.prev,n=r,l=r.next,0<=ma(q,n,l))r=!1;else{for(m=r.next.next;m!==r.prev;){if(ud(q.x,q.y,n.x,n.y,l.x,l.y,m.x,m.y)&&0<=ma(m.prev,m,m.next)){r=!1;break a}m=m.next}r=!0}if(r)b.push(k.i/c),b.push(a.i/c),b.push(v.i/c),Oc(a),h=a=v.next;else if(a=v,a===h){if(!g)Qc(Pc(a),b,c,d,e,f,1);else if(1===g){g=b;h=c;k=a;do v=k.prev,r=k.next.next,!qb(v,r)&&df(v,k,k.next,r)&&Rc(v,r)&&Rc(r,v)&&(g.push(v.i/h),g.push(k.i/h),g.push(r.i/h),Oc(k),Oc(k.next),k=a=r),k=k.next;while(k!==a);a=k;Qc(a, +b,c,d,e,f,2)}else if(2===g)a:{g=a;do{for(h=g.next.next;h!==g.prev;){if(k=g.i!==h.i){k=g;v=h;if(r=k.next.i!==v.i&&k.prev.i!==v.i){b:{r=k;do{if(r.i!==k.i&&r.next.i!==k.i&&r.i!==v.i&&r.next.i!==v.i&&df(r,r.next,k,v)){r=!0;break b}r=r.next}while(r!==k);r=!1}r=!r}if(r=r&&Rc(k,v)&&Rc(v,k)){r=k;q=!1;n=(k.x+v.x)/2;v=(k.y+v.y)/2;do r.y>v!==r.next.y>v&&r.next.y!==r.y&&n<(r.next.x-r.x)*(v-r.y)/(r.next.y-r.y)+r.x&&(q=!q),r=r.next;while(r!==k);r=q}k=r}if(k){a=ef(g,h);g=Pc(g,g.next);a=Pc(a,a.next);Qc(g,b,c,d,e, +f);Qc(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function Ng(a,b){return a.x-b.x}function Og(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&ud(eh.x)&&Rc(c,a)&&(h=c,m=q)}c=c.next}return h}function ae(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Pg(a){var b=a,c=a;do b.xma(a.prev,a,a.next)?0<=ma(a,b,a.next)&&0<=ma(a,a.prev,b):0>ma(a,b,a.prev)||0>ma(a,a.next,b)}function ef(a,b){var c=new be(a.i,a.x,a.y),d=new be(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev= +c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function cf(a,b,c,d){a=new be(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Oc(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function be(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function ff(a){var b=a.length;2Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/k;b=b.y+d/k; +g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new z(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new z(f/e,d/e)}function h(a,b){for(M=a.length;0<=--M;){var c=M;var f=M-1;0>f&&(f=a.length-1);var g,h=w+2*O;for(g=0;gq;q++){var n=m[f[q]];var l=m[f[(q+1)%3]];d[0]=Math.min(n,l);d[1]=Math.max(n,l);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2], +c.push(f.x,f.y,f.z);this.addAttribute("position",new A(c,3))}function vb(a,b,c,d,e,f,g,h){R.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Wa(a,b,c,d,e,f,g,h));this.mergeVertices()}function Wa(a,b,c,d,e,f,g,h){function k(c){var e,f=new z,k=new p,t=0,v=!0===c?a:b,w=!0===c?1:-1;var A=r;for(e=1;e<=d;e++)n.push(0,y*w,0),l.push(0,w,0),u.push(.5,.5),r++;var C= +r;for(e=0;e<=d;e++){var D=e/d*h+g,H=Math.cos(D);D=Math.sin(D);k.x=v*D;k.y=y*w;k.z=v*H;n.push(k.x,k.y,k.z);l.push(0,w,0);f.x=.5*H+.5;f.y=.5*D*w+.5;u.push(f.x,f.y);r++}for(e=0;ethis.duration&&this.resetDuration()}function Rg(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return ec;case "vector":case "vector2":case "vector3":case "vector4":return fc; +case "color":return Hd;case "quaternion":return cd;case "bool":case "boolean":return Gd;case "string":return Jd}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Sg(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Rg(a.type);if(void 0===a.times){var c=[],d=[];ia.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)}function Kd(a){this.manager=void 0!== +a?a:ka;this.textures={}}function ge(a){this.manager=void 0!==a?a:ka}function gc(){}function he(a){"boolean"===typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),a=void 0);this.manager=void 0!==a?a:ka;this.withCredentials=!1}function mf(a){this.manager=void 0!==a?a:ka;this.texturePath=""}function ie(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."); +this.manager=void 0!==a?a:ka;this.options=void 0}function je(){this.type="ShapePath";this.color=new G;this.subPaths=[];this.currentPath=null}function ke(a){this.type="Font";this.data=a}function nf(a){this.manager=void 0!==a?a:ka}function le(a){this.manager=void 0!==a?a:ka}function of(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new Z;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Z;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate= +!1}function dd(a,b,c){D.call(this);this.type="CubeCamera";var d=new Z(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new p(1,0,0));this.add(d);var e=new Z(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new p(-1,0,0));this.add(e);var f=new Z(90,1,a,b);f.up.set(0,0,1);f.lookAt(new p(0,1,0));this.add(f);var g=new Z(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new p(0,-1,0));this.add(g);var h=new Z(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new p(0,0,1));this.add(h);var k=new Z(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new p(0,0,-1));this.add(k); +this.renderTarget=new Gb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.renderTarget.texture.name="CubeCamera";this.update=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,m=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=m;c.activeCubeFace=5;a.render(b, +k,c);a.setRenderTarget(null)};this.clear=function(a,b,c,d){for(var e=this.renderTarget,f=0;6>f;f++)e.activeCubeFace=f,a.setRenderTarget(e),a.clear(b,c,d);a.setRenderTarget(null)}}function me(){D.call(this);this.type="AudioListener";this.context=ne.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function hc(a){D.call(this);this.type="Audio";this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay= +!1;this.buffer=null;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function oe(a){hc.call(this,a);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function pe(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function qe(a,b,c){this.binding=a;this.valueSize= +c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function pf(a,b,c){c=c||pa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function pa(a,b,c){this.path=b;this.parsedPath=c||pa.parseTrackName(b);this.node=pa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function qf(){this.uuid= +H.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function rf(a,b,c){this._mixer=a;this._clip=b;this._localRoot= +c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity; +this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function re(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Ld(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function se(){C.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function te(a,b,c){ob.call(this,a,b);this.meshPerAttribute=c||1}function ue(a,b,c){Q.call(this, +a,b);this.meshPerAttribute=c||1}function sf(a,b,c,d){this.ray=new mb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function tf(a,b){return a.distance-b.distance}function ve(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute("position",new A(b,3));b=new Y({fog:!1});this.cone=new W(a,b);this.add(this.cone);this.update()}function xf(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;ca?-1:0b;b++)a[b]=(16>b?"0":"")+b.toString(16);return function(){var b=4294967295*Math.random()|0,d=4294967295*Math.random()|0,e=4294967295*Math.random()|0,f=4294967295*Math.random()|0;return(a[b&255]+a[b>>8&255]+a[b>>16&255]+a[b>>24&255]+"-"+a[d&255]+a[d>>8&255]+"-"+a[d>> +16&15|64]+a[d>>24&255]+"-"+a[e&63|128]+a[e>>8&255]+"-"+a[e>>16&255]+a[e>>24&255]+a[f&255]+a[f>>8&255]+a[f>>16&255]+a[f>>24&255]).toUpperCase()}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1; +a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*H.DEG2RAD},radToDeg:function(a){return a*H.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/ +Math.LN2))}};Object.defineProperties(z.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(z.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+ +a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this}, +addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*= +a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a=new z,b=new z;return function(c,d){a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x= +Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+ +Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+= +(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b); +return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(I.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,q,n,l,u,r,p){var t=this.elements;t[0]=a;t[4]=b;t[8]=c;t[12]=d;t[1]=e;t[5]=f;t[9]=g;t[13]=h;t[2]=k;t[6]=m;t[10]=q;t[14]=n;t[3]=l;t[7]=u;t[11]=r;t[15]=p;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new I).fromArray(this.elements)}, +copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, +b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a=new p;return function(b){var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[3]=0;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[7]=0;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;c[11]=0;c[12]=0;c[13]=0;c[14]=0;c[15]=1;return this}}(),makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); +var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,q=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-q*d;b[9]=-c*g;b[2]=q-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a+q*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=q+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a-q*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]= +q-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,q=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+q,b[1]=g*e,b[5]=q*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=q-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-q*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+q,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=q*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(){var a= +new p(0,0,0),b=new p(1,1,1);return function(c){return this.compose(a,c,b)}}(),lookAt:function(){var a=new p,b=new p,c=new p;return function(d,e,f){var g=this.elements;c.subVectors(d,e);0===c.lengthSq()&&(c.z=1);c.normalize();a.crossVectors(f,c);0===a.lengthSq()&&(1===Math.abs(f.z)?c.x+=1E-4:c.z+=1E-4,c.normalize(),a.crossVectors(f,c));a.normalize();b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!== +b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],m=c[9],q=c[13],n=c[2],l=c[6],u=c[10],r=c[14],p=c[3],y=c[7],x=c[11];c=c[15];var w=d[0],B=d[4],E=d[8],P=d[12],N=d[1],z=d[5],A=d[9],D=d[13],C=d[2], +H=d[6],G=d[10],K=d[14],L=d[3],I=d[7],J=d[11];d=d[15];b[0]=a*w+e*N+f*C+g*L;b[4]=a*B+e*z+f*H+g*I;b[8]=a*E+e*A+f*G+g*J;b[12]=a*P+e*D+f*K+g*d;b[1]=h*w+k*N+m*C+q*L;b[5]=h*B+k*z+m*H+q*I;b[9]=h*E+k*A+m*G+q*J;b[13]=h*P+k*D+m*K+q*d;b[2]=n*w+l*N+u*C+r*L;b[6]=n*B+l*z+u*H+r*I;b[10]=n*E+l*A+u*G+r*J;b[14]=n*P+l*D+u*K+r*d;b[3]=p*w+y*N+x*C+c*L;b[7]=p*B+y*z+x*H+c*I;b[11]=p*E+y*A+x*G+c*J;b[15]=p*P+y*D+x*K+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*= +a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cthis.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.copy(this);c=1/g;f=1/h;var m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b); +e.x=g;e.y=h;e.z=k;return this}}(),makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]= +2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4]; +a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});Object.assign(fa,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var q=e[f+1],l=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==q||m!==l){f=1-g;var t=h*d+k*q+m*l+c*e,u=0<=t?1:-1,r=1-t*t;r>Number.EPSILON&&(r=Math.sqrt(r),t=Math.atan2(r,t*u),f=Math.sin(f*t)/r,g=Math.sin(g* +t)/r);u*=g;h=h*f+d*u;k=k*f+q*u;m=m*f+l*u;c=c*f+e*u;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});Object.defineProperties(fa.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w= +a;this.onChangeCallback()}}});Object.assign(fa.prototype,{set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c= +a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),k=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);"XYZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"YXZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"ZXY"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"ZYX"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"YZX"===a?(this._x=c*k*f+ +h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f-c*d*e):"XZY"===a&&(this._x=c*k*f-h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f+c*d*e);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a=new p,b;return function(c,d){void 0===a&&(a=new p);b=c.dot(d)+1;1E-6>b?(b=0, +Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),angleTo:function(a){return 2*Math.acos(Math.abs(H.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x* +a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), +this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z; +0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize();a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this.onChangeCallback();return this},equals:function(a){return a._x=== +this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(p.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this}, +setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, +this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+= +a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), +this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a=new fa;return function(b){b&&b.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a=new fa;return function(b, +c){return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x, +c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(){var a=new I;return function(b){a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyMatrix4(a)}}(),unproject:function(){var a=new I;return function(b){a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyMatrix4(a)}}(),transformDirection:function(a){var b= +this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a=new p,b=new p;return function(c,d){a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x= +Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y* +a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a, +b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a= +new p;return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a=new p;return function(b){return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(H.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x- +a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromCylindrical:function(a){this.x=a.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(), +c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!== +c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});Object.assign(ra.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements; +b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cc;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1]; +a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var eb={getDataURL:function(a){if(a instanceof HTMLCanvasElement)var b=a;else{"undefined"!==typeof OffscreenCanvas?b=new OffscreenCanvas(a.width,a.height):(b=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),b.width=a.width,b.height=a.height);var c=b.getContext("2d");a instanceof ImageData?c.putImageData(a,0,0):c.drawImage(a,0,0,a.width,a.height)}return 2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}});Object.defineProperty(T.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(V.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y= +b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y; +case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+= +a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-= +a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/ +a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var k=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI; +b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+k)/4;b>f&&b>m?.01>b?(k=0,c=h=.707106781):(k=Math.sqrt(b),h=c/k,c=d/k):f>m?.01>f?(k=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),k=c/h,c=g/h):.01>m?(h=k=.707106781,c=0):(c=Math.sqrt(m),k=d/c,h=g/c);this.set(k,h,c,a);return this}a=Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(k-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y, +a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new V,b=new V);a.set(c, +c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y); +this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x* +this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a, +b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."); +this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});fb.prototype=Object.assign(Object.create(ya.prototype),{constructor:fb,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone(); +this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Gb.prototype=Object.create(fb.prototype);Gb.prototype.constructor=Gb;Gb.prototype.isWebGLRenderTargetCube=!0;gb.prototype=Object.create(T.prototype);gb.prototype.constructor=gb;gb.prototype.isDataTexture=!0;Object.assign(Sa.prototype,{isBox3:!0,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){for(var b= +Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=m);q>f&&(f=q);l>g&&(g=l)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;he&&(e=m);l>f&&(f=l);n>g&&(g=n)}this.min.set(b,c,d); +this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&& +a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new p);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a=new p;return function(b){this.clampPoint(b.center, +a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){if(0=a.constant},intersectsTriangle:function(){function a(a){var e; +var f=0;for(e=a.length-3;f<=e;f+=3){h.fromArray(a,f);var g=m.x*Math.abs(h.x)+m.y*Math.abs(h.y)+m.z*Math.abs(h.z),k=b.dot(h),l=c.dot(h),q=d.dot(h);if(Math.max(-Math.max(k,l,q),Math.min(k,l,q))>g)return!1}return!0}var b=new p,c=new p,d=new p,e=new p,f=new p,g=new p,h=new p,k=new p,m=new p,l=new p;return function(h){if(this.isEmpty())return!1;this.getCenter(k);m.subVectors(this.max,k);b.subVectors(h.a,k);c.subVectors(h.b,k);d.subVectors(h.c,k);e.subVectors(c,b);f.subVectors(d,c);g.subVectors(b,d);h= +[0,-e.z,e.y,0,-f.z,f.y,0,-g.z,g.y,e.z,0,-e.x,f.z,0,-f.x,g.z,0,-g.x,-e.y,e.x,0,-f.y,f.x,0,-g.y,g.x,0];if(!a(h))return!1;h=[1,0,0,0,1,0,0,0,1];if(!a(h))return!1;l.crossVectors(e,f);h=[l.x,l.y,l.z];return a(h)}}(),clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new p);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new p;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a= +new p;return function(b){void 0===b&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),b=new Da);this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;a=a.elements;var b=a[0]*this.min.x,c=a[1]*this.min.x,d=a[2]*this.min.x,e= +a[0]*this.max.x,f=a[1]*this.max.x,g=a[2]*this.max.x,h=a[4]*this.min.y,k=a[5]*this.min.y,m=a[6]*this.min.y,l=a[4]*this.max.y,n=a[5]*this.max.y,t=a[6]*this.max.y,u=a[8]*this.min.z,r=a[9]*this.min.z,p=a[10]*this.min.z,y=a[8]*this.max.z,x=a[9]*this.max.z,w=a[10]*this.max.z;this.min.x=Math.min(b,e)+Math.min(h,l)+Math.min(u,y)+a[12];this.min.y=Math.min(c,f)+Math.min(k,n)+Math.min(r,x)+a[13];this.min.z=Math.min(d,g)+Math.min(m,t)+Math.min(p,w)+a[14];this.max.x=Math.max(b,e)+Math.max(h,l)+Math.max(u,y)+a[12]; +this.max.y=Math.max(c,f)+Math.max(k,n)+Math.max(r,x)+a[13];this.max.z=Math.max(d,g)+Math.max(m,t)+Math.max(p,w)+a[14];return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(Da.prototype,{set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new Sa;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e= +c=0,f=b.length;e=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius; +return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),b=new p);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0=== +a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Sa);a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});Object.assign(Ma.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a, +b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new p,b=new p;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a= +1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new p);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},intersectLine:function(){var a= +new p;return function(b,c){void 0===c&&(console.warn("THREE.Plane: .intersectLine() target is now required"),c=new p);var d=b.delta(a),e=this.normal.dot(d);if(0===e){if(0===this.distanceToPoint(b.start))return c.copy(b.start)}else if(e=-(b.start.dot(this.normal)+this.constant)/e,!(0>e||1b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4], +h=c[5],k=c[6],m=c[7],l=c[8],n=c[9],t=c[10],p=c[11],r=c[12],v=c[13],y=c[14];c=c[15];b[0].setComponents(f-a,m-g,p-l,c-r).normalize();b[1].setComponents(f+a,m+g,p+l,c+r).normalize();b[2].setComponents(f+d,m+h,p+n,c+v).normalize();b[3].setComponents(f-d,m-h,p-n,c-v).normalize();b[4].setComponents(f-e,m-k,p-t,c-y).normalize();b[5].setComponents(f+e,m+k,p+t,c+y).normalize();return this},intersectsObject:function(){var a=new Da;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere(); +a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a=new Da;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)d;d++){var e=c[d]; +a.x=0e.distanceToPoint(a))return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var S={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n", +aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", +begin_vertex:"\nvec3 transformed = vec3( position );\n",beginnormal_vertex:"\nvec3 objectNormal = vec3( normal );\n",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif\n", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n", +color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\n", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n", +defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n", +emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n", +envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n", +fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n", +gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n", +lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif\n", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif\n", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n", +map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n", +metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif\n", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n", +uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n", +uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n", +cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}\n", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n", +linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}\n",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}\n", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tvec4 mvPosition;\n\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n"}, +Aa={merge:function(a){for(var b={},c=0;c>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b, +c,d){b=H.euclideanModulo(b,1);c=H.clamp(c,0,1);d=H.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= +Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/ +360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}return function(b){this.r=a(b.r);this.g=a(b.g);this.b=a(b.b);return this}}(),copyLinearToSRGB:function(){function a(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}return function(b){this.r=a(b.r);this.g=a(b.g);this.b=a(b.b);return this}}(),convertSRGBToLinear:function(){this.copySRGBToLinear(this); +return this},convertLinearToSRGB:function(){this.copyLinearToSRGB(this);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){void 0===a&&(console.warn("THREE.Color: .getHSL() target is now required"),a={h:0,s:0,l:0});var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var k=e-f;f=.5>=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c- +d)/k+(cMath.abs(g)?(this._x=Math.atan2(-m,e),this._z= +Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"=== +b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a=new I;return function(b,c,d){a.makeRotationFromQuaternion(b); +return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new fa;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]); +void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new p(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(Rd.prototype,{set:function(a){this.mask=1<g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e= +this.faceVertexUvs.length;cthis.opacity&&(d.opacity=this.opacity); +!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0!==this.rotation&&(d.rotation=this.rotation);1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new p;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new p,b=new p,c=new p;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5); +b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),n=c.lengthSq(),t=Math.abs(1-k*k);if(0=-p?e<=p?(h=1/t,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+n):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):e<=-p?(d=Math.max(0,-(-k*h+m)),e=0b)return null;b=Math.sqrt(b-e);e=d-b;d+=b;return 0>e&&0>d?null:0>e?this.at(d, +c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a, +b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(){var a= +new p;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new p,b=new p,c=new p,d=new p;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(), +applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});Object.assign(ja,{getNormal:function(){var a=new p;return function(b,c,d,e){void 0===e&&(console.warn("THREE.Triangle: .getNormal() target is now required"),e=new p);e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0=a.x+a.y}}()});Object.assign(ja.prototype, +{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){var a=new p,b=new p;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),getMidpoint:function(a){void 0=== +a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new p);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ja.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new p);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return ja.getBarycoord(a,this.a,this.b,this.c,b)},containsPoint:function(a){return ja.containsPoint(a, +this.a,this.b,this.c)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(){var a=new p,b=new p,c=new p,d=new p,e=new p,f=new p;return function(g,h){void 0===h&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),h=new p);var k=this.a,m=this.b,l=this.c;a.subVectors(m,k);b.subVectors(l,k);d.subVectors(g,k);var n=a.dot(d),t=b.dot(d);if(0>=n&&0>=t)return h.copy(k);e.subVectors(g,m);var u=a.dot(e),r=b.dot(e);if(0<=u&&r<=u)return h.copy(m); +var v=n*r-u*t;if(0>=v&&0<=n&&0>=u)return m=n/(n-u),h.copy(k).addScaledVector(a,m);f.subVectors(g,l);g=a.dot(f);var y=b.dot(f);if(0<=y&&g<=y)return h.copy(l);n=g*t-n*y;if(0>=n&&0<=t&&0>=y)return v=t/(t-y),h.copy(k).addScaledVector(b,v);t=u*y-g*r;if(0>=t&&0<=r-u&&0<=g-y)return c.subVectors(l,m),v=(r-u)/(r-u+(g-y)),h.copy(m).addScaledVector(c,v);l=1/(t+n+v);m=n*l;v*=l;return h.copy(k).addScaledVector(a,m).addScaledVector(b,v)}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}}); +la.prototype=Object.assign(Object.create(D.prototype),{constructor:la,isMesh:!0,setDrawMode:function(a){this.drawMode=a},copy:function(a){D.prototype.copy.call(this,a);this.drawMode=a.drawMode;void 0!==a.morphTargetInfluences&&(this.morphTargetInfluences=a.morphTargetInfluences.slice());void 0!==a.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},a.morphTargetDictionary));return this},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b= +Object.keys(a);if(0c.far?null:{distance:b,point:x.clone(),object:a}}function c(c,d,e,f,m,l,n,q,p){g.fromBufferAttribute(m,n);h.fromBufferAttribute(m,q);k.fromBufferAttribute(m, +p);if(c=b(c,d,e,f,g,h,k,y))l&&(t.fromBufferAttribute(l,n),u.fromBufferAttribute(l,q),r.fromBufferAttribute(l,p),c.uv=a(y,g,h,k,t,u,r)),l=new Ta(n,q,p),ja.getNormal(g,h,k,l.normal),c.face=l;return c}var d=new I,e=new mb,f=new Da,g=new p,h=new p,k=new p,m=new p,l=new p,n=new p,t=new z,u=new z,r=new z,v=new p,y=new p,x=new p;return function(q,p){var v=this.geometry,w=this.material,x=this.matrixWorld;if(void 0!==w&&(null===v.boundingSphere&&v.computeBoundingSphere(),f.copy(v.boundingSphere),f.applyMatrix4(x), +!1!==q.ray.intersectsSphere(f)&&(d.getInverse(x),e.copy(q.ray).applyMatrix4(d),null===v.boundingBox||!1!==e.intersectsBox(v.boundingBox))))if(v.isBufferGeometry){var z=v.index,B=v.attributes.position,A=v.attributes.uv,D=v.groups;v=v.drawRange;var C;if(null!==z)if(Array.isArray(w)){var H=0;for(C=D.length;He.far||f.push({distance:q,point:b.clone(),face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){D.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}}); +Bc.prototype=Object.assign(Object.create(D.prototype),{constructor:Bc,copy:function(a){D.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break; +for(;ef||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}else for(g=0,r=u.length/3-1;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld), +index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,m=k.length,g=0;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});W.prototype=Object.assign(Object.create(sa.prototype), +{constructor:W,isLineSegments:!0,computeLineDistances:function(){var a=new p,b=new p;return function(){var c=this.geometry;if(c.isBufferGeometry)if(null===c.index){for(var d=c.attributes.position,e=[],f=0,g=d.count;fd.far||e.push({distance:a,distanceToRay:Math.sqrt(f),point:n.clone(),index:c,face:null,object:g}))}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&& +h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);c.radius+=m;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);m/=(this.scale.x+this.scale.y+this.scale.z)/3;var l=m*m;m=new p;var n=new p;if(h.isBufferGeometry){var t=h.index;h=h.attributes.position.array;if(null!==t){var u=t.array;t=0;for(var r=u.length;t=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Pb.prototype=Object.create(T.prototype);Pb.prototype.constructor=Pb;Pb.prototype.isCompressedTexture=!0;Dc.prototype=Object.create(T.prototype);Dc.prototype.constructor=Dc;Dc.prototype.isCanvasTexture=!0;Ec.prototype= +Object.create(T.prototype);Ec.prototype.constructor=Ec;Ec.prototype.isDepthTexture=!0;Qb.prototype=Object.create(C.prototype);Qb.prototype.constructor=Qb;Fc.prototype=Object.create(R.prototype);Fc.prototype.constructor=Fc;Rb.prototype=Object.create(C.prototype);Rb.prototype.constructor=Rb;Gc.prototype=Object.create(R.prototype);Gc.prototype.constructor=Gc;na.prototype=Object.create(C.prototype);na.prototype.constructor=na;Hc.prototype=Object.create(R.prototype);Hc.prototype.constructor=Hc;Sb.prototype= +Object.create(na.prototype);Sb.prototype.constructor=Sb;Ic.prototype=Object.create(R.prototype);Ic.prototype.constructor=Ic;pb.prototype=Object.create(na.prototype);pb.prototype.constructor=pb;Jc.prototype=Object.create(R.prototype);Jc.prototype.constructor=Jc;Tb.prototype=Object.create(na.prototype);Tb.prototype.constructor=Tb;Kc.prototype=Object.create(R.prototype);Kc.prototype.constructor=Kc;Ub.prototype=Object.create(na.prototype);Ub.prototype.constructor=Ub;Lc.prototype=Object.create(R.prototype); +Lc.prototype.constructor=Lc;Vb.prototype=Object.create(C.prototype);Vb.prototype.constructor=Vb;Mc.prototype=Object.create(R.prototype);Mc.prototype.constructor=Mc;Wb.prototype=Object.create(C.prototype);Wb.prototype.constructor=Wb;Nc.prototype=Object.create(R.prototype);Nc.prototype.constructor=Nc;Xb.prototype=Object.create(C.prototype);Xb.prototype.constructor=Xb;var Ug={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=bf(a,0,e,c,!0),g=[];if(!f)return g;var h;if(d){var k= +c;d=[];var m;var l=0;for(m=b.length;l80*c){var p=h=a[0];var r=d=a[1];for(k=c;kh&&(h=l),b>d&&(d=b);h=Math.max(h-p,d-r);h=0!==h?1/h:0}Qc(f,g,c,p,r,h);return g}},Va={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;eVa.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];ff(a);gf(c,a);var f=a.length;b.forEach(ff);for(a=0;aMath.abs(g-k)?[new z(a,1-c),new z(h,1-d),new z(m,1-e),new z(n,1-b)]:[new z(g,1-c),new z(k,1-d),new z(l,1-e),new z(t,1-b)]}};Sc.prototype=Object.create(R.prototype);Sc.prototype.constructor=Sc;Yb.prototype=Object.create(Oa.prototype);Yb.prototype.constructor=Yb;Tc.prototype=Object.create(R.prototype);Tc.prototype.constructor=Tc;sb.prototype=Object.create(C.prototype);sb.prototype.constructor=sb;Uc.prototype=Object.create(R.prototype);Uc.prototype.constructor=Uc;Zb.prototype=Object.create(C.prototype); +Zb.prototype.constructor=Zb;Vc.prototype=Object.create(R.prototype);Vc.prototype.constructor=Vc;$b.prototype=Object.create(C.prototype);$b.prototype.constructor=$b;tb.prototype=Object.create(R.prototype);tb.prototype.constructor=tb;tb.prototype.toJSON=function(){var a=R.prototype.toJSON.call(this);return jf(this.parameters.shapes,a)};ub.prototype=Object.create(C.prototype);ub.prototype.constructor=ub;ub.prototype.toJSON=function(){var a=C.prototype.toJSON.call(this);return jf(this.parameters.shapes, +a)};ac.prototype=Object.create(C.prototype);ac.prototype.constructor=ac;vb.prototype=Object.create(R.prototype);vb.prototype.constructor=vb;Wa.prototype=Object.create(C.prototype);Wa.prototype.constructor=Wa;Wc.prototype=Object.create(vb.prototype);Wc.prototype.constructor=Wc;Xc.prototype=Object.create(Wa.prototype);Xc.prototype.constructor=Xc;Yc.prototype=Object.create(R.prototype);Yc.prototype.constructor=Yc;bc.prototype=Object.create(C.prototype);bc.prototype.constructor=bc;var xa=Object.freeze({WireframeGeometry:Qb, +ParametricGeometry:Fc,ParametricBufferGeometry:Rb,TetrahedronGeometry:Hc,TetrahedronBufferGeometry:Sb,OctahedronGeometry:Ic,OctahedronBufferGeometry:pb,IcosahedronGeometry:Jc,IcosahedronBufferGeometry:Tb,DodecahedronGeometry:Kc,DodecahedronBufferGeometry:Ub,PolyhedronGeometry:Gc,PolyhedronBufferGeometry:na,TubeGeometry:Lc,TubeBufferGeometry:Vb,TorusKnotGeometry:Mc,TorusKnotBufferGeometry:Wb,TorusGeometry:Nc,TorusBufferGeometry:Xb,TextGeometry:Sc,TextBufferGeometry:Yb,SphereGeometry:Tc,SphereBufferGeometry:sb, +RingGeometry:Uc,RingBufferGeometry:Zb,PlaneGeometry:uc,PlaneBufferGeometry:lb,LatheGeometry:Vc,LatheBufferGeometry:$b,ShapeGeometry:tb,ShapeBufferGeometry:ub,ExtrudeGeometry:rb,ExtrudeBufferGeometry:Oa,EdgesGeometry:ac,ConeGeometry:Wc,ConeBufferGeometry:Xc,CylinderGeometry:vb,CylinderBufferGeometry:Wa,CircleGeometry:Yc,CircleBufferGeometry:bc,BoxGeometry:Ib,BoxBufferGeometry:kb});wb.prototype=Object.create(J.prototype);wb.prototype.constructor=wb;wb.prototype.isShadowMaterial=!0;wb.prototype.copy= +function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);return this};cc.prototype=Object.create(ta.prototype);cc.prototype.constructor=cc;cc.prototype.isRawShaderMaterial=!0;Pa.prototype=Object.create(J.prototype);Pa.prototype.constructor=Pa;Pa.prototype.isMeshStandardMaterial=!0;Pa.prototype.copy=function(a){J.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= +a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap= +a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};xb.prototype=Object.create(Pa.prototype);xb.prototype.constructor=xb;xb.prototype.isMeshPhysicalMaterial= +!0;xb.prototype.copy=function(a){Pa.prototype.copy.call(this,a);this.defines={PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Fa.prototype=Object.create(J.prototype);Fa.prototype.constructor=Fa;Fa.prototype.isMeshPhongMaterial=!0;Fa.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= +a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap; +this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};yb.prototype=Object.create(Fa.prototype);yb.prototype.constructor=yb;yb.prototype.isMeshToonMaterial=!0;yb.prototype.copy=function(a){Fa.prototype.copy.call(this, +a);this.gradientMap=a.gradientMap;return this};zb.prototype=Object.create(J.prototype);zb.prototype.constructor=zb;zb.prototype.isMeshNormalMaterial=!0;zb.prototype.copy=function(a){J.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe; +this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Ab.prototype=Object.create(J.prototype);Ab.prototype.constructor=Ab;Ab.prototype.isMeshLambertMaterial=!0;Ab.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive); +this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this}; +Bb.prototype=Object.create(Y.prototype);Bb.prototype.constructor=Bb;Bb.prototype.isLineDashedMaterial=!0;Bb.prototype.copy=function(a){Y.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Vg=Object.freeze({ShadowMaterial:wb,SpriteMaterial:cb,RawShaderMaterial:cc,ShaderMaterial:ta,PointsMaterial:Ea,MeshPhysicalMaterial:xb,MeshStandardMaterial:Pa,MeshPhongMaterial:Fa,MeshToonMaterial:yb,MeshNormalMaterial:zb,MeshLambertMaterial:Ab,MeshDepthMaterial:$a, +MeshDistanceMaterial:ab,MeshBasicMaterial:da,LineDashedMaterial:Bb,LineBasicMaterial:Y,Material:J}),Fb={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},ka=new ce,Ya={};Object.assign(Ga.prototype,{load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=Fb.get(a);if(void 0!==f)return e.manager.itemStart(a), +setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;if(void 0!==Ya[a])Ya[a].push({onLoad:b,onProgress:c,onError:d});else{var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(g){c=g[1];var h=!!g[2];g=g[3];g=window.decodeURIComponent(g);h&&(g=window.atob(g));try{var k=(this.responseType||"").toLowerCase();switch(k){case "arraybuffer":case "blob":var m=new Uint8Array(g.length);for(h=0;hg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(H.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(H.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);Ae.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);Be.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);Ce.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(Ae.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),Be.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),Ce.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(Ae.calc(a), +Be.calc(a),Ce.calc(a));return b};ca.prototype.copy=function(a){L.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(lf(d,e.x,f.x,g.x,c.x),lf(d,e.y,f.y,g.y,c.y));return b};Ka.prototype.copy=function(a){L.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths(); +return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;c=e)break a;else{f=b[1];a=e)break b}d=c;c= +0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ia.arraySlice(c,e,f),this.values=ia.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a= +!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e= +g}if(void 0!==b&&ia.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gm.opacity&&(m.transparent=!0);d.setTextures(k);return d.parse(m)}}()});var De={decodeText:function(a){if("undefined"!==typeof TextDecoder)return(new TextDecoder).decode(a);for(var b="",c=0,d=a.length;cf;f++){var E=h[u++];var A=B[2*E];E=B[2*E+1];A=new z(A,E);2!==f&&c.faceVertexUvs[e][v].push(A);0!==f&&c.faceVertexUvs[e][v+1].push(A)}}y&&(y=3*h[u++],r.normal.set(m[y++],m[y++],m[y]),w.normal.copy(r.normal));if(x)for(e=0;4>e;e++)y=3*h[u++],x=new p(m[y++], +m[y++],m[y]),2!==e&&r.vertexNormals.push(x),0!==e&&w.vertexNormals.push(x);n&&(n=h[u++],n=l[n],r.color.setHex(n),w.color.setHex(n));if(k)for(e=0;4>e;e++)n=h[u++],n=l[n],2!==e&&r.vertexColors.push(new G(n)),0!==e&&w.vertexColors.push(new G(n));c.faces.push(r);c.faces.push(w)}else{r=new Ta;r.a=h[u++];r.b=h[u++];r.c=h[u++];v&&(v=h[u++],r.materialIndex=v);v=c.faces.length;if(e)for(e=0;ef;f++)E=h[u++],A=B[2*E],E=B[2*E+1],A=new z(A,E),c.faceVertexUvs[e][v].push(A); +y&&(y=3*h[u++],r.normal.set(m[y++],m[y++],m[y]));if(x)for(e=0;3>e;e++)y=3*h[u++],x=new p(m[y++],m[y++],m[y]),r.vertexNormals.push(x);n&&(n=h[u++],r.color.setHex(l[n]));if(k)for(e=0;3>e;e++)n=h[u++],r.vertexColors.push(new G(l[n]));c.faces.push(r)}}d=a;u=void 0!==d.influencesPerVertex?d.influencesPerVertex:2;if(d.skinWeights)for(g=0,h=d.skinWeights.length;g +Number.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=m*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=Va.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new db;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var m=[],l=[],n=0;m[n]=void 0;l[n]=[];for(var p= +0,u=f.length;pd&&this._mixBufferRegion(c,a,3*b,1-d,b);d=b;for(var f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a, +c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){fa.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});Object.assign(pf.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a, +b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(pa,{Composite:pf,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new pa.Composite(a,b,c):new pa(a,b,c)},sanitizeNodeName:function(){var a= +/[\[\]\.:\/]/g;return function(b){return b.replace(/\s/g,"_").replace(a,"")}}(),parseTrackName:function(){var a="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",b=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]");a=/(WCOD+)?/.source.replace("WCOD",a);var c=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),d=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),e=new RegExp("^"+b+a+c+d+"$"),f=["material","materials","bones"];return function(a){var b=e.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+ +a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};var c=b.nodeName&&b.nodeName.lastIndexOf(".");if(void 0!==c&&-1!==c){var d=b.nodeName.substring(c+1);-1!==f.indexOf(d)&&(b.nodeName=b.nodeName.substring(0,c),b.objectName=d)}if(null===b.propertyName||0===b.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return b}}(),findNode:function(a,b){if(!b||""===b||"root"===b||"."===b||-1===b||b===a.name||b===a.uuid)return a; +if(a.skeleton){var c=a.skeleton.getBoneByName(b);if(void 0!==c)return c}if(a.children){var d=function(a){for(var c=0;c=b){var p=b++,n=a[p];c[n.uuid]=l;a[l]=n;c[k]=p;a[p]=h;h=0;for(k=e;h!==k;++h){n=d[h];var t=n[l];n[l]=n[p];n[p]=t}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k= +arguments[g].uuid,l=d[k];if(void 0!==l)if(delete d[k],lb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1=== +e?b:f&&1===(e&1)?c-b:b;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0: +this.enabled=!1,b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}if(f&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401: +2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});re.prototype=Object.assign(Object.create(ya.prototype),{constructor:re,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0=== +k&&(k={},h[g]=k);for(h=0;h!==e;++h){var l=d[h],p=l.name,n=k[p];if(void 0===n){n=f[h];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,g,p));continue}n=new qe(pa.create(c,p,b&&b._propertyBindings[h].binding.parsedPath),l.ValueTypeName,l.getValueSize());++n.referenceCount;this._addInactiveBinding(n,g,p)}f[h]=n;a[h].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid, +d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= +[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, +_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a, +b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new z);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new z);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new z; +return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(xe.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)}, +copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new p);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new p);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)}, +at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new p);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new p,b=new p;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);c=b.dot(b);c=b.dot(a)/c;d&&(c=H.clamp(c,0,1));return c}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"), +c=new p);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ed.prototype=Object.create(D.prototype);ed.prototype.constructor=ed;ed.prototype.isImmediateRenderObject=!0;fd.prototype=Object.create(W.prototype);fd.prototype.constructor=fd;fd.prototype.update=function(){var a=new p,b=new p,c=new ra;return function(){var d=["a","b", +"c"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,f=this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,p=k.length;lMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);D.prototype.updateMatrixWorld.call(this,a)};var Nd,ye;Eb.prototype=Object.create(D.prototype);Eb.prototype.constructor=Eb;Eb.prototype.setDirection=function(){var a=new p,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Eb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Eb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};ld.prototype=Object.create(W.prototype); +ld.prototype.constructor=ld;L.create=function(a,b){console.log("THREE.Curve.create() has been deprecated");a.prototype=Object.create(L.prototype);a.prototype.constructor=a;a.prototype.getPoint=b;return a};Object.assign(Xa.prototype,{createPointsGeometry:function(a){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); +a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var b=new R,c=0,d=a.length;c + + + + + + + + + The Cube - A Rubik's Cube Game + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+

+ THE + CUBE +

+
+ Double tap to start +
+
+ 0:00 +
+
+ Complete! +
+
+ + Best Time! +
+
+ +
+ + + + + +
+ +
+ + + +
+ +
+
+ Cube:3x3x3 +
+
+ Total solves:- +
+
+ Best time:- +
+
+ Worst time:- +
+
+ Average of 5:- +
+
+ Average of 12:- +
+
+ Average of 25:- +
+
+ +
+ + + + + +
+ +
+ + + + + + + + + diff --git a/public/the-cube-master/package-lock.json b/public/the-cube-master/package-lock.json new file mode 100644 index 0000000..e7936a8 --- /dev/null +++ b/public/the-cube-master/package-lock.json @@ -0,0 +1,727 @@ +{ + "name": "bsehovac.github.io", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@comandeer/babel-plugin-banner": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@comandeer/babel-plugin-banner/-/babel-plugin-banner-2.0.2.tgz", + "integrity": "sha512-5/GMOcgqBy/+cMYfOTFhqrioolOP+g7ADjl4jo1nYONwVGvMpzKPdweuVaJsC/Ol2PH+GmwlF2WrNP3xjWoSiw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.10", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-evaluate-path": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.4.3.tgz", + "integrity": "sha1-ComvcCwGshcCf6NxkI3UmJ0+Yz8=", + "dev": true + }, + "babel-helper-flip-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=", + "dev": true + }, + "babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=", + "dev": true + }, + "babel-helper-is-void-0": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=", + "dev": true + }, + "babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=", + "dev": true + }, + "babel-helper-remove-or-void": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=", + "dev": true + }, + "babel-helper-to-multiple-sequence-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.4.3.tgz", + "integrity": "sha1-W1GLESf0ezA4dzOGoVYaK0jmMrY=", + "dev": true + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-minify-builtins": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.4.3.tgz", + "integrity": "sha1-nqPVn0rEp7uVjXEtKVVqH4b3+B4=", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "0.4.3" + } + }, + "babel-plugin-minify-constant-folding": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.4.3.tgz", + "integrity": "sha1-MA+d6N2ghEoXaxk2U5YOJK0z4ZE=", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "0.4.3" + } + }, + "babel-plugin-minify-dead-code-elimination": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.4.3.tgz", + "integrity": "sha1-c2KCZYZPkAjQAnUG9Yq+s8HQLZg=", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "0.4.3", + "babel-helper-mark-eval-scopes": "0.4.3", + "babel-helper-remove-or-void": "0.4.3", + "lodash.some": "4.6.0" + } + }, + "babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", + "dev": true, + "requires": { + "babel-helper-is-void-0": "0.4.3" + } + }, + "babel-plugin-minify-guarded-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.3.tgz", + "integrity": "sha1-zHCbRFP9IbHzAod0RMifiEJ845c=", + "dev": true, + "requires": { + "babel-helper-flip-expressions": "0.4.3" + } + }, + "babel-plugin-minify-infinity": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=", + "dev": true + }, + "babel-plugin-minify-mangle-names": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.4.3.tgz", + "integrity": "sha1-FvG/90t6fJPfwkHngx3V+0sCPvc=", + "dev": true, + "requires": { + "babel-helper-mark-eval-scopes": "0.4.3" + } + }, + "babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=", + "dev": true + }, + "babel-plugin-minify-replace": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.4.3.tgz", + "integrity": "sha1-nSifS6FdTmAR6HmfpfG6d+yBIZ0=", + "dev": true + }, + "babel-plugin-minify-simplify": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.4.3.tgz", + "integrity": "sha1-N3VthcYURktLCSfytOQXGR1Vc4o=", + "dev": true, + "requires": { + "babel-helper-flip-expressions": "0.4.3", + "babel-helper-is-nodes-equiv": "0.0.1", + "babel-helper-to-multiple-sequence-expressions": "0.4.3" + } + }, + "babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", + "dev": true, + "requires": { + "babel-helper-is-void-0": "0.4.3" + } + }, + "babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=", + "dev": true + }, + "babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=", + "dev": true + }, + "babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=", + "dev": true + }, + "babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=", + "dev": true + }, + "babel-plugin-transform-property-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=", + "dev": true + }, + "babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=", + "dev": true + }, + "babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=", + "dev": true + }, + "babel-plugin-transform-remove-undefined": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.4.3.tgz", + "integrity": "sha1-1AsNp/kcCMBsxyt2dHTAHEiU3gI=", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "0.4.3" + } + }, + "babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=", + "dev": true + }, + "babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=", + "dev": true + }, + "babel-preset-minify": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.4.3.tgz", + "integrity": "sha1-spw91pGJBThFmPCSuVUVLiah/g8=", + "dev": true, + "requires": { + "babel-plugin-minify-builtins": "0.4.3", + "babel-plugin-minify-constant-folding": "0.4.3", + "babel-plugin-minify-dead-code-elimination": "0.4.3", + "babel-plugin-minify-flip-comparisons": "0.4.3", + "babel-plugin-minify-guarded-expressions": "0.4.3", + "babel-plugin-minify-infinity": "0.4.3", + "babel-plugin-minify-mangle-names": "0.4.3", + "babel-plugin-minify-numeric-literals": "0.4.3", + "babel-plugin-minify-replace": "0.4.3", + "babel-plugin-minify-simplify": "0.4.3", + "babel-plugin-minify-type-constructors": "0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "0.4.3", + "babel-plugin-transform-member-expression-literals": "6.9.4", + "babel-plugin-transform-merge-sibling-variables": "6.9.4", + "babel-plugin-transform-minify-booleans": "6.9.4", + "babel-plugin-transform-property-literals": "6.9.4", + "babel-plugin-transform-regexp-constructors": "0.4.3", + "babel-plugin-transform-remove-console": "6.9.4", + "babel-plugin-transform-remove-debugger": "6.9.4", + "babel-plugin-transform-remove-undefined": "0.4.3", + "babel-plugin-transform-simplify-comparison-operators": "6.9.4", + "babel-plugin-transform-undefined-to-void": "6.9.4", + "lodash.isplainobject": "4.0.6" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.5.7", + "home-or-tmp": "2.0.0", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "magic-string": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.24.1.tgz", + "integrity": "sha512-YBfNxbJiixMzxW40XqJEIldzHyh5f7CZKalo1uZffevyrPEX8Qgo9s0dmcORLHdV47UyvJg8/zD+6hQG3qvJrA==", + "dev": true, + "requires": { + "sourcemap-codec": "1.4.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "rollup-plugin-babel-minify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel-minify/-/rollup-plugin-babel-minify-5.0.0.tgz", + "integrity": "sha512-/XMozvFf1wm0O04FEybfEGl05jq9RQ408Xx/GjCfCau9ETzKYlEkfdi19pj2EvmpbSO/r0yspMKmwnUHNycdsw==", + "dev": true, + "requires": { + "@comandeer/babel-plugin-banner": "2.0.2", + "babel-core": "6.26.3", + "babel-preset-minify": "0.4.3", + "magic-string": "0.24.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "sourcemap-codec": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.1.tgz", + "integrity": "sha512-hX1eNBNuilj8yfFnECh0DzLgwKpBLMIvmhgEhixXNui8lMLBInTI8Kyxt++RwJnMNu7cAUo635L2+N1TxMJCzA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + } + } +} diff --git a/public/the-cube-master/package.json b/public/the-cube-master/package.json new file mode 100644 index 0000000..1c05a9d --- /dev/null +++ b/public/the-cube-master/package.json @@ -0,0 +1,24 @@ +{ + "name": "bsehovac.github.io", + "version": "1.0.0", + "description": "", + "main": "", + "dependencies": {}, + "devDependencies": { + "rollup-plugin-babel-minify": "^5.0.0" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "rollup -c rollup.config.build.js && cp upup.min.js export/ && cp upup.sw.min.js export/ && cp index.html export/ && cp -R assets export/" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/bsehovac/bsehovac.github.io.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/bsehovac/bsehovac.github.io/issues" + }, + "homepage": "https://github.com/bsehovac/bsehovac.github.io#readme" +} diff --git a/public/the-cube-master/rollup.config.build.js b/public/the-cube-master/rollup.config.build.js new file mode 100644 index 0000000..db443f7 --- /dev/null +++ b/public/the-cube-master/rollup.config.build.js @@ -0,0 +1,14 @@ +import minify from 'rollup-plugin-babel-minify'; + +export default { + input: './src/js/Game.js', + plugins: [ + minify({ comments: false, sourceMap: false }), + ], + output: { + format: 'iife', + file: './assets/js/cube.js', + indent: '\t', + sourceMap: false, + }, +}; diff --git a/public/the-cube-master/rollup.config.dev.js b/public/the-cube-master/rollup.config.dev.js new file mode 100644 index 0000000..939960d --- /dev/null +++ b/public/the-cube-master/rollup.config.dev.js @@ -0,0 +1,10 @@ +export default { + input: './src/js/Game.js', + plugins: [], + output: { + format: 'iife', + file: './assets/js/cube.js', + indent: '\t', + sourceMap: false, + }, +}; diff --git a/public/the-cube-master/src/js/Animation.js b/public/the-cube-master/src/js/Animation.js new file mode 100644 index 0000000..c810a13 --- /dev/null +++ b/public/the-cube-master/src/js/Animation.js @@ -0,0 +1,88 @@ +const animationEngine = ( () => { + + let uniqueID = 0; + + class AnimationEngine { + + constructor() { + + this.ids = []; + this.animations = {}; + this.update = this.update.bind( this ); + this.raf = 0; + this.time = 0; + + } + + update() { + + const now = performance.now(); + const delta = now - this.time + this.time = now; + + let i = this.ids.length; + + this.raf = i ? requestAnimationFrame( this.update ) : 0; + + while ( i-- ) + this.animations[ this.ids[ i ] ] && this.animations[ this.ids[ i ] ].update( delta ); + + } + + add( animation ) { + + animation.id = uniqueID ++; + + this.ids.push( animation.id ); + this.animations[ animation.id ] = animation; + + if ( this.raf !== 0 ) return; + + this.time = performance.now(); + this.raf = requestAnimationFrame( this.update ); + + } + + remove( animation ) { + + const index = this.ids.indexOf( animation.id ); + + if ( index < 0 ) return; + + this.ids.splice( index, 1 ); + delete this.animations[ animation.id ]; + animation = null; + + } + + } + + return new AnimationEngine(); + +} )(); + +class Animation { + + constructor( start ) { + + if ( start === true ) this.start(); + + } + + start() { + + animationEngine.add( this ); + + } + + stop() { + + animationEngine.remove( this ); + + } + + update( delta ) {} + +} + +export { Animation }; diff --git a/public/the-cube-master/src/js/Background.js b/public/the-cube-master/src/js/Background.js new file mode 100644 index 0000000..056165d --- /dev/null +++ b/public/the-cube-master/src/js/Background.js @@ -0,0 +1 @@ +Background diff --git a/public/the-cube-master/src/js/Confetti.js b/public/the-cube-master/src/js/Confetti.js new file mode 100644 index 0000000..7bd484b --- /dev/null +++ b/public/the-cube-master/src/js/Confetti.js @@ -0,0 +1,228 @@ +import { Animation } from './Animation.js'; + +class Confetti { + + constructor( game ) { + + this.game = game; + this.started = 0; + + this.options = { + speed: { min: 0.0011, max: 0.0022 }, + revolution: { min: 0.01, max: 0.05 }, + size: { min: 0.1, max: 0.15 }, + colors: [ 0x41aac8, 0x82ca38, 0xffef48, 0xef3923, 0xff8c0a ], + } + + this.geometry = new THREE.PlaneGeometry( 1, 1 ); + this.material = new THREE.MeshLambertMaterial( { side: THREE.DoubleSide } ); + + this.holders = [ + new ConfettiStage( this.game, this, 1, 20 ), + new ConfettiStage( this.game, this, -1, 30 ), + ]; + + } + + start() { + + if ( this.started > 0 ) return; + + this.holders.forEach( holder => { + + this.game.world.scene.add( holder.holder ); + holder.start(); + this.started ++; + + } ); + + } + + stop() { + + if ( this.started == 0 ) return; + + this.holders.forEach( holder => { + + holder.stop( () => { + + this.game.world.scene.remove( holder.holder ); + this.started --; + + } ); + + } ); + + } + + updateColors( colors ) { + + this.holders.forEach( holder => { + + holder.options.colors.forEach( ( color, index ) => { + + holder.options.colors[ index ] = colors[ [ 'D', 'F', 'R', 'B', 'L' ][ index ] ]; + + } ); + + } ); + + } + +} + +class ConfettiStage extends Animation { + + constructor( game, parent, distance, count ) { + + super( false ); + + this.game = game; + this.parent = parent; + + this.distanceFromCube = distance; + + this.count = count; + this.particles = []; + + this.holder = new THREE.Object3D(); + this.holder.rotation.copy( this.game.world.camera.rotation ); + + this.object = new THREE.Object3D(); + this.holder.add( this.object ); + + this.resizeViewport = this.resizeViewport.bind( this ); + this.game.world.onResize.push( this.resizeViewport ) + this.resizeViewport(); + + this.geometry = this.parent.geometry; + this.material = this.parent.material; + + this.options = this.parent.options; + + let i = this.count; + while ( i-- ) this.particles.push( new Particle( this ) ); + + } + + start() { + + this.time = performance.now(); + this.playing = true; + + let i = this.count; + while ( i-- ) this.particles[ i ].reset(); + + super.start(); + + } + + stop( callback ) { + + this.playing = false; + this.completed = 0; + this.callback = callback; + + } + + reset() { + + super.stop(); + + this.callback(); + + } + + update() { + + const now = performance.now(); + const delta = now - this.time; + this.time = now; + + let i = this.count; + + while ( i-- ) + if ( ! this.particles[ i ].completed ) this.particles[ i ].update( delta ); + + if ( ! this.playing && this.completed == this.count ) this.reset(); + + } + + resizeViewport() { + + const fovRad = this.game.world.camera.fov * THREE.Math.DEG2RAD; + + this.height = 2 * Math.tan( fovRad / 2 ) * ( this.game.world.camera.position.length() - this.distanceFromCube ); + this.width = this.height * this.game.world.camera.aspect; + + const scale = 1 / this.game.transition.data.cameraZoom; + + this.width *= scale; + this.height *= scale; + + this.object.position.z = this.distanceFromCube; + this.object.position.y = this.height / 2; + + } + +} + +class Particle { + + constructor( confetti ) { + + this.confetti = confetti; + this.options = this.confetti.options; + + this.velocity = new THREE.Vector3(); + this.force = new THREE.Vector3(); + + this.mesh = new THREE.Mesh( this.confetti.geometry, this.confetti.material.clone() ); + this.confetti.object.add( this.mesh ); + + this.size = THREE.Math.randFloat( this.options.size.min, this.options.size.max ); + this.mesh.scale.set( this.size, this.size, this.size ); + + return this; + + } + + reset( randomHeight = true ) { + + this.completed = false; + + this.color = new THREE.Color( this.options.colors[ Math.floor( Math.random() * this.options.colors.length ) ] ); + this.mesh.material.color.set( this.color ); + + this.speed = THREE.Math.randFloat( this.options.speed.min, this.options.speed.max ) * - 1; + this.mesh.position.x = THREE.Math.randFloat( - this.confetti.width / 2, this.confetti.width / 2 ); + this.mesh.position.y = ( randomHeight ) + ? THREE.Math.randFloat( this.size, this.confetti.height + this.size ) + : this.size; + + this.revolutionSpeed = THREE.Math.randFloat( this.options.revolution.min, this.options.revolution.max ); + this.revolutionAxis = [ 'x', 'y', 'z' ][ Math.floor( Math.random() * 3 ) ]; + this.mesh.rotation.set( Math.random() * Math.PI / 3, Math.random() * Math.PI / 3, Math.random() * Math.PI / 3 ); + + } + + stop() { + + this.completed = true; + this.confetti.completed ++; + + } + + update( delta ) { + + this.mesh.position.y += this.speed * delta; + this.mesh.rotation[ this.revolutionAxis ] += this.revolutionSpeed; + + if ( this.mesh.position.y < - this.confetti.height - this.size ) + ( this.confetti.playing ) ? this.reset( false ) : this.stop(); + + } + +} + +export { Confetti }; diff --git a/public/the-cube-master/src/js/Controls.js b/public/the-cube-master/src/js/Controls.js new file mode 100644 index 0000000..508920d --- /dev/null +++ b/public/the-cube-master/src/js/Controls.js @@ -0,0 +1,580 @@ +import { Tween, Easing } from './Tween.js'; +import { Draggable } from './Draggable.js'; + +const STILL = 0; +const PREPARING = 1; +const ROTATING = 2; +const ANIMATING = 3; + +class Controls { + + constructor( game ) { + + this.game = game; + + this.flipConfig = 0; + + this.flipEasings = [ Easing.Power.Out( 3 ), Easing.Sine.Out(), Easing.Back.Out( 1.5 ) ]; + this.flipSpeeds = [ 125, 200, 300 ]; + + this.raycaster = new THREE.Raycaster(); + + const helperMaterial = new THREE.MeshBasicMaterial( { depthWrite: false, transparent: true, opacity: 0, color: 0x0033ff } ); + + this.group = new THREE.Object3D(); + this.group.name = 'controls'; + this.game.cube.object.add( this.group ); + + this.helper = new THREE.Mesh( + new THREE.PlaneBufferGeometry( 200, 200 ), + helperMaterial.clone() + ); + + this.helper.rotation.set( 0, Math.PI / 4, 0 ); + this.game.world.scene.add( this.helper ); + + this.edges = new THREE.Mesh( + new THREE.BoxBufferGeometry( 1, 1, 1 ), + helperMaterial.clone(), + ); + + this.game.world.scene.add( this.edges ); + + this.onSolved = () => {}; + this.onMove = () => {}; + + this.momentum = []; + + this.scramble = null; + this.state = STILL; + this.enabled = false; + + this.initDraggable(); + + } + + enable() { + + this.draggable.enable(); + this.enabled = true; + + } + + disable() { + + this.draggable.disable(); + this.enabled = false; + + } + + initDraggable() { + + this.draggable = new Draggable( this.game.dom.game ); + + this.draggable.onDragStart = position => { + + if ( this.scramble !== null ) return; + if ( this.state === PREPARING || this.state === ROTATING ) return; + + this.gettingDrag = this.state === ANIMATING; + + const edgeIntersect = this.getIntersect( position.current, this.edges, false ); + + if ( edgeIntersect !== false ) { + + this.dragIntersect = this.getIntersect( position.current, this.game.cube.cubes, true ); + + } + + if ( edgeIntersect !== false && this.dragIntersect !== false ) { + + this.dragNormal = edgeIntersect.face.normal.round(); + this.flipType = 'layer'; + + this.attach( this.helper, this.edges ) + + this.helper.rotation.set( 0, 0, 0 ); + this.helper.position.set( 0, 0, 0 ); + this.helper.lookAt( this.dragNormal ); + this.helper.translateZ( 0.5 ); + this.helper.updateMatrixWorld(); + + this.detach( this.helper, this.edges ); + + } else { + + this.dragNormal = new THREE.Vector3( 0, 0, 1 ); + this.flipType = 'cube'; + + this.helper.position.set( 0, 0, 0 ); + this.helper.rotation.set( 0, Math.PI / 4, 0 ); + this.helper.updateMatrixWorld(); + + } + + let planeIntersect = this.getIntersect( position.current, this.helper, false ); + if ( planeIntersect === false ) return; + + this.dragCurrent = this.helper.worldToLocal( planeIntersect.point ); + this.dragTotal = new THREE.Vector3(); + this.state = ( this.state === STILL ) ? PREPARING : this.state; + + }; + + this.draggable.onDragMove = position => { + + if ( this.scramble !== null ) return; + if ( this.state === STILL || ( this.state === ANIMATING && this.gettingDrag === false ) ) return; + + const planeIntersect = this.getIntersect( position.current, this.helper, false ); + if ( planeIntersect === false ) return; + + const point = this.helper.worldToLocal( planeIntersect.point.clone() ); + + this.dragDelta = point.clone().sub( this.dragCurrent ).setZ( 0 ); + this.dragTotal.add( this.dragDelta ); + this.dragCurrent = point; + this.addMomentumPoint( this.dragDelta ); + + if ( this.state === PREPARING && this.dragTotal.length() > 0.05 ) { + + this.dragDirection = this.getMainAxis( this.dragTotal ); + + if ( this.flipType === 'layer' ) { + + const direction = new THREE.Vector3(); + direction[ this.dragDirection ] = 1; + + const worldDirection = this.helper.localToWorld( direction ).sub( this.helper.position ); + const objectDirection = this.edges.worldToLocal( worldDirection ).round(); + + this.flipAxis = objectDirection.cross( this.dragNormal ).negate(); + + this.selectLayer( this.getLayer( false ) ); + + } else { + + const axis = ( this.dragDirection != 'x' ) + ? ( ( this.dragDirection == 'y' && position.current.x > this.game.world.width / 2 ) ? 'z' : 'x' ) + : 'y'; + + this.flipAxis = new THREE.Vector3(); + this.flipAxis[ axis ] = 1 * ( ( axis == 'x' ) ? - 1 : 1 ); + + } + + this.flipAngle = 0; + this.state = ROTATING; + + } else if ( this.state === ROTATING ) { + + const rotation = this.dragDelta[ this.dragDirection ]; + + if ( this.flipType === 'layer' ) { + + this.group.rotateOnAxis( this.flipAxis, rotation ); + this.flipAngle += rotation; + + } else { + + this.edges.rotateOnWorldAxis( this.flipAxis, rotation ); + this.game.cube.object.rotation.copy( this.edges.rotation ); + this.flipAngle += rotation; + + } + + } + + }; + + this.draggable.onDragEnd = position => { + + if ( this.scramble !== null ) return; + if ( this.state !== ROTATING ) { + + this.gettingDrag = false; + this.state = STILL; + return; + + } + + this.state = ANIMATING; + + const momentum = this.getMomentum()[ this.dragDirection ]; + const flip = ( Math.abs( momentum ) > 0.05 && Math.abs( this.flipAngle ) < Math.PI / 2 ); + + const angle = flip + ? this.roundAngle( this.flipAngle + Math.sign( this.flipAngle ) * ( Math.PI / 4 ) ) + : this.roundAngle( this.flipAngle ); + + const delta = angle - this.flipAngle; + + if ( this.flipType === 'layer' ) { + + this.rotateLayer( delta, false, layer => { + + this.game.storage.saveGame(); + + this.state = this.gettingDrag ? PREPARING : STILL; + this.gettingDrag = false; + + this.checkIsSolved(); + + } ); + + } else { + + this.rotateCube( delta, () => { + + this.state = this.gettingDrag ? PREPARING : STILL; + this.gettingDrag = false; + + } ); + + } + + }; + + } + + rotateLayer( rotation, scramble, callback ) { + + const config = scramble ? 0 : this.flipConfig; + + const easing = this.flipEasings[ config ]; + const duration = this.flipSpeeds[ config ] + const bounce = ( config == 2 ) ? this.bounceCube() : ( () => {} ); + + this.rotationTween = new Tween( { + easing: easing, + duration: duration, + onUpdate: tween => { + + let deltaAngle = tween.delta * rotation; + this.group.rotateOnAxis( this.flipAxis, deltaAngle ); + bounce( tween.value, deltaAngle, rotation ); + + }, + onComplete: () => { + + if ( ! scramble ) this.onMove(); + + const layer = this.flipLayer.slice( 0 ); + + this.game.cube.object.rotation.setFromVector3( this.snapRotation( this.game.cube.object.rotation.toVector3() ) ); + this.group.rotation.setFromVector3( this.snapRotation( this.group.rotation.toVector3() ) ); + this.deselectLayer( this.flipLayer ); + + callback( layer ); + + }, + } ); + + } + + bounceCube() { + + let fixDelta = true; + + return ( progress, delta, rotation ) => { + + if ( progress >= 1 ) { + + if ( fixDelta ) { + + delta = ( progress - 1 ) * rotation; + fixDelta = false; + + } + + this.game.cube.object.rotateOnAxis( this.flipAxis, delta ); + + } + + } + + } + + rotateCube( rotation, callback ) { + + const config = this.flipConfig; + const easing = [ Easing.Power.Out( 4 ), Easing.Sine.Out(), Easing.Back.Out( 2 ) ][ config ]; + const duration = [ 100, 150, 350 ][ config ] + + this.rotationTween = new Tween( { + easing: easing, + duration: duration, + onUpdate: tween => { + + this.edges.rotateOnWorldAxis( this.flipAxis, tween.delta * rotation ); + this.game.cube.object.rotation.copy( this.edges.rotation ); + + }, + onComplete: () => { + + this.edges.rotation.setFromVector3( this.snapRotation( this.edges.rotation.toVector3() ) ); + this.game.cube.object.rotation.copy( this.edges.rotation ); + callback(); + + }, + } ); + + } + + selectLayer( layer ) { + + this.group.rotation.set( 0, 0, 0 ); + this.movePieces( layer, this.game.cube.object, this.group ); + this.flipLayer = layer; + + } + + deselectLayer( layer ) { + + this.movePieces( layer, this.group, this.game.cube.object ); + this.flipLayer = null; + + } + + movePieces( layer, from, to ) { + + from.updateMatrixWorld(); + to.updateMatrixWorld(); + + layer.forEach( index => { + + const piece = this.game.cube.pieces[ index ]; + + piece.applyMatrix( from.matrixWorld ); + from.remove( piece ); + piece.applyMatrix( new THREE.Matrix4().getInverse( to.matrixWorld ) ); + to.add( piece ); + + } ); + + } + + getLayer( position ) { + + const scalar = { 2: 6, 3: 3, 4: 4, 5: 3 }[ this.game.cube.size ]; + const layer = []; + + let axis; + + if ( position === false ) { + + const piece = this.dragIntersect.object.parent; + + axis = this.getMainAxis( this.flipAxis ); + position = piece.position.clone() .multiplyScalar( scalar ) .round(); + + } else { + + axis = this.getMainAxis( position ); + + } + + this.game.cube.pieces.forEach( piece => { + + const piecePosition = piece.position.clone().multiplyScalar( scalar ).round(); + + if ( piecePosition[ axis ] == position[ axis ] ) layer.push( piece.name ); + + } ); + + return layer; + + } + + keyboardMove( type, move, callback ) { + + if ( this.state !== STILL ) return; + if ( this.enabled !== true ) return; + + if ( type === 'LAYER' ) { + + const layer = this.getLayer( move.position ); + + this.flipAxis = new THREE.Vector3(); + this.flipAxis[ move.axis ] = 1; + this.state = ROTATING; + + this.selectLayer( layer ); + this.rotateLayer( move.angle, false, layer => { + + this.game.storage.saveGame(); + this.state = STILL; + this.checkIsSolved(); + + } ); + + } else if ( type === 'CUBE' ) { + + this.flipAxis = new THREE.Vector3(); + this.flipAxis[ move.axis ] = 1; + this.state = ROTATING; + + this.rotateCube( move.angle, () => { + + this.state = STILL; + + } ); + + } + + } + + scrambleCube() { + + if ( this.scramble == null ) { + + this.scramble = this.game.scrambler; + this.scramble.callback = ( typeof callback !== 'function' ) ? () => {} : callback; + + } + + const converted = this.scramble.converted; + const move = converted[ 0 ]; + const layer = this.getLayer( move.position ); + + this.flipAxis = new THREE.Vector3(); + this.flipAxis[ move.axis ] = 1; + + this.selectLayer( layer ); + this.rotateLayer( move.angle, true, () => { + + converted.shift(); + + if ( converted.length > 0 ) { + + this.scrambleCube(); + + } else { + + this.scramble = null; + this.game.storage.saveGame(); + + } + + } ); + + } + + getIntersect( position, object, multiple ) { + + this.raycaster.setFromCamera( + this.draggable.convertPosition( position.clone() ), + this.game.world.camera + ); + + const intersect = ( multiple ) + ? this.raycaster.intersectObjects( object ) + : this.raycaster.intersectObject( object ); + + return ( intersect.length > 0 ) ? intersect[ 0 ] : false; + + } + + getMainAxis( vector ) { + + return Object.keys( vector ).reduce( + ( a, b ) => Math.abs( vector[ a ] ) > Math.abs( vector[ b ] ) ? a : b + ); + + } + + detach( child, parent ) { + + child.applyMatrix( parent.matrixWorld ); + parent.remove( child ); + this.game.world.scene.add( child ); + + } + + attach( child, parent ) { + + child.applyMatrix( new THREE.Matrix4().getInverse( parent.matrixWorld ) ); + this.game.world.scene.remove( child ); + parent.add( child ); + + } + + addMomentumPoint( delta ) { + + const time = Date.now(); + + this.momentum = this.momentum.filter( moment => time - moment.time < 500 ); + + if ( delta !== false ) this.momentum.push( { delta, time } ); + + } + + getMomentum() { + + const points = this.momentum.length; + const momentum = new THREE.Vector2(); + + this.addMomentumPoint( false ); + + this.momentum.forEach( ( point, index ) => { + + momentum.add( point.delta.multiplyScalar( index / points ) ) + + } ); + + return momentum; + + } + + roundAngle( angle ) { + + const round = Math.PI / 2; + return Math.sign( angle ) * Math.round( Math.abs( angle) / round ) * round; + + } + + snapRotation( angle ) { + + return angle.set( + this.roundAngle( angle.x ), + this.roundAngle( angle.y ), + this.roundAngle( angle.z ) + ); + + } + + checkIsSolved() { + + const start = performance.now(); + + let solved = true; + const sides = { 'x-': [], 'x+': [], 'y-': [], 'y+': [], 'z-': [], 'z+': [] }; + + const positions = []; + + this.game.cube.edges.forEach( edge => { + + const position = edge.parent + .localToWorld( edge.position.clone() ) + .sub( this.game.cube.object.position ); + + const mainAxis = this.getMainAxis( position ); + const mainSign = position.multiplyScalar( 2 ).round()[ mainAxis ] < 1 ? '-' : '+'; + + sides[ mainAxis + mainSign ].push( edge.name ); + + } ); + + Object.keys( sides ).forEach( side => { + + if ( ! sides[ side ].every( value => value === sides[ side ][ 0 ] ) ) solved = false; + + } ); + + if ( solved ) this.onSolved(); + + } + +} + +export { Controls }; diff --git a/public/the-cube-master/src/js/Cube.js b/public/the-cube-master/src/js/Cube.js new file mode 100644 index 0000000..934fc4a --- /dev/null +++ b/public/the-cube-master/src/js/Cube.js @@ -0,0 +1,236 @@ +import { RoundedBoxGeometry } from './plugins/RoundedBoxGeometry.js'; +import { RoundedPlaneGeometry } from './plugins/RoundedPlaneGeometry.js'; + +class Cube { + + constructor( game ) { + + this.game = game; + this.size = 3; + + this.geometry = { + pieceCornerRadius: 0.12, + edgeCornerRoundness: 0.15, + edgeScale: 0.82, + edgeDepth: 0.01, + }; + + this.holder = new THREE.Object3D(); + this.object = new THREE.Object3D(); + this.animator = new THREE.Object3D(); + + this.holder.add( this.animator ); + this.animator.add( this.object ); + + this.game.world.scene.add( this.holder ); + + } + + init() { + + this.cubes = []; + this.object.children = []; + this.object.add( this.game.controls.group ); + + if ( this.size === 2 ) this.scale = 1.25; + else if ( this.size === 3 ) this.scale = 1; + else if ( this.size > 3 ) this.scale = 3 / this.size; + + this.object.scale.set( this.scale, this.scale, this.scale ); + + const controlsScale = this.size === 2 ? 0.825 : 1; + this.game.controls.edges.scale.set( controlsScale, controlsScale, controlsScale ); + + this.generatePositions(); + this.generateModel(); + + this.pieces.forEach( piece => { + + this.cubes.push( piece.userData.cube ); + this.object.add( piece ); + + } ); + + this.holder.traverse( node => { + + if ( node.frustumCulled ) node.frustumCulled = false; + + } ); + + this.updateColors( this.game.themes.getColors() ); + + this.sizeGenerated = this.size; + + } + + resize( force = false ) { + + if ( this.size !== this.sizeGenerated || force ) { + + this.size = this.game.preferences.ranges.size.value; + + this.reset(); + this.init(); + + this.game.saved = false; + this.game.timer.reset(); + this.game.storage.clearGame(); + + } + + } + + reset() { + + this.game.controls.edges.rotation.set( 0, 0, 0 ); + + this.holder.rotation.set( 0, 0, 0 ); + this.object.rotation.set( 0, 0, 0 ); + this.animator.rotation.set( 0, 0, 0 ); + + } + + generatePositions() { + + const m = this.size - 1; + const first = this.size % 2 !== 0 + ? 0 - Math.floor(this.size / 2) + : 0.5 - this.size / 2; + + let x, y, z; + + this.positions = []; + + for ( x = 0; x < this.size; x ++ ) { + for ( y = 0; y < this.size; y ++ ) { + for ( z = 0; z < this.size; z ++ ) { + + let position = new THREE.Vector3(first + x, first + y, first + z); + let edges = []; + + if ( x == 0 ) edges.push(0); + if ( x == m ) edges.push(1); + if ( y == 0 ) edges.push(2); + if ( y == m ) edges.push(3); + if ( z == 0 ) edges.push(4); + if ( z == m ) edges.push(5); + + position.edges = edges; + this.positions.push( position ); + + } + } + } + + } + + generateModel() { + + this.pieces = []; + this.edges = []; + + const pieceSize = 1 / 3; + + const mainMaterial = new THREE.MeshLambertMaterial(); + + const pieceMesh = new THREE.Mesh( + new RoundedBoxGeometry( pieceSize, this.geometry.pieceCornerRadius, 3 ), + mainMaterial.clone() + ); + + const edgeGeometry = RoundedPlaneGeometry( + pieceSize, + this.geometry.edgeCornerRoundness, + this.geometry.edgeDepth + ); + + this.positions.forEach( ( position, index ) => { + + const piece = new THREE.Object3D(); + const pieceCube = pieceMesh.clone(); + const pieceEdges = []; + + piece.position.copy( position.clone().divideScalar( 3 ) ); + piece.add( pieceCube ); + piece.name = index; + piece.edgesName = ''; + + position.edges.forEach( position => { + + const edge = new THREE.Mesh( edgeGeometry, mainMaterial.clone() ); + const name = [ 'L', 'R', 'D', 'U', 'B', 'F' ][ position ]; + const distance = pieceSize / 2; + + edge.position.set( + distance * [ - 1, 1, 0, 0, 0, 0 ][ position ], + distance * [ 0, 0, - 1, 1, 0, 0 ][ position ], + distance * [ 0, 0, 0, 0, - 1, 1 ][ position ] + ); + + edge.rotation.set( + Math.PI / 2 * [ 0, 0, 1, - 1, 0, 0 ][ position ], + Math.PI / 2 * [ - 1, 1, 0, 0, 2, 0 ][ position ], + 0 + ); + + edge.scale.set( + this.geometry.edgeScale, + this.geometry.edgeScale, + this.geometry.edgeScale + ); + + edge.name = name; + + piece.add( edge ); + pieceEdges.push( name ); + this.edges.push( edge ); + + } ); + + piece.userData.edges = pieceEdges; + piece.userData.cube = pieceCube; + + piece.userData.start = { + position: piece.position.clone(), + rotation: piece.rotation.clone(), + }; + + this.pieces.push( piece ); + + } ); + + } + + updateColors( colors ) { + + if ( typeof this.pieces !== 'object' && typeof this.edges !== 'object' ) return; + + this.pieces.forEach( piece => piece.userData.cube.material.color.setHex( colors.P ) ); + this.edges.forEach( edge => edge.material.color.setHex( colors[ edge.name ] ) ); + + } + + loadFromData( data ) { + + this.size = data.size; + + this.reset(); + this.init(); + + this.pieces.forEach( piece => { + + const index = data.names.indexOf( piece.name ); + + const position = data.positions[index]; + const rotation = data.rotations[index]; + + piece.position.set( position.x, position.y, position.z ); + piece.rotation.set( rotation.x, rotation.y, rotation.z ); + + } ); + + } + +} + +export { Cube }; diff --git a/public/the-cube-master/src/js/Draggable.js b/public/the-cube-master/src/js/Draggable.js new file mode 100644 index 0000000..7387c72 --- /dev/null +++ b/public/the-cube-master/src/js/Draggable.js @@ -0,0 +1,132 @@ +window.addEventListener( 'touchmove', () => {} ); +document.addEventListener( 'touchmove', event => { event.preventDefault(); }, { passive: false } ); + +class Draggable { + + constructor( element, options ) { + + this.position = { + current: new THREE.Vector2(), + start: new THREE.Vector2(), + delta: new THREE.Vector2(), + old: new THREE.Vector2(), + drag: new THREE.Vector2(), + }; + + this.options = Object.assign( { + calcDelta: false, + }, options || {} ); + + this.element = element; + this.touch = null; + + this.drag = { + + start: ( event ) => { + + if ( event.type == 'mousedown' && event.which != 1 ) return; + if ( event.type == 'touchstart' && event.touches.length > 1 ) return; + + this.getPositionCurrent( event ); + + if ( this.options.calcDelta ) { + + this.position.start = this.position.current.clone(); + this.position.delta.set( 0, 0 ); + this.position.drag.set( 0, 0 ); + + } + + this.touch = ( event.type == 'touchstart' ); + + this.onDragStart( this.position ); + + window.addEventListener( ( this.touch ) ? 'touchmove' : 'mousemove', this.drag.move, false ); + window.addEventListener( ( this.touch ) ? 'touchend' : 'mouseup', this.drag.end, false ); + + }, + + move: ( event ) => { + + if ( this.options.calcDelta ) { + + this.position.old = this.position.current.clone(); + + } + + this.getPositionCurrent( event ); + + if ( this.options.calcDelta ) { + + this.position.delta = this.position.current.clone().sub( this.position.old ); + this.position.drag = this.position.current.clone().sub( this.position.start ); + + } + + this.onDragMove( this.position ); + + }, + + end: ( event ) => { + + this.getPositionCurrent( event ); + + this.onDragEnd( this.position ); + + window.removeEventListener( ( this.touch ) ? 'touchmove' : 'mousemove', this.drag.move, false ); + window.removeEventListener( ( this.touch ) ? 'touchend' : 'mouseup', this.drag.end, false ); + + }, + + }; + + this.onDragStart = () => {}; + this.onDragMove = () => {}; + this.onDragEnd = () => {}; + + this.enable(); + + return this; + + } + + enable() { + + this.element.addEventListener( 'touchstart', this.drag.start, false ); + this.element.addEventListener( 'mousedown', this.drag.start, false ); + + return this; + + } + + disable() { + + this.element.removeEventListener( 'touchstart', this.drag.start, false ); + this.element.removeEventListener( 'mousedown', this.drag.start, false ); + + return this; + + } + + getPositionCurrent( event ) { + + const dragEvent = event.touches + ? ( event.touches[ 0 ] || event.changedTouches[ 0 ] ) + : event; + + this.position.current.set( dragEvent.pageX, dragEvent.pageY ); + + } + + convertPosition( position ) { + + position.x = ( position.x / this.element.offsetWidth ) * 2 - 1; + position.y = - ( ( position.y / this.element.offsetHeight ) * 2 - 1 ); + + return position; + + } + +} + +export { Draggable }; diff --git a/public/the-cube-master/src/js/Easing.js b/public/the-cube-master/src/js/Easing.js new file mode 100644 index 0000000..a7c5cbf --- /dev/null +++ b/public/the-cube-master/src/js/Easing.js @@ -0,0 +1,83 @@ +const Easing = { + + Power: { + + In: power => { + + power = Math.round( power || 1 ); + + return t => Math.pow( t, power ); + + }, + + Out: power => { + + power = Math.round( power || 1 ); + + return t => 1 - Math.abs( Math.pow( t - 1, power ) ); + + }, + + InOut: power => { + + power = Math.round( power || 1 ); + + return t => ( t < 0.5 ) + ? Math.pow( t * 2, power ) / 2 + : ( 1 - Math.abs( Math.pow( ( t * 2 - 1 ) - 1, power ) ) ) / 2 + 0.5; + + }, + + }, + + Sine: { + + In: () => t => 1 + Math.sin( Math.PI / 2 * t - Math.PI / 2 ), + + Out: () => t => Math.sin( Math.PI / 2 * t ), + + InOut: () => t => ( 1 + Math.sin( Math.PI * t - Math.PI / 2 ) ) / 2, + + }, + + Back: { + + Out: s => { + + s = s || 1.70158; + + return t => { return ( t -= 1 ) * t * ( ( s + 1 ) * t + s ) + 1; }; + + }, + + In: s => { + + s = s || 1.70158; + + return t => { return t * t * ( ( s + 1 ) * t - s ); }; + + } + + }, + + Elastic: { + + Out: ( amplitude, period ) => { + + let PI2 = Math.PI * 2; + + let p1 = ( amplitude >= 1 ) ? amplitude : 1; + let p2 = ( period || 0.3 ) / ( amplitude < 1 ? amplitude : 1 ); + let p3 = p2 / PI2 * ( Math.asin( 1 / p1 ) || 0 ); + + p2 = PI2 / p2; + + return t => { return p1 * Math.pow( 2, -10 * t ) * Math.sin( ( t - p3 ) * p2 ) + 1 } + + }, + + }, + +}; + +export { Easing }; diff --git a/public/the-cube-master/src/js/Game.js b/public/the-cube-master/src/js/Game.js new file mode 100644 index 0000000..e4e5048 --- /dev/null +++ b/public/the-cube-master/src/js/Game.js @@ -0,0 +1,417 @@ +import { World } from './World.js'; +import { Cube } from './Cube.js'; +import { Controls } from './Controls.js'; +import { Scrambler } from './Scrambler.js'; +import { Transition } from './Transition.js'; +import { Timer } from './Timer.js'; +import { Preferences } from './Preferences.js'; +import { Confetti } from './Confetti.js'; +import { Scores } from './Scores.js'; +import { Storage } from './Storage.js'; +import { Themes } from './Themes.js'; +import { ThemeEditor } from './ThemeEditor.js'; +import { States } from './States.js'; +// import { Keyboard } from './Keyboard.js'; + +import { Icons } from './Icons.js'; + +const STATE = { + Menu: 0, + Playing: 1, + Complete: 2, + Stats: 3, + Prefs: 4, + Theme: 5, +}; + +const BUTTONS = { + Menu: [ 'stats', 'prefs' ], + Playing: [ 'back' ], + Complete: [], + Stats: [], + Prefs: [ 'back', 'theme' ], + Theme: [ 'back', 'reset' ], + None: [], +}; + +const SHOW = true; +const HIDE = false; + +const FAST = true; +const SLOW = false; + +class Game { + + constructor() { + + this.dom = { + ui: document.querySelector( '.ui' ), + game: document.querySelector( '.ui__game' ), + back: document.querySelector( '.ui__background' ), + prefs: document.querySelector( '.ui__prefs' ), + theme: document.querySelector( '.ui__theme' ), + stats: document.querySelector( '.ui__stats' ), + texts: { + title: document.querySelector( '.text--title' ), + note: document.querySelector( '.text--note' ), + timer: document.querySelector( '.text--timer' ), + complete: document.querySelector( '.text--complete' ), + best: document.querySelector( '.text--best-time' ), + theme: document.querySelector( '.text--theme' ), + }, + buttons: { + prefs: document.querySelector( '.btn--prefs' ), + back: document.querySelector( '.btn--back' ), + stats: document.querySelector( '.btn--stats' ), + reset: document.querySelector( '.btn--reset' ), + theme: document.querySelector( '.btn--theme' ), + }, + }; + + this.world = new World( this ); + this.cube = new Cube( this ); + this.controls = new Controls( this ); + this.scrambler = new Scrambler( this ); + this.transition = new Transition( this ); + this.timer = new Timer( this ); + this.preferences = new Preferences( this ); + this.scores = new Scores( this ); + this.storage = new Storage( this ); + this.confetti = new Confetti( this ); + this.themes = new Themes( this ); + this.themeEditor = new ThemeEditor( this ); + + this.initActions(); + + this.state = STATE.Menu; + this.newGame = false; + this.saved = false; + + this.storage.init(); + this.preferences.init(); + this.cube.init(); + this.transition.init(); + + this.storage.loadGame(); + this.scores.calcStats(); + + setTimeout( () => { + + this.transition.float(); + this.transition.cube( SHOW ); + + setTimeout( () => this.transition.title( SHOW ), 700 ); + setTimeout( () => this.transition.buttons( BUTTONS.Menu, BUTTONS.None ), 1000 ); + + }, 500 ); + + } + + initActions() { + + let tappedTwice = false; + + this.dom.game.addEventListener( 'click', event => { + + if ( this.transition.activeTransitions > 0 ) return; + if ( this.state === STATE.Playing ) return; + + if ( this.state === STATE.Menu ) { + + if ( ! tappedTwice ) { + + tappedTwice = true; + setTimeout( () => tappedTwice = false, 300 ); + return false; + + } + + this.game( SHOW ); + + } else if ( this.state === STATE.Complete ) { + + this.complete( HIDE ); + + } else if ( this.state === STATE.Stats ) { + + this.stats( HIDE ); + + } + + }, false ); + + this.controls.onMove = () => { + + if ( this.newGame ) { + + this.timer.start( true ); + this.newGame = false; + + } + + } + + this.dom.buttons.back.onclick = event => { + + if ( this.transition.activeTransitions > 0 ) return; + + if ( this.state === STATE.Playing ) { + + this.game( HIDE ); + + } else if ( this.state === STATE.Prefs ) { + + this.prefs( HIDE ); + + } else if ( this.state === STATE.Theme ) { + + this.theme( HIDE ); + + } + + }; + + this.dom.buttons.reset.onclick = event => { + + if ( this.state === STATE.Theme ) { + + this.themeEditor.resetTheme(); + + } + + }; + + this.dom.buttons.prefs.onclick = event => this.prefs( SHOW ); + + this.dom.buttons.theme.onclick = event => this.theme( SHOW ); + + this.dom.buttons.stats.onclick = event => this.stats( SHOW ); + + this.controls.onSolved = () => this.complete( SHOW ); + + } + + game( show ) { + + if ( show ) { + + if ( ! this.saved ) { + + this.scrambler.scramble(); + this.controls.scrambleCube(); + this.newGame = true; + + } + + const duration = this.saved ? 0 : + this.scrambler.converted.length * ( this.controls.flipSpeeds[0] + 10 ); + + this.state = STATE.Playing; + this.saved = true; + + this.transition.buttons( BUTTONS.None, BUTTONS.Menu ); + + this.transition.zoom( STATE.Playing, duration ); + this.transition.title( HIDE ); + + setTimeout( () => { + + this.transition.timer( SHOW ); + this.transition.buttons( BUTTONS.Playing, BUTTONS.None ); + + }, this.transition.durations.zoom - 1000 ); + + setTimeout( () => { + + this.controls.enable(); + if ( ! this.newGame ) this.timer.start( true ) + + }, this.transition.durations.zoom ); + + } else { + + this.state = STATE.Menu; + + this.transition.buttons( BUTTONS.Menu, BUTTONS.Playing ); + + this.transition.zoom( STATE.Menu, 0 ); + + this.controls.disable(); + if ( ! this.newGame ) this.timer.stop(); + this.transition.timer( HIDE ); + + setTimeout( () => this.transition.title( SHOW ), this.transition.durations.zoom - 1000 ); + + this.playing = false; + this.controls.disable(); + + } + + } + + prefs( show ) { + + if ( show ) { + + if ( this.transition.activeTransitions > 0 ) return; + + this.state = STATE.Prefs; + + this.transition.buttons( BUTTONS.Prefs, BUTTONS.Menu ); + + this.transition.title( HIDE ); + this.transition.cube( HIDE ); + + setTimeout( () => this.transition.preferences( SHOW ), 1000 ); + + } else { + + this.cube.resize(); + + this.state = STATE.Menu; + + this.transition.buttons( BUTTONS.Menu, BUTTONS.Prefs ); + + this.transition.preferences( HIDE ); + + setTimeout( () => this.transition.cube( SHOW ), 500 ); + setTimeout( () => this.transition.title( SHOW ), 1200 ); + + } + + } + + theme( show ) { + + this.themeEditor.colorPicker( show ); + + if ( show ) { + + if ( this.transition.activeTransitions > 0 ) return; + + this.cube.loadFromData( States[ '3' ][ 'checkerboard' ] ); + + this.themeEditor.setHSL( null, false ); + + this.state = STATE.Theme; + + this.transition.buttons( BUTTONS.Theme, BUTTONS.Prefs ); + + this.transition.preferences( HIDE ); + + setTimeout( () => this.transition.cube( SHOW, true ), 500 ); + setTimeout( () => this.transition.theming( SHOW ), 1000 ); + + } else { + + this.state = STATE.Prefs; + + this.transition.buttons( BUTTONS.Prefs, BUTTONS.Theme ); + + this.transition.cube( HIDE, true ); + this.transition.theming( HIDE ); + + setTimeout( () => this.transition.preferences( SHOW ), 1000 ); + setTimeout( () => { + + const gameCubeData = JSON.parse( localStorage.getItem( 'theCube_savedState' ) ); + + if ( !gameCubeData ) { + + this.cube.resize( true ); + return; + + } + + this.cube.loadFromData( gameCubeData ); + + }, 1500 ); + + } + + } + + stats( show ) { + + if ( show ) { + + if ( this.transition.activeTransitions > 0 ) return; + + this.state = STATE.Stats; + + this.transition.buttons( BUTTONS.Stats, BUTTONS.Menu ); + + this.transition.title( HIDE ); + this.transition.cube( HIDE ); + + setTimeout( () => this.transition.stats( SHOW ), 1000 ); + + } else { + + this.state = STATE.Menu; + + this.transition.buttons( BUTTONS.Menu, BUTTONS.None ); + + this.transition.stats( HIDE ); + + setTimeout( () => this.transition.cube( SHOW ), 500 ); + setTimeout( () => this.transition.title( SHOW ), 1200 ); + + } + + } + + complete( show ) { + + if ( show ) { + + this.transition.buttons( BUTTONS.Complete, BUTTONS.Playing ); + + this.state = STATE.Complete; + this.saved = false; + + this.controls.disable(); + this.timer.stop(); + this.storage.clearGame(); + + this.bestTime = this.scores.addScore( this.timer.deltaTime ); + + this.transition.zoom( STATE.Menu, 0 ); + this.transition.elevate( SHOW ); + + setTimeout( () => { + + this.transition.complete( SHOW, this.bestTime ) + this.confetti.start(); + + }, 1000 ); + + } else { + + this.state = STATE.Stats; + this.saved = false; + + this.transition.timer( HIDE ); + this.transition.complete( HIDE, this.bestTime ); + this.transition.cube( HIDE ); + this.timer.reset(); + + setTimeout( () => { + + this.cube.reset(); + this.confetti.stop(); + + this.transition.stats( SHOW ) + this.transition.elevate( 0 ); + + }, 1000 ); + + return false; + + } + + } + +} + +window.game = new Game(); diff --git a/public/the-cube-master/src/js/Icons.js b/public/the-cube-master/src/js/Icons.js new file mode 100644 index 0000000..4d60b9e --- /dev/null +++ b/public/the-cube-master/src/js/Icons.js @@ -0,0 +1,107 @@ +class IconsConverter { + + constructor( options ) { + + options = Object.assign( { + tagName: 'icon', + className: 'icon', + styles: false, + icons: {}, + observe: false, + convert: false, + }, options || {} ); + + this.tagName = options.tagName; + this.className = options.className; + this.icons = options.icons; + + this.svgTag = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' ); + this.svgTag.setAttribute( 'class', this.className ); + + if ( options.styles ) this.addStyles(); + if ( options.convert ) this.convertAllIcons(); + + if ( options.observe ) { + + const MutationObserver = window.MutationObserver || window.WebKitMutationObserver; + this.observer = new MutationObserver( mutations => { this.convertAllIcons(); } ); + this.observer.observe( document.documentElement, { childList: true, subtree: true } ); + + } + + return this; + + } + + convertAllIcons() { + + document.querySelectorAll( this.tagName ).forEach( icon => { this.convertIcon( icon ); } ); + + } + + convertIcon( icon ) { + + const svgData = this.icons[ icon.attributes[0].localName ]; + + if ( typeof svgData === 'undefined' ) return; + + const svg = this.svgTag.cloneNode( true ); + const viewBox = svgData.viewbox.split( ' ' ); + + svg.setAttributeNS( null, 'viewBox', svgData.viewbox ); + svg.style.width = viewBox[2] / viewBox[3] + 'em'; + svg.style.height = '1em'; + svg.innerHTML = svgData.content; + + icon.parentNode.replaceChild( svg, icon ); + + } + + addStyles() { + + const style = document.createElement( 'style' ); + style.innerHTML = `.${this.className} { display: inline-block; font-size: inherit; overflow: visible; vertical-align: -0.125em; preserveAspectRatio: none; }`; + document.head.appendChild( style ); + + } + +} + +const Icons = new IconsConverter( { + + icons: { + settings: { + viewbox: '0 0 512 512', + content: '', + }, + back: { + viewbox: '0 0 512 512', + content: '', + }, + trophy: { + viewbox: '0 0 576 512', + content: '', + }, + cancel: { + viewbox: '0 0 352 512', + content: '', + }, + theme: { + viewbox: '0 0 512 512', + content: '', + }, + reset: { + viewbox: '0 0 512 512', + content: '', + }, + trash: { + viewbox: '0 0 448 512', + content: '', + }, + }, + + convert: true, + +} ); + +export { Icons }; diff --git a/public/the-cube-master/src/js/Keyboard.js b/public/the-cube-master/src/js/Keyboard.js new file mode 100644 index 0000000..92ec369 --- /dev/null +++ b/public/the-cube-master/src/js/Keyboard.js @@ -0,0 +1,65 @@ +const SHIFT = 16; + +const CTRL = [ + 81, // q + 87, // w + 69, // e + 65, // a + 83, // s + 68, // d +]; + +const ROTATION = [ + 90, // z + 88, // x + 67, // c +]; + +class Keyboard { + + constructor( game ) { + + this.game = game; + this.shift = false; + + this.keydown = this.keydown.bind( this ); + this.keyup = this.keyup.bind( this ); + + window.addEventListener( 'keydown', this.keydown, false ); + window.addEventListener( 'keyup', this.keyup, false ); + + } + + keydown( e ) { + + if ( e.keyCode === SHIFT ) this.shift = true; + + if ( CTRL.includes( e.keyCode ) ) { + + const modifier = ( this.shift ) ? `'` : ``; + const face = { 65: 'L', 68: 'R', 87: 'U', 83: 'D', 81: 'F', 69: 'B' }[ e.keyCode ]; + + const convertedMove = this.game.scrambler.convertMove( face + modifier ); + + this.game.controls.keyboardMove( 'LAYER', convertedMove, () => {} ); + + } else if ( ROTATION.includes( e.keyCode ) ) { + + const axis = { 90: 'x', 88: 'y', 67: 'z' }[ e.keyCode ]; + const angle = ( this.shift ? 1 : -1 ) * Math.PI / 2; + + this.game.controls.keyboardMove( 'CUBE', { axis, angle }, () => {} ); + + } + + } + + keyup( e ) { + + if ( e.keyCode === SHIFT ) this.shift = false; + + } + +} + +export { Keyboard }; \ No newline at end of file diff --git a/public/the-cube-master/src/js/KeyboardArrows.js b/public/the-cube-master/src/js/KeyboardArrows.js new file mode 100644 index 0000000..2c9d941 --- /dev/null +++ b/public/the-cube-master/src/js/KeyboardArrows.js @@ -0,0 +1,135 @@ +const ARROW = [ + 37, // left + 39, // right + 38, // up + 40, // down +]; + +const CTRL = [ + 81, // q + 87, // w + 69, // e + 65, // a + 83, // s + 68, // d + 90, // z + 88, // x + 67, // c +]; + +class Keyboard { + + constructor( game ) { + + this.game = game; + this.ctrl = false; + + this.keydown = this.keydown.bind( this ); + this.keyup = this.keyup.bind( this ); + + window.addEventListener( 'keydown', this.keydown, false ); + window.addEventListener( 'keyup', this.keyup, false ); + + const dbg = document.querySelector('#dbg'); + + const animate = () => { + + dbg.innerHTML = ( this.ctrl ) ? this.ctrl : ''; + + requestAnimationFrame( animate ); + + } + + animate(); + + } + + keydown( e ) { + + const { keyCode } = e; + const { ctrl, game } = this; + // const { } + + if ( CTRL.includes( keyCode ) ) { + + this.ctrl = keyCode; + + } + + if ( ARROW.includes( keyCode) && ctrl !== false ) { + + let face = false, modifier = false; + + if ( ctrl === 65 ) { // A + + face = 'L'; + if (keyCode === 38) modifier = "'"; // UP + if (keyCode === 40) modifier = ''; // DOWN + + } + + if ( ctrl === 68 ) { // D + + face = 'R'; + if (keyCode === 38) modifier = ''; // UP + if (keyCode === 40) modifier = "'"; // DOWN + + } + + if ( ctrl === 87 ) { // W + + face = 'U'; + if (keyCode === 37) modifier = ''; // LEFT + if (keyCode === 39) modifier = "'"; // RIGHT + + } + + if ( ctrl === 83 ) { // S + + face = 'D'; + if (keyCode === 37) modifier = "'"; // LEFT + if (keyCode === 39) modifier = ''; // RIGHT + + } + + if ( ctrl === 81 ) { // Q + + face = 'F'; + if (keyCode === 37) modifier = "'"; // LEFT + if (keyCode === 39) modifier = ''; // RIGHT + + } + + if ( ctrl === 69 ) { // E + + face = 'B'; + if (keyCode === 37) modifier = ''; // LEFT + if (keyCode === 39) modifier = "'"; // RIGHT + + } + + if ( face === false || modifier === false ) return; + + const convertedMove = game.scrambler.convertMove( face + modifier ); + game.controls.execute( convertedMove, () => {} ); + + } + + } + + keyup( e ) { + + const { keyCode } = e; + const { ctrl } = this; + + if ( ctrl == keyCode ) { + + this.ctrl = false; + + } + + } + +} + +export { Keyboard }; \ No newline at end of file diff --git a/public/the-cube-master/src/js/Preferences.js b/public/the-cube-master/src/js/Preferences.js new file mode 100644 index 0000000..d2b6257 --- /dev/null +++ b/public/the-cube-master/src/js/Preferences.js @@ -0,0 +1,121 @@ +import { Range } from './Range.js'; + +class Preferences { + + constructor( game ) { + + this.game = game; + + } + + init() { + + const getProgressInRange = ( value, start, end ) => { + + return Math.min( Math.max( (value - start) / (end - start), 0 ), 1 ); + + } + + this.ranges = { + + size: new Range( 'size', { + value: this.game.cube.size, + range: [ 2, 5 ], + step: 1, + onUpdate: value => { + + this.game.cube.size = value; + + this.game.preferences.ranges.scramble.list.forEach( ( item, i ) => { + + item.innerHTML = this.game.scrambler.scrambleLength[ this.game.cube.size ][ i ]; + + } ); + + }, + onComplete: () => this.game.storage.savePreferences(), + } ), + + flip: new Range( 'flip', { + value: this.game.controls.flipConfig, + range: [ 0, 2 ], + step: 1, + onUpdate: value => { + + this.game.controls.flipConfig = value; + + }, + onComplete: () => this.game.storage.savePreferences(), + } ), + + scramble: new Range( 'scramble', { + value: this.game.scrambler.dificulty, + range: [ 0, 2 ], + step: 1, + onUpdate: value => { + + this.game.scrambler.dificulty = value; + + }, + onComplete: () => this.game.storage.savePreferences() + } ), + + fov: new Range( 'fov', { + value: this.game.world.fov, + range: [ 2, 45 ], + onUpdate: value => { + + this.game.world.fov = value; + this.game.world.resize(); + + }, + onComplete: () => this.game.storage.savePreferences() + } ), + + theme: new Range( 'theme', { + value: { cube: 0, erno: 1, dust: 2, camo: 3, rain: 4 }[ this.game.themes.theme ], + range: [ 0, 4 ], + step: 1, + onUpdate: value => { + + const theme = [ 'cube', 'erno', 'dust', 'camo', 'rain' ][ value ] + this.game.themes.setTheme( theme ); + + }, + onComplete: () => this.game.storage.savePreferences() + } ), + + hue: new Range( 'hue', { + value: 0, + range: [ 0, 360 ], + onUpdate: value => this.game.themeEditor.updateHSL(), + onComplete: () => this.game.storage.savePreferences(), + } ), + + saturation: new Range( 'saturation', { + value: 100, + range: [ 0, 100 ], + onUpdate: value => this.game.themeEditor.updateHSL(), + onComplete: () => this.game.storage.savePreferences(), + } ), + + lightness: new Range( 'lightness', { + value: 50, + range: [ 0, 100 ], + onUpdate: value => this.game.themeEditor.updateHSL(), + onComplete: () => this.game.storage.savePreferences(), + } ), + + }; + + this.ranges.scramble.list.forEach( ( item, i ) => { + + item.innerHTML = this.game.scrambler.scrambleLength[ this.game.cube.size ][ i ]; + + } ); + + } + +} + +export { Preferences }; diff --git a/public/the-cube-master/src/js/Range.js b/public/the-cube-master/src/js/Range.js new file mode 100644 index 0000000..a40b1d1 --- /dev/null +++ b/public/the-cube-master/src/js/Range.js @@ -0,0 +1,171 @@ +import { Draggable } from './Draggable.js'; + +const RangeHTML = [ + + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + +].join( '\n' ); + +document.querySelectorAll( 'range' ).forEach( el => { + + const temp = document.createElement( 'div' ); + temp.innerHTML = RangeHTML; + + const range = temp.querySelector( '.range' ); + const rangeLabel = range.querySelector( '.range__label' ); + const rangeList = range.querySelector( '.range__list' ); + + range.setAttribute( 'name', el.getAttribute( 'name' ) ); + rangeLabel.innerHTML = el.getAttribute( 'title' ); + + if ( el.hasAttribute( 'color' ) ) { + + range.classList.add( 'range--type-color' ); + range.classList.add( 'range--color-' + el.getAttribute( 'name' ) ); + + } + + if ( el.hasAttribute( 'list' ) ) { + + el.getAttribute( 'list' ).split( ',' ).forEach( listItemText => { + + const listItem = document.createElement( 'div' ); + listItem.innerHTML = listItemText; + rangeList.appendChild( listItem ); + + } ); + + } + + el.parentNode.replaceChild( range, el ); + +} ); + +class Range { + + constructor( name, options ) { + + options = Object.assign( { + range: [ 0, 1 ], + value: 0, + step: 0, + onUpdate: () => {}, + onComplete: () => {}, + }, options || {} ); + + this.element = document.querySelector( '.range[name="' + name + '"]' ); + this.track = this.element.querySelector( '.range__track' ); + this.handle = this.element.querySelector( '.range__handle' ); + this.list = [].slice.call( this.element.querySelectorAll( '.range__list div' ) ); + + this.value = options.value; + this.min = options.range[0]; + this.max = options.range[1]; + this.step = options.step; + + this.onUpdate = options.onUpdate; + this.onComplete = options.onComplete; + + this.setValue( this.value ); + + this.initDraggable(); + + } + + setValue( value ) { + + this.value = this.round( this.limitValue( value ) ); + this.setHandlePosition(); + + } + + initDraggable() { + + const oldPosition = null; + + let current; + + this.draggable = new Draggable( this.handle, { calcDelta: true } ); + + this.draggable.onDragStart = position => { + + current = this.positionFromValue( this.value ); + this.handle.style.left = current + 'px'; + + } + + this.draggable.onDragMove = position => { + + current = this.limitPosition( current + position.delta.x ); + this.value = this.round( this.valueFromPosition( current ) ); + this.setHandlePosition(); + + this.onUpdate( this.value ); + + } + + this.draggable.onDragEnd = position => { + + this.onComplete( this.value ); + + } + + } + + round( value ) { + + if ( this.step < 1 ) return value; + + return Math.round( ( value - this.min ) / this.step ) * this.step + this.min; + + } + + limitValue( value ) { + + const max = Math.max( this.max, this.min ); + const min = Math.min( this.max, this.min ); + + return Math.min( Math.max( value, min ), max ); + + } + + limitPosition( position ) { + + return Math.min( Math.max( position, 0 ), this.track.offsetWidth ); + + } + + percentsFromValue( value ) { + + return ( value - this.min ) / ( this.max - this.min ); + + } + + valueFromPosition( position ) { + + return this.min + ( this.max - this.min ) * ( position / this.track.offsetWidth ); + + } + + positionFromValue( value ) { + + return this.percentsFromValue( value ) * this.track.offsetWidth; + + } + + setHandlePosition() { + + this.handle.style.left = this.percentsFromValue( this.value ) * 100 + '%'; + + } + +} + +export { Range }; diff --git a/public/the-cube-master/src/js/Scores.js b/public/the-cube-master/src/js/Scores.js new file mode 100644 index 0000000..4a47197 --- /dev/null +++ b/public/the-cube-master/src/js/Scores.js @@ -0,0 +1,108 @@ +class Scores { + + constructor( game ) { + + this.game = game; + + this.data = { + 2: { + scores: [], + solves: 0, + best: 0, + worst: 0, + }, + 3: { + scores: [], + solves: 0, + best: 0, + worst: 0, + }, + 4: { + scores: [], + solves: 0, + best: 0, + worst: 0, + }, + 5: { + scores: [], + solves: 0, + best: 0, + worst: 0, + } + } + + } + + addScore( time ) { + + const data = this.data[ this.game.cube.sizeGenerated ]; + + data.scores.push( time ); + data.solves++; + + if ( data.scores.lenght > 100 ) data.scores.shift(); + + let bestTime = false + + if ( time < data.best || data.best === 0 ) { + + data.best = time; + bestTime = true; + + } + + if ( time > data.worst ) data.worst = time; + + this.game.storage.saveScores(); + + return bestTime; + + } + + calcStats() { + + const s = this.game.cube.sizeGenerated; + const data = this.data[ s ]; + + this.setStat( 'cube-size', `${s}x${s}x${s}` ); + this.setStat( 'total-solves', data.solves ); + this.setStat( 'best-time', this.convertTime( data.best ) ); + this.setStat( 'worst-time', this.convertTime( data.worst ) ); + this.setStat( 'average-5', this.getAverage( 5 ) ); + this.setStat( 'average-12', this.getAverage( 12 ) ); + this.setStat( 'average-25', this.getAverage( 25 ) ); + + } + + setStat( name, value ) { + + if ( value === 0 ) value = '-'; + + this.game.dom.stats.querySelector( `.stats[name="${name}"] b` ).innerHTML = value; + + } + + getAverage( count ) { + + const data = this.data[ this.game.cube.sizeGenerated ]; + + if ( data.scores.length < count ) return 0; + + return this.convertTime( data.scores.slice( -count ).reduce( ( a, b ) => a + b, 0 ) / count ); + + } + + convertTime( time ) { + + if ( time <= 0 ) return 0; + + const seconds = parseInt( ( time / 1000 ) % 60 ); + const minutes = parseInt( ( time / ( 1000 * 60 ) ) ); + + return minutes + ':' + ( seconds < 10 ? '0' : '' ) + seconds; + + } + +} + +export { Scores }; diff --git a/public/the-cube-master/src/js/Scrambler.js b/public/the-cube-master/src/js/Scrambler.js new file mode 100644 index 0000000..63895e2 --- /dev/null +++ b/public/the-cube-master/src/js/Scrambler.js @@ -0,0 +1,96 @@ +class Scrambler { + + constructor( game ) { + + this.game = game; + + this.dificulty = 0; + + this.scrambleLength = { + 2: [ 7, 9, 11 ], + 3: [ 20, 25, 30 ], + 4: [ 30, 40, 50 ], + 5: [ 40, 60, 80 ], + }; + + this.moves = []; + this.conveted = []; + this.pring = ''; + + } + + scramble( scramble ) { + + let count = 0; + this.moves = ( typeof scramble !== 'undefined' ) ? scramble.split( ' ' ) : []; + + if ( this.moves.length < 1 ) { + + const scrambleLength = this.scrambleLength[ this.game.cube.size ][ this.dificulty ]; + + const faces = this.game.cube.size < 4 ? 'UDLRFB' : 'UuDdLlRrFfBb'; + const modifiers = [ "", "'", "2" ]; + const total = ( typeof scramble === 'undefined' ) ? scrambleLength : scramble; + + while ( count < total ) { + + const move = + faces[ Math.floor( Math.random() * faces.length ) ] + + modifiers[ Math.floor( Math.random() * 3 ) ]; + + if ( count > 0 && move.charAt( 0 ) == this.moves[ count - 1 ].charAt( 0 ) ) continue; + if ( count > 1 && move.charAt( 0 ) == this.moves[ count - 2 ].charAt( 0 ) ) continue; + + this.moves.push( move ); + count ++; + + } + + } + + this.callback = () => {}; + this.convert(); + this.print = this.moves.join( ' ' ); + + return this; + + } + + convert( moves ) { + + this.converted = []; + + this.moves.forEach( move => { + + const convertedMove = this.convertMove( move ); + const modifier = move.charAt( 1 ); + + this.converted.push( convertedMove ); + if ( modifier == "2" ) this.converted.push( convertedMove ); + + } ); + + } + + convertMove( move ) { + + const face = move.charAt( 0 ); + const modifier = move.charAt( 1 ); + + const axis = { D: 'y', U: 'y', L: 'x', R: 'x', F: 'z', B: 'z' }[ face.toUpperCase() ]; + let row = { D: -1, U: 1, L: -1, R: 1, F: 1, B: -1 }[ face.toUpperCase() ]; + + if ( this.game.cube.size > 3 && face !== face.toLowerCase() ) row = row * 2; + + const position = new THREE.Vector3(); + position[ { D: 'y', U: 'y', L: 'x', R: 'x', F: 'z', B: 'z' }[ face.toUpperCase() ] ] = row; + + const angle = ( Math.PI / 2 ) * - row * ( ( modifier == "'" ) ? - 1 : 1 ); + + return { position, axis, angle, name: move }; + + } + +} + +export { Scrambler }; \ No newline at end of file diff --git a/public/the-cube-master/src/js/States.js b/public/the-cube-master/src/js/States.js new file mode 100644 index 0000000..fa0b2bf --- /dev/null +++ b/public/the-cube-master/src/js/States.js @@ -0,0 +1,68 @@ +const States = { + 3: { + checkerboard: { + names: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 ], + positions: [ + { "x": 1/3, "y": -1/3, "z": 1/3 }, + { "x": -1/3, "y": 1/3, "z": 0 }, + { "x": 1/3, "y": -1/3, "z": -1/3 }, + { "x": -1/3, "y": 0, "z": -1/3 }, + { "x": 1/3, "y": 0, "z": 0 }, + { "x": -1/3, "y": 0, "z": 1/3 }, + { "x": 1/3, "y": 1/3, "z": 1/3 }, + { "x": -1/3, "y": -1/3, "z": 0 }, + { "x": 1/3, "y": 1/3, "z": -1/3 }, + { "x": 0, "y": 1/3, "z": -1/3 }, + { "x": 0, "y": -1/3, "z": 0 }, + { "x": 0, "y": 1/3, "z": 1/3 }, + { "x": 0, "y": 0, "z": 1/3 }, + { "x": 0, "y": 0, "z": 0 }, + { "x": 0, "y": 0, "z": -1/3 }, + { "x": 0, "y": -1/3, "z": -1/3 }, + { "x": 0, "y": 1/3, "z": 0 }, + { "x": 0, "y": -1/3, "z": 1/3 }, + { "x": -1/3, "y": -1/3, "z": 1/3 }, + { "x": 1/3, "y": 1/3, "z": 0 }, + { "x": -1/3, "y": -1/3, "z": -1/3 }, + { "x": 1/3, "y": 0, "z": -1/3 }, + { "x": -1/3, "y": 0, "z": 0 }, + { "x": 1/3, "y": 0, "z": 1/3 }, + { "x": -1/3, "y": 1/3, "z": 1/3 }, + { "x": 1/3, "y": -1/3, "z": 0 }, + { "x": -1/3, "y": 1/3, "z": -1/3 } + ], + rotations: [ + { "x": -Math.PI, "y": 0, "z": Math.PI, }, + { "x": Math.PI, "y": 0, "z": 0 }, + { "x": -Math.PI, "y": 0, "z": Math.PI }, + { "x": 0, "y": 0, "z": 0 }, + { "x": 0, "y": 0, "z": Math.PI }, + { "x": 0, "y": 0, "z": 0 }, + { "x": -Math.PI, "y": 0, "z": Math.PI }, + { "x": Math.PI, "y": 0, "z": 0 }, + { "x": -Math.PI, "y": 0, "z": Math.PI }, + { "x": 0, "y": 0, "z": Math.PI }, + { "x": 0, "y": 0, "z": 0 }, + { "x": 0, "y": 0, "z": Math.PI }, + { "x": -Math.PI, "y": 0, "z": 0 }, + { "x": Math.PI, "y": 0, "z": Math.PI }, + { "x": Math.PI, "y": 0, "z": 0 }, + { "x": 0, "y": 0, "z": Math.PI }, + { "x": 0, "y": 0, "z": 0 }, + { "x": 0, "y": 0, "z": Math.PI }, + { "x": Math.PI, "y": 0, "z": Math.PI }, + { "x": -Math.PI, "y": 0, "z": 0 }, + { "x": Math.PI, "y": 0, "z": Math.PI }, + { "x": 0, "y": 0, "z": 0 }, + { "x": 0, "y": 0, "z": Math.PI }, + { "x": 0, "y": 0, "z": 0 }, + { "x": Math.PI, "y": 0, "z": Math.PI }, + { "x": -Math.PI, "y": 0, "z": 0 }, + { "x": Math.PI, "y": 0, "z": Math.PI } + ], + size: 3, + }, + } +}; + +export { States }; \ No newline at end of file diff --git a/public/the-cube-master/src/js/Storage.js b/public/the-cube-master/src/js/Storage.js new file mode 100644 index 0000000..a30f6ca --- /dev/null +++ b/public/the-cube-master/src/js/Storage.js @@ -0,0 +1,200 @@ +class Storage { + + constructor( game ) { + + this.game = game; + + const userVersion = localStorage.getItem( 'theCube_version' ); + + if ( ! userVersion || userVersion !== window.gameVersion ) { + + this.clearGame(); + this.clearPreferences(); + this.migrateScores(); + localStorage.setItem( 'theCube_version', window.gameVersion ); + + } + + } + + init() { + + this.loadPreferences(); + this.loadScores(); + + } + + loadGame() { + + try { + + const gameInProgress = localStorage.getItem( 'theCube_playing' ) === 'true'; + + if ( ! gameInProgress ) throw new Error(); + + const gameCubeData = JSON.parse( localStorage.getItem( 'theCube_savedState' ) ); + const gameTime = parseInt( localStorage.getItem( 'theCube_time' ) ); + + if ( ! gameCubeData || gameTime === null ) throw new Error(); + if ( gameCubeData.size !== this.game.cube.sizeGenerated ) throw new Error(); + + this.game.cube.loadFromData( gameCubeData ); + + this.game.timer.deltaTime = gameTime; + + this.game.saved = true; + + } catch( e ) { + + this.game.saved = false; + + } + + } + + saveGame() { + + const gameInProgress = true; + const gameCubeData = { names: [], positions: [], rotations: [] }; + const gameTime = this.game.timer.deltaTime; + + gameCubeData.size = this.game.cube.sizeGenerated; + + this.game.cube.pieces.forEach( piece => { + + gameCubeData.names.push( piece.name ); + gameCubeData.positions.push( piece.position ); + gameCubeData.rotations.push( piece.rotation.toVector3() ); + + } ); + + localStorage.setItem( 'theCube_playing', gameInProgress ); + localStorage.setItem( 'theCube_savedState', JSON.stringify( gameCubeData ) ); + localStorage.setItem( 'theCube_time', gameTime ); + + } + + clearGame() { + + localStorage.removeItem( 'theCube_playing' ); + localStorage.removeItem( 'theCube_savedState' ); + localStorage.removeItem( 'theCube_time' ); + + } + + loadScores() { + + try { + + const scoresData = JSON.parse( localStorage.getItem( 'theCube_scores' ) ); + + if ( ! scoresData ) throw new Error(); + + this.game.scores.data = scoresData; + + } catch( e ) {} + + } + + saveScores() { + + const scoresData = this.game.scores.data; + + localStorage.setItem( 'theCube_scores', JSON.stringify( scoresData ) ); + + } + + clearScores() { + + localStorage.removeItem( 'theCube_scores' ); + + } + + migrateScores() { + + try { + + const scoresData = JSON.parse( localStorage.getItem( 'theCube_scoresData' ) ); + const scoresBest = parseInt( localStorage.getItem( 'theCube_scoresBest' ) ); + const scoresWorst = parseInt( localStorage.getItem( 'theCube_scoresWorst' ) ); + const scoresSolves = parseInt( localStorage.getItem( 'theCube_scoresSolves' ) ); + + if ( ! scoresData || ! scoresBest || ! scoresSolves || ! scoresWorst ) return false; + + this.game.scores.data[ 3 ].scores = scoresData; + this.game.scores.data[ 3 ].best = scoresBest; + this.game.scores.data[ 3 ].solves = scoresSolves; + this.game.scores.data[ 3 ].worst = scoresWorst; + + localStorage.removeItem( 'theCube_scoresData' ); + localStorage.removeItem( 'theCube_scoresBest' ); + localStorage.removeItem( 'theCube_scoresWorst' ); + localStorage.removeItem( 'theCube_scoresSolves' ); + + } catch( e ) {} + + } + + loadPreferences() { + + try { + + const preferences = JSON.parse( localStorage.getItem( 'theCube_preferences' ) ); + + if ( ! preferences ) throw new Error(); + + this.game.cube.size = parseInt( preferences.cubeSize ); + this.game.controls.flipConfig = parseInt( preferences.flipConfig ); + this.game.scrambler.dificulty = parseInt( preferences.dificulty ); + + this.game.world.fov = parseFloat( preferences.fov ); + this.game.world.resize(); + + this.game.themes.colors = preferences.colors; + this.game.themes.setTheme( preferences.theme ); + + return true; + + } catch (e) { + + this.game.cube.size = 3; + this.game.controls.flipConfig = 0; + this.game.scrambler.dificulty = 1; + + this.game.world.fov = 10; + this.game.world.resize(); + + this.game.themes.setTheme( 'cube' ); + + this.savePreferences(); + + return false; + + } + + } + + savePreferences() { + + const preferences = { + cubeSize: this.game.cube.size, + flipConfig: this.game.controls.flipConfig, + dificulty: this.game.scrambler.dificulty, + fov: this.game.world.fov, + theme: this.game.themes.theme, + colors: this.game.themes.colors, + }; + + localStorage.setItem( 'theCube_preferences', JSON.stringify( preferences ) ); + + } + + clearPreferences() { + + localStorage.removeItem( 'theCube_preferences' ); + + } + +} + +export { Storage }; diff --git a/public/the-cube-master/src/js/ThemeEditor.js b/public/the-cube-master/src/js/ThemeEditor.js new file mode 100644 index 0000000..f27e12e --- /dev/null +++ b/public/the-cube-master/src/js/ThemeEditor.js @@ -0,0 +1,179 @@ +import { Tween, Easing } from './Tween.js'; + +class ThemeEditor { + + constructor( game ) { + + this.game = game; + + this.editColor = 'R'; + + this.getPieceColor = this.getPieceColor.bind( this ); + + } + + colorFromHSL( h, s, l ) { + + h = Math.round( h ); + s = Math.round( s ); + l = Math.round( l ); + + return new THREE.Color( `hsl(${h}, ${s}%, ${l}%)` ); + + } + + setHSL( color = null, animate = false ) { + + this.editColor = ( color === null) ? 'R' : color; + + const hsl = new THREE.Color( this.game.themes.getColors()[ this.editColor ] ); + + const { h, s, l } = hsl.getHSL( hsl ); + const { hue, saturation, lightness } = this.game.preferences.ranges; + + if ( animate ) { + + const ho = hue.value / 360; + const so = saturation.value / 100; + const lo = lightness.value / 100; + + const colorOld = this.colorFromHSL( hue.value, saturation.value, lightness.value ); + + if ( this.tweenHSL ) this.tweenHSL.stop() + + this.tweenHSL = new Tween( { + duration: 200, + easing: Easing.Sine.Out(), + onUpdate: tween => { + + hue.setValue( ( ho + ( h - ho ) * tween.value ) * 360 ); + saturation.setValue( ( so + ( s - so ) * tween.value ) * 100 ); + lightness.setValue( ( lo + ( l - lo ) * tween.value ) * 100 ); + + const colorTween = colorOld.clone().lerp( hsl, tween.value ); + + const colorTweenStyle = colorTween.getStyle(); + const colorTweenHex = colorTween.getHSL( colorTween ); + + hue.handle.style.color = colorTweenStyle; + saturation.handle.style.color = colorTweenStyle; + lightness.handle.style.color = colorTweenStyle; + + saturation.track.style.color = + this.colorFromHSL( colorTweenHex.h * 360, 100, 50 ).getStyle(); + lightness.track.style.color = + this.colorFromHSL( colorTweenHex.h * 360, colorTweenHex.s * 100, 50 ).getStyle(); + + this.game.dom.theme.style.display = 'none'; + this.game.dom.theme.offsetHeight; + this.game.dom.theme.style.display = ''; + + }, + onComplete: () => { + + this.updateHSL(); + this.game.storage.savePreferences(); + + }, + } ); + + } else { + + hue.setValue( h * 360 ); + saturation.setValue( s * 100 ); + lightness.setValue( l * 100 ); + + this.updateHSL(); + this.game.storage.savePreferences(); + + } + + } + + updateHSL() { + + const { hue, saturation, lightness } = this.game.preferences.ranges; + + const h = hue.value; + const s = saturation.value; + const l = lightness.value; + + const color = this.colorFromHSL( h, s, l ).getStyle(); + + hue.handle.style.color = color; + saturation.handle.style.color = color; + lightness.handle.style.color = color; + + saturation.track.style.color = this.colorFromHSL( h, 100, 50 ).getStyle(); + lightness.track.style.color = this.colorFromHSL( h, s, 50 ).getStyle(); + + this.game.dom.theme.style.display = 'none'; + this.game.dom.theme.offsetHeight; + this.game.dom.theme.style.display = ''; + + const theme = this.game.themes.theme; + + this.game.themes.colors[ theme ][ this.editColor ] = this.colorFromHSL( h, s, l ).getHex(); + this.game.themes.setTheme(); + + } + + colorPicker( enable ) { + + if ( enable ) { + + this.game.dom.game.addEventListener( 'click', this.getPieceColor, false ); + + } else { + + this.game.dom.game.removeEventListener( 'click', this.getPieceColor, false ); + + } + + } + + getPieceColor( event ) { + + const clickEvent = event.touches + ? ( event.touches[ 0 ] || event.changedTouches[ 0 ] ) + : event; + + const clickPosition = new THREE.Vector2( clickEvent.pageX, clickEvent.pageY ); + + let edgeIntersect = this.game.controls.getIntersect( clickPosition, this.game.cube.edges, true ); + let pieceIntersect = this.game.controls.getIntersect( clickPosition, this.game.cube.cubes, true ); + + if ( edgeIntersect !== false ) { + + const edge = edgeIntersect.object; + + const position = edge.parent + .localToWorld( edge.position.clone() ) + .sub( this.game.cube.object.position ) + .sub( this.game.cube.animator.position ); + + const mainAxis = this.game.controls.getMainAxis( position ); + if ( position.multiplyScalar( 2 ).round()[ mainAxis ] < 1 ) edgeIntersect = false; + + } + + const name = edgeIntersect ? edgeIntersect.object.name : pieceIntersect ? 'P' : 'G'; + + this.setHSL( name, true ); + + } + + resetTheme() { + + this.game.themes.colors[ this.game.themes.theme ] = + JSON.parse( JSON.stringify( this.game.themes.defaults[ this.game.themes.theme ] ) ); + + this.game.themes.setTheme(); + + this.setHSL( this.editColor, true ); + + } + +} + +export { ThemeEditor }; \ No newline at end of file diff --git a/public/the-cube-master/src/js/Themes.js b/public/the-cube-master/src/js/Themes.js new file mode 100644 index 0000000..ec1ca79 --- /dev/null +++ b/public/the-cube-master/src/js/Themes.js @@ -0,0 +1,94 @@ +class Themes { + + constructor( game ) { + + this.game = game; + this.theme = null; + + this.defaults = { + cube: { + U: 0xfff7ff, // white + D: 0xffef48, // yellow + F: 0xef3923, // red + R: 0x41aac8, // blue + B: 0xff8c0a, // orange + L: 0x82ca38, // green + P: 0x08101a, // piece + G: 0xd1d5db, // background + }, + erno: { + U: 0xffffff, + D: 0xffd500, + F: 0xc41e3a, + R: 0x0051ba, + B: 0xff5800, + L: 0x009e60, + P: 0x08101a, + G: 0x8abdff, + }, + dust: { + U: 0xfff6eb, + D: 0xe7c48d, + F: 0x8f253e, + R: 0x607e69, + B: 0xbe6f62, + L: 0x849f5d, + P: 0x08101a, + G: 0xE7C48D, + }, + camo: { + U: 0xfff6eb, + D: 0xbfb672, + F: 0x37241c, + R: 0x718456, + B: 0x805831, + L: 0x37431d, + P: 0x08101a, + G: 0xBFB672, + }, + rain: { + U: 0xfafaff, + D: 0xedb92d, + F: 0xce2135, + R: 0x449a89, + B: 0xec582f, + L: 0xa3a947, + P: 0x08101a, + G: 0x87b9ac, + }, + }; + + this.colors = JSON.parse( JSON.stringify( this.defaults ) ); + + } + + getColors() { + + return this.colors[ this.theme ]; + + } + + setTheme( theme = false, force = false ) { + + if ( theme === this.theme && force === false ) return; + if ( theme !== false ) this.theme = theme; + + const colors = this.getColors(); + + this.game.dom.prefs.querySelectorAll( '.range__handle div' ).forEach( range => { + + range.style.background = '#' + colors.R.toString(16).padStart(6, '0'); + + } ); + + this.game.cube.updateColors( colors ); + + this.game.confetti.updateColors( colors ); + + this.game.dom.back.style.background = '#' + colors.G.toString(16).padStart(6, '0'); + + } + +} + +export { Themes }; diff --git a/public/the-cube-master/src/js/Timer.js b/public/the-cube-master/src/js/Timer.js new file mode 100644 index 0000000..02eb33d --- /dev/null +++ b/public/the-cube-master/src/js/Timer.js @@ -0,0 +1,79 @@ +import { Animation } from './Animation.js'; + +class Timer extends Animation { + + constructor( game ) { + + super( false ); + + this.game = game; + this.reset(); + + } + + start( continueGame ) { + + this.startTime = continueGame ? ( Date.now() - this.deltaTime ) : Date.now(); + this.deltaTime = 0; + this.converted = this.convert(); + + super.start(); + + } + + reset() { + + this.startTime = 0; + this.currentTime = 0; + this.deltaTime = 0; + this.converted = '0:00'; + + } + + stop() { + + this.currentTime = Date.now(); + this.deltaTime = this.currentTime - this.startTime; + this.convert(); + + super.stop(); + + return { time: this.converted, millis: this.deltaTime }; + + } + + update() { + + const old = this.converted; + + this.currentTime = Date.now(); + this.deltaTime = this.currentTime - this.startTime; + this.convert(); + + if ( this.converted != old ) { + + localStorage.setItem( 'theCube_time', this.deltaTime ); + this.setText(); + + } + + } + + convert() { + + const seconds = parseInt( ( this.deltaTime / 1000 ) % 60 ); + const minutes = parseInt( ( this.deltaTime / ( 1000 * 60 ) ) ); + + this.converted = minutes + ':' + ( seconds < 10 ? '0' : '' ) + seconds; + + } + + setText() { + + this.game.dom.texts.timer.innerHTML = this.converted; + + } + +} + +export { Timer }; diff --git a/public/the-cube-master/src/js/Transition.js b/public/the-cube-master/src/js/Transition.js new file mode 100644 index 0000000..643a599 --- /dev/null +++ b/public/the-cube-master/src/js/Transition.js @@ -0,0 +1,478 @@ +import { Tween, Easing } from './Tween.js'; + +class Transition { + + constructor( game ) { + + this.game = game; + + this.tweens = {}; + this.durations = {}; + this.data = { + cubeY: -0.2, + cameraZoom: 0.85, + }; + + this.activeTransitions = 0; + + } + + init() { + + this.game.controls.disable(); + + this.game.cube.object.position.y = this.data.cubeY; + this.game.cube.animator.position.y = 4; + this.game.cube.animator.rotation.x = - Math.PI / 3; + this.game.world.camera.zoom = this.data.cameraZoom; + this.game.world.camera.updateProjectionMatrix(); + + this.tweens.buttons = {}; + this.tweens.timer = []; + this.tweens.title = []; + this.tweens.best = []; + this.tweens.complete = []; + this.tweens.prefs = []; + this.tweens.theme = []; + this.tweens.stats = []; + + } + + buttons( show, hide ) { + + const buttonTween = ( button, show ) => { + + return new Tween( { + target: button.style, + duration: 300, + easing: show ? Easing.Power.Out( 2 ) : Easing.Power.In( 3 ), + from: { opacity: show ? 0 : 1 }, + to: { opacity: show ? 1 : 0 }, + onUpdate: tween => { + + const translate = show ? 1 - tween.value : tween.value; + button.style.transform = `translate3d(0, ${translate * 1.5}em, 0)`; + + }, + onComplete: () => button.style.pointerEvents = show ? 'all' : 'none' + } ); + + } + + hide.forEach( button => + this.tweens.buttons[ button ] = buttonTween( this.game.dom.buttons[ button ], false ) + ); + + setTimeout( () => show.forEach( button => { + + this.tweens.buttons[ button ] = buttonTween( this.game.dom.buttons[ button ], true ) + + } ), hide ? 500 : 0 ); + + } + + cube( show, theming = false ) { + + this.activeTransitions++; + + try { this.tweens.cube.stop() } catch(e) {}; + + const currentY = this.game.cube.animator.position.y; + const currentRotation = this.game.cube.animator.rotation.x; + + this.tweens.cube = new Tween( { + duration: show ? 3000 : 1250, + easing: show ? Easing.Elastic.Out( 0.8, 0.6 ) : Easing.Back.In( 1 ), + onUpdate: tween => { + + this.game.cube.animator.position.y = show + ? ( theming ? 0.9 + ( 1 - tween.value ) * 3.5 : ( 1 - tween.value ) * 4 ) + : currentY + tween.value * 4; + + this.game.cube.animator.rotation.x = show + ? ( 1 - tween.value ) * Math.PI / 3 + : currentRotation + tween.value * - Math.PI / 3; + + }, + } ); + + if ( theming ) { + + if ( show ) { + + this.game.world.camera.zoom = 0.75; + this.game.world.camera.updateProjectionMatrix(); + + } else { + + setTimeout( () => { + + this.game.world.camera.zoom = this.data.cameraZoom; + this.game.world.camera.updateProjectionMatrix(); + + }, 1500 ); + + } + + } + + this.durations.cube = show ? 1500 : 1500; + + setTimeout( () => this.activeTransitions--, this.durations.cube ); + + } + + float() { + + try { this.tweens.float.stop() } catch(e) {}; + + this.tweens.float = new Tween( { + duration: 1500, + easing: Easing.Sine.InOut(), + yoyo: true, + onUpdate: tween => { + + this.game.cube.holder.position.y = (- 0.02 + tween.value * 0.04); + this.game.cube.holder.rotation.x = 0.005 - tween.value * 0.01; + this.game.cube.holder.rotation.z = - this.game.cube.holder.rotation.x; + this.game.cube.holder.rotation.y = this.game.cube.holder.rotation.x; + + this.game.controls.edges.position.y = + this.game.cube.holder.position.y + this.game.cube.object.position.y; + + }, + } ); + + } + + zoom( play, time ) { + + this.activeTransitions++; + + const zoom = ( play ) ? 1 : this.data.cameraZoom; + const duration = ( time > 0 ) ? Math.max( time, 1500 ) : 1500; + const rotations = ( time > 0 ) ? Math.round( duration / 1500 ) : 1; + const easing = Easing.Power.InOut( ( time > 0 ) ? 2 : 3 ); + + this.tweens.zoom = new Tween( { + target: this.game.world.camera, + duration: duration, + easing: easing, + to: { zoom: zoom }, + onUpdate: () => { this.game.world.camera.updateProjectionMatrix(); }, + } ); + + this.tweens.rotate = new Tween( { + target: this.game.cube.animator.rotation, + duration: duration, + easing: easing, + to: { y: - Math.PI * 2 * rotations }, + onComplete: () => { this.game.cube.animator.rotation.y = 0; }, + } ); + + this.durations.zoom = duration; + + setTimeout( () => this.activeTransitions--, this.durations.zoom ); + + } + + elevate( complete ) { + + this.activeTransitions++; + + const cubeY = + + this.tweens.elevate = new Tween( { + target: this.game.cube.object.position, + duration: complete ? 1500 : 0, + easing: Easing.Power.InOut( 3 ), + to: { y: complete ? -0.05 : this.data.cubeY } + } ); + + this.durations.elevate = 1500; + + setTimeout( () => this.activeTransitions--, this.durations.elevate ); + + } + + complete( show, best ) { + + this.activeTransitions++; + + const text = best ? this.game.dom.texts.best : this.game.dom.texts.complete; + + if ( text.querySelector( 'span i' ) === null ) + text.querySelectorAll( 'span' ).forEach( span => this.splitLetters( span ) ); + + const letters = text.querySelectorAll( '.icon, i' ); + + this.flipLetters( best ? 'best' : 'complete', letters, show ); + + text.style.opacity = 1; + + const duration = this.durations[ best ? 'best' : 'complete' ]; + + if ( ! show ) setTimeout( () => this.game.dom.texts.timer.style.transform = '', duration ); + + setTimeout( () => this.activeTransitions--, duration ); + + } + + stats( show ) { + + if ( show ) this.game.scores.calcStats(); + + this.activeTransitions++; + + this.tweens.stats.forEach( tween => { tween.stop(); tween = null; } ); + + let tweenId = -1; + + const stats = this.game.dom.stats.querySelectorAll( '.stats' ); + const easing = show ? Easing.Power.Out( 2 ) : Easing.Power.In( 3 ); + + stats.forEach( ( stat, index ) => { + + const delay = index * ( show ? 80 : 60 ); + + this.tweens.stats[ tweenId++ ] = new Tween( { + delay: delay, + duration: 400, + easing: easing, + onUpdate: tween => { + + const translate = show ? ( 1 - tween.value ) * 2 : tween.value; + const opacity = show ? tween.value : ( 1 - tween.value ); + + stat.style.transform = `translate3d(0, ${translate}em, 0)`; + stat.style.opacity = opacity; + + } + } ); + + } ); + + this.durations.stats = 0; + + setTimeout( () => this.activeTransitions--, this.durations.stats ); + + } + + preferences( show ) { + + this.ranges( this.game.dom.prefs.querySelectorAll( '.range' ), 'prefs', show ); + + } + + theming( show ) { + + this.ranges( this.game.dom.theme.querySelectorAll( '.range' ), 'prefs', show ); + + } + + ranges( ranges, type, show ) { + + this.activeTransitions++; + + this.tweens[ type ].forEach( tween => { tween.stop(); tween = null; } ); + + const easing = show ? Easing.Power.Out(2) : Easing.Power.In(3); + + let tweenId = -1; + let listMax = 0; + + ranges.forEach( ( range, rangeIndex ) => { + + const label = range.querySelector( '.range__label' ); + const track = range.querySelector( '.range__track-line' ); + const handle = range.querySelector( '.range__handle' ); + const list = range.querySelectorAll( '.range__list div' ); + + const delay = rangeIndex * ( show ? 120 : 100 ); + + label.style.opacity = show ? 0 : 1; + track.style.opacity = show ? 0 : 1; + handle.style.opacity = show ? 0 : 1; + handle.style.pointerEvents = show ? 'all' : 'none'; + + this.tweens[ type ][ tweenId++ ] = new Tween( { + delay: show ? delay : delay, + duration: 400, + easing: easing, + onUpdate: tween => { + + const translate = show ? ( 1 - tween.value ) : tween.value; + const opacity = show ? tween.value : ( 1 - tween.value ); + + label.style.transform = `translate3d(0, ${translate}em, 0)`; + label.style.opacity = opacity; + + } + } ); + + this.tweens[ type ][ tweenId++ ] = new Tween( { + delay: show ? delay + 100 : delay, + duration: 400, + easing: easing, + onUpdate: tween => { + + const translate = show ? ( 1 - tween.value ) : tween.value; + const scale = show ? tween.value : ( 1 - tween.value ); + const opacity = scale; + + track.style.transform = `translate3d(0, ${translate}em, 0) scale3d(${scale}, 1, 1)`; + track.style.opacity = opacity; + + } + } ); + + this.tweens[ type ][ tweenId++ ] = new Tween( { + delay: show ? delay + 100 : delay, + duration: 400, + easing: easing, + onUpdate: tween => { + + const translate = show ? ( 1 - tween.value ) : tween.value; + const opacity = 1 - translate; + const scale = 0.5 + opacity * 0.5; + + handle.style.transform = `translate3d(0, ${translate}em, 0) scale3d(${scale}, ${scale}, ${scale})`; + handle.style.opacity = opacity; + + } + } ); + + list.forEach( ( listItem, labelIndex ) => { + + listItem.style.opacity = show ? 0 : 1; + + this.tweens[ type ][ tweenId++ ] = new Tween( { + delay: show ? delay + 200 + labelIndex * 50 : delay, + duration: 400, + easing: easing, + onUpdate: tween => { + + const translate = show ? ( 1 - tween.value ) : tween.value; + const opacity = show ? tween.value : ( 1 - tween.value ); + + listItem.style.transform = `translate3d(0, ${translate}em, 0)`; + listItem.style.opacity = opacity; + + } + } ); + + } ); + + listMax = list.length > listMax ? list.length - 1 : listMax; + + range.style.opacity = 1; + + } ); + + this.durations[ type ] = show + ? ( ( ranges.length - 1 ) * 100 ) + 200 + listMax * 50 + 400 + : ( ( ranges.length - 1 ) * 100 ) + 400; + + setTimeout( () => this.activeTransitions--, this.durations[ type ] ); + + } + + title( show ) { + + this.activeTransitions++; + + const title = this.game.dom.texts.title; + + if ( title.querySelector( 'span i' ) === null ) + title.querySelectorAll( 'span' ).forEach( span => this.splitLetters( span ) ); + + const letters = title.querySelectorAll( 'i' ); + + this.flipLetters( 'title', letters, show ); + + title.style.opacity = 1; + + const note = this.game.dom.texts.note; + + this.tweens.title[ letters.length ] = new Tween( { + target: note.style, + easing: Easing.Sine.InOut(), + duration: show ? 800 : 400, + yoyo: show ? true : null, + from: { opacity: show ? 0 : ( parseFloat( getComputedStyle( note ).opacity ) ) }, + to: { opacity: show ? 1 : 0 }, + } ); + + setTimeout( () => this.activeTransitions--, this.durations.title ); + + } + + timer( show ) { + + this.activeTransitions++; + + const timer = this.game.dom.texts.timer; + + timer.style.opacity = 0; + this.game.timer.convert(); + this.game.timer.setText(); + + this.splitLetters( timer ); + const letters = timer.querySelectorAll( 'i' ); + this.flipLetters( 'timer', letters, show ); + + timer.style.opacity = 1; + + setTimeout( () => this.activeTransitions--, this.durations.timer ); + + } + + splitLetters( element ) { + + const text = element.innerHTML; + + element.innerHTML = ''; + + text.split( '' ).forEach( letter => { + + const i = document.createElement( 'i' ); + + i.innerHTML = letter; + + element.appendChild( i ); + + } ); + + } + + flipLetters( type, letters, show ) { + + try { this.tweens[ type ].forEach( tween => tween.stop() ) } catch(e) {}; + + letters.forEach( ( letter, index ) => { + + letter.style.opacity = show ? 0 : 1; + + this.tweens[ type ][ index ] = new Tween( { + easing: Easing.Sine.Out(), + duration: show ? 800 : 400, + delay: index * 50, + onUpdate: tween => { + + const rotation = show ? ( 1 - tween.value ) * -80 : tween.value * 80; + + letter.style.transform = `rotate3d(0, 1, 0, ${rotation}deg)`; + letter.style.opacity = show ? tween.value : ( 1 - tween.value ); + + }, + } ); + + } ); + + this.durations[ type ] = ( letters.length - 1 ) * 50 + ( show ? 800 : 400 ); + + } + +} + +export { Transition }; diff --git a/public/the-cube-master/src/js/Tween.js b/public/the-cube-master/src/js/Tween.js new file mode 100644 index 0000000..4f67b2a --- /dev/null +++ b/public/the-cube-master/src/js/Tween.js @@ -0,0 +1,103 @@ +import { Animation } from './Animation.js'; +import { Easing } from './Easing.js'; + +class Tween extends Animation { + + constructor( options ) { + + super( false ); + + this.duration = options.duration || 500; + this.easing = options.easing || ( t => t ); + this.onUpdate = options.onUpdate || ( () => {} ); + this.onComplete = options.onComplete || ( () => {} ); + + this.delay = options.delay || false; + this.yoyo = options.yoyo ? false : null; + + this.progress = 0; + this.value = 0; + this.delta = 0; + + this.getFromTo( options ); + + if ( this.delay ) setTimeout( () => super.start(), this.delay ); + else super.start(); + + this.onUpdate( this ); + + } + + update( delta ) { + + const old = this.value * 1; + const direction = ( this.yoyo === true ) ? - 1 : 1; + + this.progress += ( delta / this.duration ) * direction; + + this.value = this.easing( this.progress ); + this.delta = this.value - old; + + if ( this.values !== null ) this.updateFromTo(); + + if ( this.yoyo !== null ) this.updateYoyo(); + else if ( this.progress <= 1 ) this.onUpdate( this ); + else { + + this.progress = 1; + this.value = 1; + this.onUpdate( this ); + this.onComplete( this ); + super.stop(); + + } + + } + + updateYoyo() { + + if ( this.progress > 1 || this.progress < 0 ) { + + this.value = this.progress = ( this.progress > 1 ) ? 1 : 0; + this.yoyo = ! this.yoyo; + + } + + this.onUpdate( this ) + + } + + updateFromTo() { + + this.values.forEach( key => { + + this.target[ key ] = this.from[ key ] + ( this.to[ key ] - this.from[ key ] ) * this.value; + + } ); + + } + + getFromTo( options ) { + + if ( ! options.target || ! options.to ) { + + this.values = null; + return; + + } + + this.target = options.target || null; + this.from = options.from || {}; + this.to = options.to || null; + this.values = []; + + if ( Object.keys( this.from ).length < 1 ) + Object.keys( this.to ).forEach( key => { this.from[ key ] = this.target[ key ]; } ); + + Object.keys( this.to ).forEach( key => { this.values.push( key ) } ); + + } + +} + +export { Tween, Easing }; diff --git a/public/the-cube-master/src/js/World.js b/public/the-cube-master/src/js/World.js new file mode 100644 index 0000000..99d47a8 --- /dev/null +++ b/public/the-cube-master/src/js/World.js @@ -0,0 +1,93 @@ +import { Animation } from './Animation.js'; + +class World extends Animation { + + constructor( game ) { + + super( true ); + + this.game = game; + + this.container = this.game.dom.game; + this.scene = new THREE.Scene(); + + this.renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } ); + this.renderer.setPixelRatio( window.devicePixelRatio ); + this.container.appendChild( this.renderer.domElement ); + + this.camera = new THREE.PerspectiveCamera( 2, 1, 0.1, 10000 ); + + this.stage = { width: 2, height: 3 }; + this.fov = 10; + + this.createLights(); + + this.onResize = []; + + this.resize(); + window.addEventListener( 'resize', () => this.resize(), false ); + + } + + update() { + + this.renderer.render( this.scene, this.camera ); + + } + + resize() { + + this.width = this.container.offsetWidth; + this.height = this.container.offsetHeight; + + this.renderer.setSize( this.width, this.height ); + + this.camera.fov = this.fov; + this.camera.aspect = this.width / this.height; + + const aspect = this.stage.width / this.stage.height; + const fovRad = this.fov * THREE.Math.DEG2RAD; + + let distance = ( aspect < this.camera.aspect ) + ? ( this.stage.height / 2 ) / Math.tan( fovRad / 2 ) + : ( this.stage.width / this.camera.aspect ) / ( 2 * Math.tan( fovRad / 2 ) ); + + distance *= 0.5; + + this.camera.position.set( distance, distance, distance); + this.camera.lookAt( this.scene.position ); + this.camera.updateProjectionMatrix(); + + const docFontSize = ( aspect < this.camera.aspect ) + ? ( this.height / 100 ) * aspect + : this.width / 100; + + document.documentElement.style.fontSize = docFontSize + 'px'; + + if ( this.onResize ) this.onResize.forEach( cb => cb() ); + + } + + createLights() { + + this.lights = { + holder: new THREE.Object3D, + ambient: new THREE.AmbientLight( 0xffffff, 0.69 ), + front: new THREE.DirectionalLight( 0xffffff, 0.36 ), + back: new THREE.DirectionalLight( 0xffffff, 0.19 ), + }; + + this.lights.front.position.set( 1.5, 5, 3 ); + this.lights.back.position.set( -1.5, -5, -3 ); + + this.lights.holder.add( this.lights.ambient ); + this.lights.holder.add( this.lights.front ); + this.lights.holder.add( this.lights.back ); + + this.scene.add( this.lights.holder ); + + } + +} + +export { World }; diff --git a/public/the-cube-master/src/js/plugins/RoundedBoxGeometry.js b/public/the-cube-master/src/js/plugins/RoundedBoxGeometry.js new file mode 100644 index 0000000..71f63f7 --- /dev/null +++ b/public/the-cube-master/src/js/plugins/RoundedBoxGeometry.js @@ -0,0 +1,467 @@ +function RoundedBoxGeometry( size, radius, radiusSegments ) { + + THREE.BufferGeometry.call( this ); + + this.type = 'RoundedBoxGeometry'; + + radiusSegments = ! isNaN( radiusSegments ) ? Math.max( 1, Math.floor( radiusSegments ) ) : 1; + + var width, height, depth; + + width = height = depth = size; + radius = size * radius; + + radius = Math.min( radius, Math.min( width, Math.min( height, Math.min( depth ) ) ) / 2 ); + + var edgeHalfWidth = width / 2 - radius; + var edgeHalfHeight = height / 2 - radius; + var edgeHalfDepth = depth / 2 - radius; + + this.parameters = { + width: width, + height: height, + depth: depth, + radius: radius, + radiusSegments: radiusSegments + }; + + var rs1 = radiusSegments + 1; + var totalVertexCount = ( rs1 * radiusSegments + 1 ) << 3; + + var positions = new THREE.BufferAttribute( new Float32Array( totalVertexCount * 3 ), 3 ); + var normals = new THREE.BufferAttribute( new Float32Array( totalVertexCount * 3 ), 3 ); + + var + cornerVerts = [], + cornerNormals = [], + normal = new THREE.Vector3(), + vertex = new THREE.Vector3(), + vertexPool = [], + normalPool = [], + indices = [] + ; + + var + lastVertex = rs1 * radiusSegments, + cornerVertNumber = rs1 * radiusSegments + 1 + ; + + doVertices(); + doFaces(); + doCorners(); + doHeightEdges(); + doWidthEdges(); + doDepthEdges(); + + function doVertices() { + + var cornerLayout = [ + new THREE.Vector3( 1, 1, 1 ), + new THREE.Vector3( 1, 1, - 1 ), + new THREE.Vector3( - 1, 1, - 1 ), + new THREE.Vector3( - 1, 1, 1 ), + new THREE.Vector3( 1, - 1, 1 ), + new THREE.Vector3( 1, - 1, - 1 ), + new THREE.Vector3( - 1, - 1, - 1 ), + new THREE.Vector3( - 1, - 1, 1 ) + ]; + + for ( var j = 0; j < 8; j ++ ) { + + cornerVerts.push( [] ); + cornerNormals.push( [] ); + + } + + var PIhalf = Math.PI / 2; + var cornerOffset = new THREE.Vector3( edgeHalfWidth, edgeHalfHeight, edgeHalfDepth ); + + for ( var y = 0; y <= radiusSegments; y ++ ) { + + var v = y / radiusSegments; + var va = v * PIhalf; + var cosVa = Math.cos( va ); + var sinVa = Math.sin( va ); + + if ( y == radiusSegments ) { + + vertex.set( 0, 1, 0 ); + var vert = vertex.clone().multiplyScalar( radius ).add( cornerOffset ); + cornerVerts[ 0 ].push( vert ); + vertexPool.push( vert ); + var norm = vertex.clone(); + cornerNormals[ 0 ].push( norm ); + normalPool.push( norm ); + continue; + + } + + for ( var x = 0; x <= radiusSegments; x ++ ) { + + var u = x / radiusSegments; + var ha = u * PIhalf; + vertex.x = cosVa * Math.cos( ha ); + vertex.y = sinVa; + vertex.z = cosVa * Math.sin( ha ); + + var vert = vertex.clone().multiplyScalar( radius ).add( cornerOffset ); + cornerVerts[ 0 ].push( vert ); + vertexPool.push( vert ); + + var norm = vertex.clone().normalize(); + cornerNormals[ 0 ].push( norm ); + normalPool.push( norm ); + + } + + } + + for ( var i = 1; i < 8; i ++ ) { + + for ( var j = 0; j < cornerVerts[ 0 ].length; j ++ ) { + + var vert = cornerVerts[ 0 ][ j ].clone().multiply( cornerLayout[ i ] ); + cornerVerts[ i ].push( vert ); + vertexPool.push( vert ); + + var norm = cornerNormals[ 0 ][ j ].clone().multiply( cornerLayout[ i ] ); + cornerNormals[ i ].push( norm ); + normalPool.push( norm ); + + } + + } + + } + + function doCorners() { + + var indexInd = 0; + + var flips = [ + true, + false, + true, + false, + false, + true, + false, + true + ]; + + var lastRowOffset = rs1 * ( radiusSegments - 1 ); + + for ( var i = 0; i < 8; i ++ ) { + + var cornerOffset = cornerVertNumber * i; + + for ( var v = 0; v < radiusSegments - 1; v ++ ) { + + var r1 = v * rs1; + var r2 = ( v + 1 ) * rs1; + + for ( var u = 0; u < radiusSegments; u ++ ) { + + var u1 = u + 1; + var a = cornerOffset + r1 + u; + var b = cornerOffset + r1 + u1; + var c = cornerOffset + r2 + u; + var d = cornerOffset + r2 + u1; + + if ( ! flips[ i ] ) { + + indices.push( a ); + indices.push( b ); + indices.push( c ); + + indices.push( b ); + indices.push( d ); + indices.push( c ); + + } else { + + indices.push( a ); + indices.push( c ); + indices.push( b ); + + indices.push( b ); + indices.push( c ); + indices.push( d ); + + } + + } + + } + + for ( var u = 0; u < radiusSegments; u ++ ) { + + var a = cornerOffset + lastRowOffset + u; + var b = cornerOffset + lastRowOffset + u + 1; + var c = cornerOffset + lastVertex; + + if ( ! flips[ i ] ) { + + indices.push( a ); + indices.push( b ); + indices.push( c ); + + } else { + + indices.push( a ); + indices.push( c ); + indices.push( b ); + + } + + } + + } + + } + + function doFaces() { + + var a = lastVertex; + var b = lastVertex + cornerVertNumber; + var c = lastVertex + cornerVertNumber * 2; + var d = lastVertex + cornerVertNumber * 3; + + indices.push( a ); + indices.push( b ); + indices.push( c ); + indices.push( a ); + indices.push( c ); + indices.push( d ); + + a = lastVertex + cornerVertNumber * 4; + b = lastVertex + cornerVertNumber * 5; + c = lastVertex + cornerVertNumber * 6; + d = lastVertex + cornerVertNumber * 7; + + indices.push( a ); + indices.push( c ); + indices.push( b ); + indices.push( a ); + indices.push( d ); + indices.push( c ); + + a = 0; + b = cornerVertNumber; + c = cornerVertNumber * 4; + d = cornerVertNumber * 5; + + indices.push( a ); + indices.push( c ); + indices.push( b ); + indices.push( b ); + indices.push( c ); + indices.push( d ); + + a = cornerVertNumber * 2; + b = cornerVertNumber * 3; + c = cornerVertNumber * 6; + d = cornerVertNumber * 7; + + indices.push( a ); + indices.push( c ); + indices.push( b ); + indices.push( b ); + indices.push( c ); + indices.push( d ); + + a = radiusSegments; + b = radiusSegments + cornerVertNumber * 3; + c = radiusSegments + cornerVertNumber * 4; + d = radiusSegments + cornerVertNumber * 7; + + indices.push( a ); + indices.push( b ); + indices.push( c ); + indices.push( b ); + indices.push( d ); + indices.push( c ); + + a = radiusSegments + cornerVertNumber; + b = radiusSegments + cornerVertNumber * 2; + c = radiusSegments + cornerVertNumber * 5; + d = radiusSegments + cornerVertNumber * 6; + + indices.push( a ); + indices.push( c ); + indices.push( b ); + indices.push( b ); + indices.push( c ); + indices.push( d ); + + } + + function doHeightEdges() { + + for ( var i = 0; i < 4; i ++ ) { + + var cOffset = i * cornerVertNumber; + var cRowOffset = 4 * cornerVertNumber + cOffset; + var needsFlip = i & 1 === 1; + + for ( var u = 0; u < radiusSegments; u ++ ) { + + var u1 = u + 1; + var a = cOffset + u; + var b = cOffset + u1; + var c = cRowOffset + u; + var d = cRowOffset + u1; + + if ( ! needsFlip ) { + + indices.push( a ); + indices.push( b ); + indices.push( c ); + indices.push( b ); + indices.push( d ); + indices.push( c ); + + } else { + + indices.push( a ); + indices.push( c ); + indices.push( b ); + indices.push( b ); + indices.push( c ); + indices.push( d ); + + } + + } + + } + + } + + function doDepthEdges() { + + var cStarts = [ 0, 2, 4, 6 ]; + var cEnds = [ 1, 3, 5, 7 ]; + + for ( var i = 0; i < 4; i ++ ) { + + var cStart = cornerVertNumber * cStarts[ i ]; + var cEnd = cornerVertNumber * cEnds[ i ]; + + var needsFlip = 1 >= i; + + for ( var u = 0; u < radiusSegments; u ++ ) { + + var urs1 = u * rs1; + var u1rs1 = ( u + 1 ) * rs1; + + var a = cStart + urs1; + var b = cStart + u1rs1; + var c = cEnd + urs1; + var d = cEnd + u1rs1; + + if ( needsFlip ) { + + indices.push( a ); + indices.push( c ); + indices.push( b ); + indices.push( b ); + indices.push( c ); + indices.push( d ); + + } else { + + indices.push( a ); + indices.push( b ); + indices.push( c ); + indices.push( b ); + indices.push( d ); + indices.push( c ); + + } + + } + + } + + } + + function doWidthEdges() { + + var end = radiusSegments - 1; + + var cStarts = [ 0, 1, 4, 5 ]; + var cEnds = [ 3, 2, 7, 6 ]; + var needsFlip = [ 0, 1, 1, 0 ]; + + for ( var i = 0; i < 4; i ++ ) { + + var cStart = cStarts[ i ] * cornerVertNumber; + var cEnd = cEnds[ i ] * cornerVertNumber; + + for ( var u = 0; u <= end; u ++ ) { + + var a = cStart + radiusSegments + u * rs1; + var b = cStart + ( u != end ? radiusSegments + ( u + 1 ) * rs1 : cornerVertNumber - 1 ); + + var c = cEnd + radiusSegments + u * rs1; + var d = cEnd + ( u != end ? radiusSegments + ( u + 1 ) * rs1 : cornerVertNumber - 1 ); + + if ( ! needsFlip[ i ] ) { + + indices.push( a ); + indices.push( b ); + indices.push( c ); + indices.push( b ); + indices.push( d ); + indices.push( c ); + + } else { + + indices.push( a ); + indices.push( c ); + indices.push( b ); + indices.push( b ); + indices.push( c ); + indices.push( d ); + + } + + } + + } + + } + + var index = 0; + + for ( var i = 0; i < vertexPool.length; i ++ ) { + + positions.setXYZ( + index, + vertexPool[ i ].x, + vertexPool[ i ].y, + vertexPool[ i ].z + ); + + normals.setXYZ( + index, + normalPool[ i ].x, + normalPool[ i ].y, + normalPool[ i ].z + ); + + index ++; + + } + + this.setIndex( new THREE.BufferAttribute( new Uint16Array( indices ), 1 ) ); + this.addAttribute( 'position', positions ); + this.addAttribute( 'normal', normals ); + +} + +RoundedBoxGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); +RoundedBoxGeometry.constructor = RoundedBoxGeometry; + +export { RoundedBoxGeometry }; diff --git a/public/the-cube-master/src/js/plugins/RoundedPlaneGeometry.js b/public/the-cube-master/src/js/plugins/RoundedPlaneGeometry.js new file mode 100644 index 0000000..25766a8 --- /dev/null +++ b/public/the-cube-master/src/js/plugins/RoundedPlaneGeometry.js @@ -0,0 +1,30 @@ +function RoundedPlaneGeometry( size, radius, depth ) { + + var x, y, width, height; + + x = y = - size / 2; + width = height = size; + radius = size * radius; + + const shape = new THREE.Shape(); + + shape.moveTo( x, y + radius ); + shape.lineTo( x, y + height - radius ); + shape.quadraticCurveTo( x, y + height, x + radius, y + height ); + shape.lineTo( x + width - radius, y + height ); + shape.quadraticCurveTo( x + width, y + height, x + width, y + height - radius ); + shape.lineTo( x + width, y + radius ); + shape.quadraticCurveTo( x + width, y, x + width - radius, y ); + shape.lineTo( x + radius, y ); + shape.quadraticCurveTo( x, y, x, y + radius ); + + const geometry = new THREE.ExtrudeBufferGeometry( + shape, + { depth: depth, bevelEnabled: false, curveSegments: 3 } + ); + + return geometry; + +} + +export { RoundedPlaneGeometry }; diff --git a/public/the-cube-master/src/scss/.libsass.json b/public/the-cube-master/src/scss/.libsass.json new file mode 100644 index 0000000..65dc430 --- /dev/null +++ b/public/the-cube-master/src/scss/.libsass.json @@ -0,0 +1,16 @@ +{ + "output": { + "dir": "../../assets/css/", + "structure": "nested" + }, + "compile": { + "style": "compressed", + "line-numbers": false, + "line-comments": false, + "load-path": false, + "plugin-path": false, + "sourcemap": false, + "omit-map-comment": false, + "precision": false + } +} diff --git a/public/the-cube-master/src/scss/components/_btn.sass b/public/the-cube-master/src/scss/components/_btn.sass new file mode 100644 index 0000000..322298c --- /dev/null +++ b/public/the-cube-master/src/scss/components/_btn.sass @@ -0,0 +1,46 @@ +.btn + -webkit-appearance: none + -moz-appearance: none + appearance: none + background-color: transparent + border-radius: 0 + border-width: 0 + position: absolute + pointer-events: none + font-size: 1.2em + color: rgba(#000, 0.25) + opacity: 0 + + &:after + position: absolute + content: '' + width: 3em + height: 3em + left: 50% + top: 50% + margin-left: -1.5em + margin-top: -1.5em + border-radius: 100% + + &--tr + top: 0.8em + right: 0.8em + + &--tl + top: 0.8em + left: 0.8em + + &--bl + bottom: 0.8em + left: 0.8em + + &--br + bottom: 0.8em + right: 0.8em + + &--bc + bottom: 0.8em + left: calc(50% - 0.5em) + + svg + display: block \ No newline at end of file diff --git a/public/the-cube-master/src/scss/components/_document.sass b/public/the-cube-master/src/scss/components/_document.sass new file mode 100644 index 0000000..fbb801b --- /dev/null +++ b/public/the-cube-master/src/scss/components/_document.sass @@ -0,0 +1,40 @@ +* + &, + &:before, + &:after + -webkit-user-select: none + -moz-user-select: none + user-select: none + box-sizing: border-box + cursor: inherit + margin: 0 + padding: 0 + outline: none + font-size: inherit + font-family: inherit + font-weight: inherit + font-style: inherit + text-transform: uppercase + + &:focus + outline: none + +html + -webkit-tap-highlight-color: transparent + -webkit-text-size-adjust: 100% + -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale + -ms-text-size-adjust: 100% + -webkit-text-size-adjust: 100% + overflow: hidden + height: 100% + +body + font-family: 'BungeeFont', sans-serif + font-weight: normal + font-style: normal + line-height: 1 + cursor: default + overflow: hidden + height: 100% + font-size: 5rem diff --git a/public/the-cube-master/src/scss/components/_icon.sass b/public/the-cube-master/src/scss/components/_icon.sass new file mode 100644 index 0000000..b884e95 --- /dev/null +++ b/public/the-cube-master/src/scss/components/_icon.sass @@ -0,0 +1,6 @@ +.icon + display: inline-block + font-size: inherit + overflow: visible + vertical-align: -0.125em + preserveAspectRatio: none \ No newline at end of file diff --git a/public/the-cube-master/src/scss/components/_range.sass b/public/the-cube-master/src/scss/components/_range.sass new file mode 100644 index 0000000..83e922c --- /dev/null +++ b/public/the-cube-master/src/scss/components/_range.sass @@ -0,0 +1,137 @@ +.range + position: relative + width: 14em + z-index: 1 + opacity: 0 + + &:not(:last-child) + margin-bottom: 2em + + &__label + position: relative + font-size: 0.9em + line-height: 0.75em + padding-bottom: 0.5em + z-index: 2 + + &__track + position: relative + height: 1em + margin-left: 0.5em + margin-right: 0.5em + z-index: 3 + + &-line + position: absolute + background: rgba(#000, 0.2) + height: 2px + top: 50% + margin-top: -1px + left: -0.5em + right: -0.5em + transform-origin: left center + + &__handle + position: absolute + width: 0 + height: 0 + top: 50% + left: 0 + cursor: pointer + z-index: 1 + + div + transition: background 500ms ease + position: absolute + left: 0 + top: 0 + width: 0.9em + height: 0.9em + border-radius: 0.2em + margin-left: -0.45em + margin-top: -0.45em + background: #41aac8 + border-bottom: 2px solid rgba(#000, 0.2) + + .range.is-active & + transform: scale(1.25) + + &:after + content: '' + position: absolute + left: 0 + top: 0 + width: 3em + height: 3em + margin-left: -1.5em + margin-top: -1.5em + + &__list + display: flex + flex-flow: row nowrap + justify-content: space-between + position: relative + padding-top: 0.5em + font-size: 0.55em + color: rgba(#000, 0.5) + z-index: 1 + + &--type + &-color + &:not(:last-child) + margin-bottom: 1em + + .range + &__list + display: none + + &__handle + > div + background: currentColor !important + + &__track + &-line + background: transparent + + &:after + +inset + content: '' + opacity: 0.5 + + &--color + &-hue + .range + &__handle + color: red + + &__track + color: red + + &-line + &:after + background: linear-gradient(to right, red, yellow, lime, cyan, blue, magenta, red) + + + &-saturation + .range + &__handle + color: red + + &__track + color: red + + &-line + &:after + background: linear-gradient(to right, gray, currentColor) + + &-lightness + .range + &__handle + color: red + + &__track + color: red + + &-line + &:after + background: linear-gradient(to right, black, currentColor, white) diff --git a/public/the-cube-master/src/scss/components/_stats.sass b/public/the-cube-master/src/scss/components/_stats.sass new file mode 100644 index 0000000..0804c3e --- /dev/null +++ b/public/the-cube-master/src/scss/components/_stats.sass @@ -0,0 +1,26 @@ +.stats + position: relative + width: 14em + z-index: 1 + display: flex + justify-content: space-between + opacity: 0 + + &:not(:last-child) + margin-bottom: 1.5em + + > i + display: block + color: rgba(#000, 0.5) + font-size: 0.9em + + > b + display: block + font-size: 0.9em + + > i + font-size: 0.75em + + &[name="worst-time"] + display: none + diff --git a/public/the-cube-master/src/scss/components/_text.sass b/public/the-cube-master/src/scss/components/_text.sass new file mode 100644 index 0000000..f028d5a --- /dev/null +++ b/public/the-cube-master/src/scss/components/_text.sass @@ -0,0 +1,40 @@ +.text + position: absolute + left: 0 + right: 0 + text-align: center + line-height: 0.75 + perspective: 100rem + opacity: 0 + + i + display: inline-block + opacity: 0 + white-space: pre-wrap + + &--title + bottom: 75% + font-size: 4.4em + height: 1.2em + + span + display: block + + &:first-child + font-size: 0.5em + margin-bottom: 0.2em + + &--note + top: 87% + font-size: 1em + + &--timer + bottom: 78% + font-size: 3.5em + line-height: 1 + + &--complete, + &--best-time + font-size: 1.5em + top: 83% + line-height: 1em \ No newline at end of file diff --git a/public/the-cube-master/src/scss/components/_ui.sass b/public/the-cube-master/src/scss/components/_ui.sass new file mode 100644 index 0000000..3a1f771 --- /dev/null +++ b/public/the-cube-master/src/scss/components/_ui.sass @@ -0,0 +1,52 @@ +.ui + pointer-events: none + color: #070d15 + + &, + &__background, + &__game, + &__texts, + &__prefs, + &__theme, + &__stats, + &__buttons + +inset + overflow: hidden + + &__background + z-index: 1 + transition: background 500ms ease + background: #d1d5db + + &:after + +inset + content: '' + background-image: linear-gradient(to bottom, rgba(#fff, 1) 50%, rgba(#fff, 0) 100%) + + &__game + pointer-events: all + z-index: 2 + + canvas + display: block + width: 100% + height: 100% + + &__texts + z-index: 3 + + &__prefs, + &__stats, + &__theme + display: flex + flex-flow: column nowrap + justify-content: center + align-items: center + overflow: hidden + z-index: 4 + + &__theme + padding-top: 15em + + &__buttons + z-index: 5 \ No newline at end of file diff --git a/public/the-cube-master/src/scss/fonts/_bungee.scss b/public/the-cube-master/src/scss/fonts/_bungee.scss new file mode 100644 index 0000000..dc86ea3 --- /dev/null +++ b/public/the-cube-master/src/scss/fonts/_bungee.scss @@ -0,0 +1,7 @@ +@font-face { + font-family: 'BungeeFont'; + font-weight: normal; + font-style: normal; + src: url('data:font/truetype;charset=utf-8;base64,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') format('woff2'), + url('data:font/truetype;charset=utf-8;base64,d09GRgABAAAAADCIABIAAAAAbvQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAwbAAAABwAAAAcgMaRMEdERUYAACp8AAAAHAAAAB4AJwBoR1BPUwAAKygAAAVDAAAkYl+xQ2BHU1VCAAAqmAAAAI4AAADuG+w0B09TLzIAAAIMAAAATAAAAGCWIuetY21hcAAAA3gAAADPAAABmq1lz21jdnQgAAAGvAAAAFAAAABQHj4lfmZwZ20AAARIAAABsQAAAmVTtC+nZ2FzcAAAKnQAAAAIAAAACAAAABBnbHlmAAAHwAAAHtIAADeIYFYc6GhlYWQAAAGUAAAANQAAADYSj5dVaGhlYQAAAcwAAAAgAAAAJBWYAf1obXR4AAACWAAAAR4AAAGIw8giGmxvY2EAAAcMAAAAsgAAAMYcxw9WbWF4cAAAAewAAAAgAAAAIAF/Ah5uYW1lAAAmlAAAAvEAAAZjloOeOHBvc3QAACmIAAAA7AAAAY9ePAmCcHJlcAAABfwAAAC9AAABMcb0/DZ42mNgZGBgAGJzsc274vltvjLIczCAwKVr+xJB9A2mXjEGhv+6HM3sW4BcDgYmkCgAI/EKQwAAAHjaY2BkYOAV+tHJwMApxMDw/z9HMwNQBAUkAQBo9wSpAAEAAABiAFIABQAAAAAAAgABAAIAFgAAAQAByAAAAAB42mNgZtnEOIGBlYGF1ZjlLAMDwywIzQTCaQxIQIGBgR1IMcL4KVlFCgwODAqqf9ge/nvIwMArxF6uwMA4GSTH+IXpAlgLMwB4xA5BeNotkKFLQ2EUxX++9+7nNL5kMFhFTCYxrAguiMgQ02OMsWCZ8lCZYBpiEBnzf5iCimFpmAwGgwyxTZMY1gZi0er5nu+Dw7nc79zDPTcYs4pecAsTAwjrXNsCFQclW2KnUGTbzbEevLMf7lITEnvg0D7ohDFpmFD2HDwxba80oxdqNkvZZqjbHS1bJLVzmhaxYT2qqqvZnGB9Lr2P+N6KJO6LYxuyZwPa5jTzK16hHX2Lb2i6WPWQhrXYyv46tN2z4FSPpD/I2eu1uzyXpTvxnu5K3iOhq/3XqPgsfucsT59Nv0eEsnSZV/809Dr1spv4jG8w2VOdc3Che42F0j/4EZ+JG7k+h/eYivNb+cxH8hUKn6Re7z3sEf4AOzpYcgAAeNpjYGBgZoBgGQZGBhCYAuQxgvksDBVAWopBACjCxZDAUMewgGGtApeCiIKkgqyCmoK+Qrzqn///gWoUGKrBcgwKAgoSCjIIuf+P/5/8v+L/nAdeD1wfOD1weGDxwOAB461UqF04ACMbA1wBIxOQYEJXAHQyCysbOwcnFzcPLx+/gKCQsIiomLiEpJS0jKycvIKikrKKqpq6hqaWto6unr6BoZGxiamZuYWllbWNrZ29g6OTM27rXVzd3BmoBuI8wFREZExsVDTx2gAWWiwuAHjaXVG7TltBEN0NDwOBxNggOdoUs5mQxnuhBQnE1Y1iZDuF5QhpN3KRi3EBH0CBRA3arxmgoaRImwYhF0h8Qj4hEjNriKI0Ozuzc86ZM0vKkap36WvPU+ckkMLdBs02/U5ItbMA96Tr642MtIMHWmxm9Mp1+/4LBpvRlDtqAOU9bykPGU07gVq0p/7R/AqG+/wf8zsYtDTT9NQ6CekhBOabcUuD7xnNussP+oLV4WIwMKSYpuIuP6ZS/rc052rLsLWR0byDMxH5yTRAU2ttBJr+1CHV83EUS5DLprE2mJiy/iQTwYXJdFVTtcz42sFdsrPoYIMqzYEH2MNWeQweDg8mFNK3JMosDRH2YqvECBGTHAo55dzJ/qRA+UgSxrxJSjvjhrUGxpHXwKA2T7P/PJtNbW8dwvhZHMF3vxlLOvjIhtoYEWI7YimACURCRlX5hhrPvSwG5FL7z0CUgOXxj3+dCLTu2EQ8l7V1DjFWCHp+29zyy4q7VrnOi0J3b6pqqNIpzftezr7HA54eC8NBY8Gbz/v+SoH6PCyuNGgOBEN6N3r/orXqiKu8Fz6yJ9O/sVoAAAB42kXOOw6CQBCAYRZkeYo81pIEbbeztrAQLIiJsYLEA3gCGwttrIwexQxWxnN4HnHUce3m+5OZzI21B2AnrQR7UTWMneum4LIaQFiXIJY47OsUuFxVGhhZDoacgpPlV+Opyw9shHMkWAh7RuAIa0QwETwldBBmQnDf1x4ED+FuCT7CGxK6CN//gkFAr8RYg4suG6PYICNkvFYMkdFEsYcMx4pJlt+1YNdqqoh3SRj/lz6uiPmPNQj5AnNnVq8AAAAAAAXDBcMBhwE7AVwBbwF1AX8BgwGMAZEBrAIaAdEBvAHAAcUBywHRAdUB3wFnAV8BQgFOAXgBUAFZAb4AxwGUAYUArwArAC0BtAHIAEQFEXjaY2Bg0IHCNoZXTFZM15jXsSixRLHMYLnGasU6g/UWGxObGVsI2wq2b+w+7Os4mDiCOE5wKnAu4OLgCuHaxPWMW4U7gvsITxHPI94g3jm8D/gs+Dr4XvG78M/ifycQJbBIUEgwS3CfEJ9QidALYTvhNuFrIi4ih0STRK+JSYmFiZWIbRB7IS4gniN+QfyHRIwkFxCq4YBOknGSVZKLJE9J8Uj5Se2T1pOeB4ZHALNAMRwAAHja1Xt7dBTnlWd91Q+1RKu6+q1Wd6tVXeouNUWr6S615EbowcM2xrJMNJhhOIpgcSZLfEwU4vWwDMeHJQxhGYcwWZzYYWzW4yUMh2GYqlYno0McB8chxPEyHI4XdGaJBzMej6eJJyZewmAHFXvvV/0Uwh7vf6tzqO9R3V333u8+fvfWhWGZ5QzDfsHyCGNiGpgujTCpxfkGc/xfM5rV8svFeRMLU0Yz4bYFt/MNVunW4jzBfcUpOGOCU1jOtusd5Dl9k+WRj/9qufksAz/JHIXLK5bXGAcTYR5g8mGGkTWPvQi/yMj0QtT2lMpfVJmMFvAW1QY6TNoCvE3WHJ6i6khpNk9RE4gMz/c4Xeq83MK0O96jCBlfg4kjohCNSyZnN93wOj1W3DjGChLZI7WzITYm6T+RomxQlMg2KRqV9D2SaNkmiaJ0q4jrmX8hdlzp1+HKUJrH2dfM50s0r2MolapbKdibmQazrAYzdKe0pOQ7Lmo2rqja+MmHbA2crDHACJPSGry4p0WIrLVwxcmHIjzc83sNZu5kgsxab2AjWTKqRFgeJvrfZyMs+1h5y4lb/xu2LBPZSCQ7czQbaeth11bnyMcKhrFMAR8PMg+TnzN5OGJZzSl0zLuRqbBCx8ID5uXuZnnSsmD4oQ6/oj1gLU5mBwZXdPgzBa6B3rLKIw/jLQ5uOVoCUbhF1FUp7XNEVntaTw4+cuM045WbOPV+XnWe0pb4PlL9p04Obvy3KG6r/bwaPKX1wq5wygKfmbTc73TDr9KrA68nBz//bwx8dt4kj0uLuoSfbFnid8vw3clAfxA/MXbjt/QTrbi0qL38ZLRXgB+Q6XUBvWbxWv2xHlxa8DcG8Ev4q4P4q9UfG8IlpWkFPhg/MVx+7kP4ncmR8jcfxv080Nf+p+1/Klo5pyuXh6/jACThAI+DgRmy8/5Woad/6H5nsHdJV80fGQpZrA7e3xJoFaLygmxP/8Dg0P0rhh8aeXj2R2f/qUOtBLUm293TR3rFaLyf0NkA6SMZn4Mo1VnGFyYeq0waqjOOyCQaHyRidRaNw3fEFVFpV3gNWsDTQXNEmpYkc/C90szSOowmsjO8Gu/vDZfuh98rzSyhETCt3vfC75HxS5J4Roz/Uoq+ip991bhGJdg4I0pw8xe48QvjKpLhMwxhNt1eYb5i3c4MMnuYfD96BnNjMd9vbpInh/rvaZTzIVBOrcNUzIc6cC/kbwR7G0qpfRdVd0brdhTRGLv78F73wka8CvCtvm7c6GMaZdWR0ZaA9XX3OV3ft8yzxTrlDn+O0cz94EeUnNrh1JqTuZwacmkudw78Sm+W+pGebHdcinURlHBpC+RYEibYptXr8fktbQSXDV7D5fQTuGwSJVYKtrYG9bP7/+ZHR8Q4SYBYqHsRg+FwkKT3q1MvwWpaiurvSeLKD+BeiyiwsueZ49Mv/oB7Aj/7ZVECZxQNBmNswnPgr6efn+KfwHOYoP7Jwqy5fb3hpuUs4wT/lGKWMA8zp5n8IFr3AqVwr5nhzHLejHYdMuYiGnwHgY3h7kFzMwx0X/W2X3QWHHSOxqwyFwsuBzMP7rh4rYXIhSZj1cRrC2G11Fgt5bUVsFpEV2UHMCBc+57hANp5sHEt4f9I7TzFTLYLnQmq95UZqrHW4nK6NIc5l9NWLIXZYHcuh6qNXjzTxoIX51hQz5jHp8BZOLvjIoi8kRj63UAMDY594qfXHPjl5m+MRiKj+x6/9AxJBJJyS4ucDJBRssIWA91tt+lTxoRdc+DS5n30o5svHSCJlqQcCMjJFtNqsnvzHnFoLKtvz44NiXuOcz4fRxrsPp/9d6olFYO/j8/D5Sfk65u/Lg7C5/44OzaIn/P7OWK1+/12PC/CDMOhXQM/vIzJMvklqOeyrZiXl6Caygpo7DzUc4+tSNTlKe1ejHQe2enKm/sW51Ar0eR7DW00NNFQQhh9KBDDwo01VV5n9XMyKann8IGJ5dmT54hKlfFCOhRKR3B6OB0Op4mYFCA+7sON1I/yM2dePkM2Hd5/eF74qyMb90yK0vtSNBaQAx2i9CYq7FCgI5EgQSkqxv9Bin7+8E9PUz6fYF9jH6NxM8PUBngeVQujIf6btDUwGNo5I7RzRc05ZzR8km3rgVDXVo1+taGOPm/j7TGTy/pFsAKBoXEYnuLkinkng5J1NoIDaMmUgm0vCEVQqsICrakRXnt84zQRJtDIhtKimB6i5qZfntZNp08Wo9JNSUxnb13IZqJomVfh2WPwbHvts20XtQA82xbAZ9t4eDZTfrafumxDN1FzDcfdTtGKAJo7JkqDaTGaGaTGT4Tpaf3ylyVx3XUpmu4xydm0CAREiydv9U1dFeHZT5KQZQ3IeQEzn6G6Qy9ETSIVBYeD4cEwu8DvOWxgXHyUGpcLXP4A8VtM8R5qRaZYjy9CfNYGi99ndRBrXJoHhpUiXWSQxJ728Su5RJKIKVtb9wdK0JYggWTcOcz7Ff3MFdEsv5rsCDz37YCUPCWbxcv6z03rROUdxen7E5JRBEHR/+5P/M7udxTRprwvJdq+EZ4nE0G/LDeFvhHplN5XDLvYz+y0rLIsZURmlFGFlOpTNLOtqHKZvEBjgBAC2zALODU3ouvvSKmRi6olo7WA62/O5FsieK/FDR+LtOA0Ak5fixn6RP22k0oeJF2xGyc9/3jWCUq2H5R+BMxBipIRahd5wIeSqOclkd1clESylu4eFSVY6EdxQdaKlPYttxX2JVZhQkwXozanCh4zYwPn2JrSzHaw4zD1po1exmGWS4PWVlHEMlStKkOmpx8D8paoRA5J4pG9h/BZ+4Lht6XoSZKiVOx4/ruiNCqJbcFI1JDfKMuZmkwFsDc/0oBPNp7Op8pGNQsXj0J8iqHZzkBEZtcSF/3lX1PkCzwBaESeHBBV8s00HjcXK5OSHc9iynkHU/icEh/w2xul6Ery3+n0PxgAmzBNt1ewpyHuOxjG7x4gtWbP3QBkAUFTMuMEwqQ0YX0Rv/3RBjBJwLRbb1+xrLNcYbygNYsYMHUgLtBUzFvRhbbPK1IlAT/gA//i47UQWIHdVUSd0EI+sAantRxqBtia6NHF1oePrb1PX3/55d8+nc0+ff1HL19/upec69u0aXHflzb1kV3syfGDE/39E99dP3Pf+MHHBwYeP3g00dubYCWpt1cyzmYjw5h3gI22QWaVD1ERNhUBteQ5JLShCQiNpFTLRc3tLebdFlRedwvoscWNUwuDaMbSBNrcbgiYuhBnCfUZoq7ikfhGUXr3ZRQTCwryU5rcbAV0AV6DPY7OAzdcYhwnqDdAWwFoSzKdTF5G2qKAu7xIGNcIhHWltBQGIS4KArOGKTBCefXGBgggIwPtVGNMg4UDJFQNTPHR1Jqt9xK34GuJ6MtQ29jPnzh5/IBejPjY+yktGSCObNj63Udznt+3tQsRnyhdk8S/+d6rB/9Hcq3NK8ii9IFB6xeA1teA1h4mzeS7yxixA2kNm4oFT3N3RzPETiuQ3ZvS7qGxsxnQ3YIaNAfEVog2TG0OJgw0h9tfADGyGBb1w0jsNJ3uotLtO3Yku+xbW14/PbPNAG+xQG8gSvFtrCWC8RHCw6E9W0eeCPH/bc/ZQz+gdrUT4n8EeBCYISbfimCMXhCiqU6FjkSNUrVtBLVt5LUwoKrmDCqxJiJL5lZgyZ6rM2gIX7Osjvq0neCj+oHY0I9h0kcN7zQ4ryNnTrDH2HO4njknxNitOPv4PHVp9iOGzoL9my8AnQlGZvJSWdaekqyJOj+lyUhN2Ox0Tdqb2yIApu+Uci38EAVvvVdgnYG2SItuxueankDd0D0kcOTU9NTMfwJPARL1t6wKgDqwOn4EpLn78F/o7zw/JZZsX6ZyTDGPlmoJsYYiFaDWjNqwIGxGbbAAsQupPKMgTz6Tj1JEEEVEEOW1TiMh19IwdoKO55s9oOQ5tcUJMgb9WQDCdpaEnSC1gAucVTsua10G5RtdBiAIMk1LDDuHs+mdo8RzVtn9z+rL1/Yo5Fx67Vg6PbY2TXawL568KkofSmLqwSTHn/zB6fHnHl+8+PHndgiyLGyLzJ8fwbMYgbM4CLxG0X94UF08ZZ3R2tF7iCnVf1HjwXvwfmSOt4H38PM49WMU7MCTaseCiSNXjob0KDjWQSoKA1Y9SLIwhTBompJEaWTb6LOgMgVjemQGNMa8kzqQmY83/Nd1fYGkfpAqzVeN1RTNSUzMBjibVeCXRbDTQchI8hE8HckK8QNJXmwtFrJdkWY4nay5SJO4+Re1VmcxP78VSZ6PJGOq1joffI7LB05ay3bB1GeuR8CG165a7Fwn4a5bbXhqbHl3dvv57x4895+7e5aNPbV4//WpqRv7F5PT905MLFs2MXGvIq9ZK0lr18jkvp/tf94NqHfr8B+tTiZXb30QTdn1wv6frdq1XlHW73pBmC+3b47IcoRM43mtwynWWjaAjXuAf9TN+5g8j9z7TaW4tAC4j8R4K3AfKelm8KLamdHsgBiDdhRAEEAMKiSjxSJwZiGD6UqMsiZIxV8BZxAs2+P1TG9Qvv4u1bWL+mU9QY9oB6jh1z6nv/93oH5jazMZUEHTjtPjz27u69v87PjMBtTD34AeDic55w+vICfbkCdaA6NYwNJEa2BKFQ0AsAH/WiyhbTCtEg4AoF1GBMKciCBAPgEh3A0tsHo9dEC6EHcBXSFAv313Ii/0UQLSl6T0hSv0xTKFuEFf16fDsLsQWwfLammeC6Kx35xFO2EOM1vMumUEMAFDFRoQOD4B42epoIBLLDwc3r3DRKuSMwUPx3nYYRo1r+/YzX7nwHM7O962CZL+oSRZD5l5t8tpfsEqSfpvIKe9HNsJMtrPXLOsMr9Jz67VQIY24+Rs9OTK9cdsXT4Zd85aAzo2J/HBv8Okr2ZOcldxehWEwH6ziNNihccpZovFZfCIIi5BBuQJ40KlaGKxxqfAyQ97HA7PTIFGA/uO3bt33AKPP0UcUrzhBQgywNohYI1wkmB7O/ZfngPeY5dt7agHY+Af36H4qou5n8kvQP0U7aVYEEIHmaLJgjOjdYKP7KSZQif4SCxlaJ1gY3lf0JNDPxMSweC4XL1AkEIJcqUazDMbTEPaxn77zJXj35q5IIlW2QoW92ykJRSceUMSD8NiK40Fe0sO9Icnpo8/4xk2h5GdhDlnDkfCIfF31+qqzyyz/fZ91ietT4EPfYDZy6h9qULG0G9XqrCMlmoKbcbGfalCwKjjSKmCle4RdSWF6EkHrVQnec1L5MKQUbcZ4rXlsGozVm08akHBTj+pPQgyWT4EMpEyVoyEbU4sjwkurae3ApdJh5IxUxUFn1sT571OCpu7wBFz6Kra2Bol6ugitErhRBe1fdkxIv/zu0Q+tlT8wvf360+dO3jwHDkbbF2VSm+/dPTopafS6acuHSW7pQhg/+3v6v/r2DL2W+HE3idzAukzrdhycvfKlbtPbpl5f/zg5v4ju8nTe460BmeyX/ocKyz9ykgyOfKVpbeOLv3yiNwmLZLaHtj1QzIO2cTpVNDwHRPgozdR/CADBqYRSvUodMzb2NKl0BqN2MBRtzaADi2gICLIF9UgrYhheUFLInwIQmyKiqg+NkAQqmRg5J7eUj7jdxvGXIJlpRkRTF1Yu7I2TEidk3YFMwbFPpmIg578IhHXvw2K8CYkoxfIkg02t12xu20r2VD/XzxGzouCIOqpx14cmPkn6tvb9H9EB3mS9LqcTpcRg/cBf1uBPx/Tzsxn1hu4QfNbinkLWsV8S7EgtHsswJyAMVimzPldRVXI5P0UIfnBQFQ/rwWBRd5Z1BbAGPQDf7GcyhvoSGgvQdFe55zomVSgoLMUnWSyDyxl3+uvLu7fteO1N25BuknOkiYJ/vQbJ3A4sdICDvTgixvXbG61P/+dl48fBh+TSKxKAIJNJGBm+JatYPPHgT8akYw3SaYy+msqfloFaDaaQwhd1dT2+NabhCH/hxrjHw4O9A+RP6fz5tvMTfIS+9SFczSRUhS9RUmJEnzwLOoUynwnrXkFmIVM3o5U8Y0liQcQNbdSqngEorzmAYECxkcBV4KQUQjCAE+UcpEIJZYnzM2bt5mZEZDX+evpVCp9ncrp7IWZnRfOimRDWiEfKilDNkCHeRroENEbCkhFS2NZNo3FAucXEBlz1kqC3OIySihUUi0oqVDGqKWUCii9d+D42bNoHMg0/YDGqTfIfiquLWyWxqqVkB9ZaFSExO4FmiGppaSuQm+e+u97jfzYuFSgvJ8LIcF+k5EoI8HcLIJL1LZ/IrXOKqHfooTeIH9I044/B2JfqxAJ7vdCVLoBidJmI+8EXbP0A30dzGoG0gfUNcyFovhwT6BRrlG72Fxq56S+V2uDs47D6AUjVZupY7Xn7qKMs/I5QyNZhkaRNYMDqdQZwBwD9J3ldkMpd4AalJTSp6TJEK3s7KGaWZKxZTfViQcMnVB9Ch2N1JMzUs9CY4jqRqO9ohthfJmZUcO81gqJaFNGc3PFWVrhdQp3Zp9VYWMKStaUUlEqaP1YncD1ZeRHNSnoz/RFhtw3g15sqtNjs6kIRlypm6i+DCXTAhrhKeZbLOUSIOhv3kKrgFg3wepr7C6lE6PmW1s/2RyV3ngDJWv6El7PnMHrrWcBjYKds2qphAKXmVXU9I061urbVwDPYTxZXvJH9nnFvD2MNNgtjcZLVnqppPcOmt47MIJ4aG6vORpBM8K5mmIdreNXy/iVCtVqEStj0e7xteB/yBJJzO6+Wsj/y26F7CIUIH6MRSgTLVrcaioVpsp68BTQOZ95hMl3oh60KnSs04NyQOgwDr+Dx4Kl5ueMKNDWAWQ25VS/U3O6MeyZOyECNkZzuVqdUCrlvNrwR4NBnWqMvsll4mSx2MKdf2KvUaEQ2vXf1GtIgrwVi4iCLlq/s33mx1RN9gsxXa71IRYF+AowixkIYCD/RrDRRpoON3IlGy3x1lpbXmkChtyOei88l0qXFTkAYydFv7+ukHeryRD6zPZaeqzoM9LMMJNPoZxDCh0NOXvKcs5QWmRnUZV5dF/44kBTYGyXQaY2FxVvCqZ2oVa8iCkwRSljjKqAS+90U6SG7pWC7Jpqctjddq7pb12yQOirXP2nUnSbqxuSFMW1DWR8rsRPWNDzCCTIiBAuGyV7/m2xLRJ9eyZVqg+jvLfRmgT47Hbkz6vQ0eCvucyfSPkLAX8hXguAB2nMaC5AE7QkYW5HvQmWGcPqvH92Iauf1HByQeoNYjwkCtWKs+BKXjJGSnkgoi8ihaoruUWOzowhwUa9aOIz1oq5/5da8b6Pf/zKzX333LPv5iuv/G5fLznfPzHRP/Dlif5/T63YwBBJkKsHouEgk3ehROmFgog2W7HQ7HUhbGu2VqIhBzR7MypHBYx+pS4Olt8tlXFnHRJ7gvj/51n96vuGtZGzU33x2OIpKsx/yOsf59/SjyO0/NWA9Lg0wFA5rqByDIEHGWEM8Unz4Pkprb25AiQxaEDEEEtSRKcRZsBpBHKq6FStOdUOEqW63e5F4bbmcrNlW32X3kXuIuPYukPbDIfx6+/VyPk77F9W5PwHI7v/40p+C6r7FnH6TOKeexJsypC2IeuDNL4ksYZIo6K7FBWpuJPWYiHUIaC4Q1ZaDC8z15EBJ4++JYwoGVj1I0oGVlPoJ8PAamcFJXeE5kbJczrF+uM59u4JZXACveJPIJ7L+hWDXXLuYDYWyx6k5/TjZ9ev2QZQeadO31uRXFLWJ2BmSvQm7kv0Ym8FxNErdTV+rOW6aXZsqqnxhyDN1po77tL8UPu6uabnQZzd6vCPP2MH6rsc3qmUyKv9DSd+OKux4cRJ6ldycCZW6sfrtJ8iLD9EfHuG+m8vaD2k8pwXz4ADkJX3cjj1Yu0wOEdJo7YsnhMlc46S+GaUljch0SpXNuFyy01rEP9K6dkFfuNJGtcX18R1s9EGVl+u91Tjuetu8ZwmGnPE811GFB94bHM/zHol8Z59N1555cY3e8ku0w3qytbRgH6kPqCTSh6rMP3G2RoXSmCoTGC3QaCXEoipqwCAI0s9MEQZlZ/1MqE2uNRRWu2x6zJNAAC9T0rYbBusTt7PO60bbDYgfakUtfIB1+ucIs38SlK4110B3moaY8NGZuCZ79OveByclwj+Ti9L3fjMO+nl/cuT+jwpHJbIb5OwMGLodoihWOPPYQxV0DqjCh0N9nxl9hbVxnMXpqkQYPpgdIH8tfhCGkMVDDXzc3Wsuo0uEn9tNaeGRyM9r1lvN16jbOWz0hop6/wjWKYlsSn4xSZJ0D8QsrZxq9vusrtBFl0AYYRU0xeDTexGk5+yyRFWDIdFXWc/pKf47tKvDOtXI3K4nYygSPR8pC0hkNbhLQbvFuyf+BwzzuQfRt57FDrSGroaU+hI1FFa24Sg+iDkcM6M+iCvLYIoK2Q0BTYSGe33QA4Pou+15DRlEYxdII3mh0EagaVlSx8kUp2N+yLE0ABsE6i1fQfxV60e3RT2CKCUHISr7G8XkkeOpCKGrMzcuiY/H+C99jHOIsbJPVK0HW+3geX9XIqaHevsXj7Me5rHODMY5OvgJy6Njw9dvjy4ftyosHq6PF/jXS7+a56kl3alHIL7V96C+5doAxned/G8C+//ooK/xkB+Kyj+gig1H+U2/067yNQqDrULZ3EyLrTYwPWDsSRTWtxL0Rjoz/w5DKVWTNlaHaq+VAH5jJUlsb7J5/Tw/qb1yCpqjpDUXzdesOhnUhHTNbKXeiUVWHoGWXoGWCKr6N7W8fWD+jr9FnXxVnJ4cNzgEwZzkfqnNibfhv7JZyq9Z7FiQhpN0beGpYoUEWpfGiOhNQn8eKCVfKivpM7vBICpoB4jV2nyY8NXtC6pL8yOldIf/VxicWjmVDkBqvbfBBiZKSHsghu8sVmGBAIL7zhzZWg1yc3QBBi7YZx3y8I2QkgJ48OfeYZmue9I4jorraKih7bR3huxvn+g1DXkd/voL0icWcIkKWK+ARN9GibWdKV9QKrp2wlAXCzRDAluieyCiw5Vgi25SvtO/bv3SgX4wAEKlcM09X7HaNox3aQNO1Hpo70V3VxFxiyy5WWsiwdJ2QUB0bTM3EUa4tTpSLFofO1bsZ3Pffu5HdJbtghW+RPmF82c28PBkMB1hBwz2Xfs2UNr5SwLD1/lcbKs0zOj0nWpt+Z20rKKefMTekP8s0B3Xbl/b11rCPYMWFnT8QbsNfljRrWnan8L+/9uLji1nXb62rs4lTulWVs+sqjmUydv9p/ahm22qpmftJitbsg2+clmzu4GtGW21vTRwh52zk5amq0cbRj8vtliL83rel/LGAQhyijAVDR/caZHEq1HT4sd5rXmiPRTMYYjpTsB570CzruHSTHYIqAqF1Vzhia5nky+Q0EA0dEMeE7OYPeA1qHQt2+lh83uGjP8IX1dg36gvgOvHUy/iySWLJ0mwjqUnpwWpexyzm7nlmclMY2Jq7ROvzy9dAl7csXKUQ9xVnrLrvUvstlZu4Ozs8223MCvyp1mU6TJ8wjysRt0finVeT9T7qhD1I//5j7P3bRcINJmU7Gui4Yp2cH2WrnYLqr+jLYQ5CJl8raFtIstYtRRUC4LbdQX1nSzoTFQJ2hEBAPA1ja3lV71VJvc5pQHEUAeS5dM65fXGdaTyf4KhNHM2jkOLrZF/dcqDXD6B57RlStW/p5Xv4GdcFTPWY9llekCE2P+CXvItIbGohpov+hUWxWNs2HFkKjxlCYZanpDO3WCqmlrl9rQpbbyWnPDR5zawGttDR/BMGlraHbLk4302kSv8+jVjle1jZ8MtrXCMkSvYbzm4StVPVYbc1glmQfZTi4P93ErlFODOWaosbFpXijcZrMHa7rB7cZmg83e3Bq8o9tbEwIg9Y6c1sCVWxJQKQdYX4RtA9H39hh5BcfGU2wX6GWDNb4/GRl57NGvrM0MbtiyenQw25MOjjz+6FfXpEZHJ9auzik97Lq/z3Y1BVtYvtlq4+Y1+NyckHwjm4Qtk9NunWe32bwurq2uv4z5DI1k//98bz/Lge58lv65Oh95R/8c/J5t12f9vYYNNAV5ca5+PPY19iWI8yF8s0BLtc2Vd93Oapehz2jI89V2GbpLpZWq41JqXmcf2fuC8SI7dLn8CttkJzufP0jfXkdaAcfp59FTzEGD1movVl+7f1Kno/uzdjqaV1bfo0fLlOC7XvY1S5jSkGOWGVSoglIWRiKDYbxHQZGoXZlSalASB9Z1wkQuKAZhfZ8unNgn3Ryro1eMg+RE9s/+veKU5hLxXfmjgu7JgKzVhFLuckhX+Cv1NRjNYuXehr5PF3zsk24ibD0kResYYv9s1lHB5txHJc11fIwJe0lsW2hfKf5/hZFSN0logaJgS4nm6chkarpMF85ijwf2AsYqQMulhYTBbHrORpPYp6zrGk/Y94Boyqv+KHD6nli9J9Y2okh3mRtYC/9TBvYomrBHkcGUg14IW7oQ1Ux5MnnxZXtp0CyU/LRTcOKXP+6H7/xffa44cwAAeNqllM1uEzEQx2fT9CPqx4GeQEj4gCoQrZNWVFWTXlpVQa0i9SNVL5ycrJPdZrMb2U7yALwA4sKJA0/BBY7cOPAsSHDmb6/bNKjqgWa19s/jmfHMeDZE9DS4pIDy3yq98BzQHB17LtA8Cc8z9Jg+eS5C57vnWdoJ9jzP0UrwwfM8vQx+e16g1cIbzyXwO8+L9KjwzfMS+I/nZXpffOV5hZ4Uf+H0oFjCas1FYjmAxZ7nArTOPM/QFsWei9D54nmWUvrheQ65G8/zdB589rxAa4Vnnkvgt54X6Xnho+cl8E/PywGbKXleodfFr3RJkhQZRNBG5RJibjROmoItaaJLqUzcFgkTiZEqFUZCeEBD6HShIbEYpl2J+RyLLjYSGCssZXeYCMAmcaq4p0YhXWGPgW672PjXdpNXKpVaeKVYLfe+cePtzqPzXDRyybDJpo48peaNpEYRNAwytnqjGzmnHdxFjfo4vgdfVqcDaQKPLexw2nbvrvNpa6LjLGV5mKdNC7UoM+0sHVnmO1u1vujJzHR4Ere2+Dbf3q1U6P6k78uUIRDtroghNIU5hLTvDHuQZQiX0QXSs7p1l54BWR8KMoGZXx/BYs0EM0qEsi9Uj2UddhFJVs9Sww6GSoohVA9hM8KpIbwcO3+2JSKMtsDnkGjbHodiFIfsOENjRCJl55nWD7ONoGloQFUq4xm7h/u+4e7i+lAyZlAtl8fjMUeT8HbWf4ChrVpe3Undmq6iBi6Eq991/RP3uUhoaYw2P3tHoWs/5nKUzvqIGphPEI50OU88N6Y8rENyV/Pal92KbPrcSTeM8MaugVoY7c4YaxtH3it12sffDXP1r2KeLpKGTwX9AWQaJ2rniyMOhb4rI/464qWLCA3juqOZdcxYKNdBSdyWqZYhG6ahVMygg5pHDXYykGmu3MgV1tnkc9nkzDnztq4RRyJORCuRbBybCH1Z3z9jwlSZvyrdVvHAaK7jhGeqWz6pN+j/0rjH4V9fXDYhAAAAeNp9zEdOw2AUReHzUuzE6ZXee//txCm0YIKyDCAISCIhhEAZsCZm1O0h5DfmTj7pDg4R/t8NSESiRIkRx8ImQRKHFGkyZMmRp0CREmUqVJlgkimmmWGWOeZZYJEllllhlTXW2WCTLbbZYZc99jnA4OJRo45PgyYt2hxyxDEnnNLhjIBzulxyxTV9iUlcLLElIUlxJCVpyUhWcpKXghSlxDsffPPDJ1+8SVkqUrUGD69PQzfEs8ePI2MCo1786RljVFf11JpaV321oTbVltpWg1BXu67r3I8G4+e72/7LMLy8Xqgf6ve6v1wlP+4AAQAB//8AD3jaY2BkYGDgAWIxIGZiYATCRCBmAfMYAAfJAJB42n2NvQrCQBCEv7tICotDNEgQi7yBjS8gylWKIHkANZZHAuL7x8nlgp0s+zczO4sB5nju2JM/17jw+LRsmAmn7zGKBfZ4qCvK2/VSaZvwoVvJDDZ0TcB171dLERFiFUOui1ybFbNPk+dJFhXyZq1/o3oXL8fpxxeUyXPKTHWpdOnP4GlYsf3PfQGAahI0AAB42s1aO2wbRxAdkZatMJIo0bQlW7Kpnx1KkBM4TpEigRPEMFzkAxgqglguUgQIYMMAgyAIECCdazepWAYug0NK9qxZb83+ilRXcvN2bsnbO96X3jV8izvud3Z2dv4SLRFRg76gH6j24OHXZ7T+/MdfX9AuXUA/SUk1/CzRBtW++vJsjzYef/cNvsZI7dlPv7yg9d+e4dvmniX+EsYvqnVca9NpWGv+vvEAoy1a4VmraqYUvKqD0W9Vf7Pb/JRO6EOM+FJg1MkjA1UcwR6j+NJ3AtsH3r4jvH1dAkd4O8M82sUJTdxR/J7sxyjv2+RwV1SeDFKpJPg7lD2uDdV3EdhJvJUO0GUoz2ewRXV62aZwDHY/yYNupMgBzKE7qTTpHdXt7FftLqtwI+R9OKVNmfuQffmy7I1NgogKU36c6pjZrowrbEgQtVVL3VSch7NtmKnH4xp9fkWZe9GYBmVvr8rthDQJYc/TRL7ktqaJeZ+qVUQTDU1Ed5qvJ02Pw+TdPDsP2CKDM8bzuCRprmcGcVzkI+P29F3OfofSy6BJENlwQ94Svg7z0riCPNjXmg3+titLscY61yuMYFfyHmVHeikykSEtk2ASFMn8vKTb1/zzkKcU0hwipta5WL71Sn8mNRbsZfH6kvqkiv527GW68raKrM27eooiPRmTzPY7FKe5hO078zZrKC2UJh2i1NGqc/uI2zfpPkpHxeboO8TvvxzNr9IBdRFVf0YP6Qzx/nP6E+2/6G/M2OEY/CpoUac11LfAiR28NdQC1Hz0b+F7HW+H56raBV4R9o/pgHtaWLWj1+zjXcYcf7ZWzbmP9XVqY17YKxj2gGu7DHsVeF8Gn1yhq7RN1+g67dAu7eNUtcs/q7Ns/tf6hz6hU/a8hBOf2DfusG8RrgcLNkrwiGUOtIlvJm8PXfC38qNxn30unmmNy3v5tm2J4W26i5I8+Rg79GxbNPkacEf5cBfPbbjis6x7t0f/MNKy4ZNpL8smZok8mRER2M9tCaaDsJNlfdveyyL0gKSN0rzlLE+aCzRRkY4GVBHFYYl7U1HiOH6TrE9ew+pR6Jkv7p2lx6tVtKF9uHLAenyYBzcjZhFykGGLE1mqGDXHKfcm1F1Xo2+GjIjq1ob5IRtfP641NJ8NplopB5seLOMosZMfSXNijDOlk9FkVOTHyHvyXP4RZSHU7Cks2UA5jnnNnspATF5NXjGVz+3FE/Nnz49Zi7gxGcUbNB9n5EKHRj4lMHNn4DKRKseeomw+n837eXF+SBspb52AwSNg10uVNy/iqmScxhzjFd1dGSxMbtfyPXbzl7uCHMYoO8+Xxo9VaL2gDxZk5LGq64dZLqdwzxHHRf2cPG6SGyMdMs6L7kN7mE2fOUsRyc4oL+uU5u9oiCIlR1uYr2Y96SUk259FGb2MNT3Wez1T98e5OMy7vonNSIcdxlOF/C2KOdSWN/cm8VVV+5rid4kCe+WX0xRxblVcqPRk+XgobR+TX5nP+ul8VpEGIkOf+TYydkYmOnCTxXQSHS9RnZ7QOmp3Z3139cgdOqYTvGtoLdMmNbl/ld4P/3eFnzv6N8wn7XJGaQvtbTrgvJJ6dukG3pvUoT30HtIR3aLb1OU8W9XnhP9v5SN+Q9xvoHeTx9Zon2uH2H2dLgGnS9iP6AO8Xeyqnts4zy0NS51aYahOs6L7Vjh/ujzbb0W/W9jtPWrg7BeB9RX0XKuMe5hR3OC3BjrWURRllzXsGk7QAjZt0LAB+Dto75H6b6AjnHqTTnHmbfqYPgc1VQayS9/TUzr+H7peH0IAAAAAAQAAAADV7UW4AAAAANLWvmEAAAAA2AKNFg==') format('woff'); +} diff --git a/public/the-cube-master/src/scss/mixins/_inset.sass b/public/the-cube-master/src/scss/mixins/_inset.sass new file mode 100644 index 0000000..d36f645 --- /dev/null +++ b/public/the-cube-master/src/scss/mixins/_inset.sass @@ -0,0 +1,6 @@ +=inset($position: absolute) + position: $position + top: 0 + left: 0 + right: 0 + bottom: 0 diff --git a/public/the-cube-master/src/scss/styles.sass b/public/the-cube-master/src/scss/styles.sass new file mode 100644 index 0000000..35719dc --- /dev/null +++ b/public/the-cube-master/src/scss/styles.sass @@ -0,0 +1,13 @@ +@import "fonts/bungee" + +@import "variables/easings" + +@import "mixins/inset" + +@import "components/document" +@import "components/icon" +@import "components/range" +@import "components/stats" +@import "components/text" +@import "components/btn" +@import "components/ui" diff --git a/public/the-cube-master/src/scss/variables/_easings.sass b/public/the-cube-master/src/scss/variables/_easings.sass new file mode 100644 index 0000000..fd84dd2 --- /dev/null +++ b/public/the-cube-master/src/scss/variables/_easings.sass @@ -0,0 +1,31 @@ +$easeInSine: cubic-bezier(0.47, 0, 0.745, 0.715) +$easeOutSine: cubic-bezier(0.39, 0.575, 0.565, 1) +$easeInOutSine: cubic-bezier(0.39, 0.575, 0.565, 1) + +$easeInQuad: cubic-bezier(0.55, 0.085, 0.68, 0.53) +$easeOutQuad: cubic-bezier(0.25, 0.46, 0.45, 0.94) +$easeInOutQuad: cubic-bezier(0.25, 0.46, 0.45, 0.94) + +$easeInCubic: cubic-bezier(0.55, 0.055, 0.675, 0.19) +$easeOutCubic: cubic-bezier(0.215, 0.61, 0.355, 1) +$easeInOutCubic: cubic-bezier(0.215, 0.61, 0.355, 1) + +$easeInQuart: cubic-bezier(0.895, 0.03, 0.685, 0.22) +$easeOutQuart: cubic-bezier(0.165, 0.84, 0.44, 1) +$easeInOutQuart: cubic-bezier(0.165, 0.84, 0.44, 1) + +$easeInQuint: cubic-bezier(0.755, 0.05, 0.855, 0.06) +$easeOutQuint: cubic-bezier(0.23, 1, 0.32, 1) +$easeInOutQuint: cubic-bezier(0.23, 1, 0.32, 1) + +$easeInExpo: cubic-bezier(0.95, 0.05, 0.795, 0.035) +$easeOutExpo: cubic-bezier(0.19, 1, 0.22, 1) +$easeInOutExpo: cubic-bezier(0.19, 1, 0.22, 1) + +$easeInCirc: cubic-bezier(0.6, 0.04, 0.98, 0.335) +$easeOutCirc: cubic-bezier(0.075, 0.82, 0.165, 1) +$easeInOutCirc: cubic-bezier(0.075, 0.82, 0.165, 1) + +$easeInBack: cubic-bezier(0.6, -0.28, 0.735, 0.045) +$easeOutBack: cubic-bezier(0.175, 0.885, 0.32, 1.275) +$easeInOutBack: cubic-bezier(0.68, -0.55, 0.265, 1.55) \ No newline at end of file diff --git a/public/the-cube-master/upup.min.js b/public/the-cube-master/upup.min.js new file mode 100755 index 0000000..65c99fe --- /dev/null +++ b/public/the-cube-master/upup.min.js @@ -0,0 +1,7 @@ +//! UpUp +//! version : 1.0.0 +//! author : Tal Ater @TalAter +//! license : MIT +//! https://github.com/TalAter/UpUp +(function(e){"use strict";var t=navigator.serviceWorker;if(!t)return this.UpUp=null,e;var n={"service-worker-url":"upup.sw.min.js"},r=!1,s="font-weight: bold; color: #00f;";this.UpUp={start:function(e){this.addSettings(e),t.register(n["service-worker-url"],{scope:"./"}).then(function(e){r&&console.log("Service worker registration successful with scope: %c"+e.scope,s);(e.installing||t.controller||e.active).postMessage({action:"set-settings",settings:n})}).catch(function(e){r&&console.log("Service worker registration failed: %c"+e,s)})},addSettings:function(t){"string"==typeof(t=t||{})&&(t={content:t}),["content","content-url","assets","service-worker-url","cache-version"].forEach(function(r){t[r]!==e&&(n[r]=t[r])})},debug:function(e){r=!(arguments.length>0)||!!e}}}).call(this); +//# sourceMappingURL=upup.min.js.map \ No newline at end of file diff --git a/public/the-cube-master/upup.sw.min.js b/public/the-cube-master/upup.sw.min.js new file mode 100755 index 0000000..93ece9e --- /dev/null +++ b/public/the-cube-master/upup.sw.min.js @@ -0,0 +1,7 @@ +//! UpUp Service Worker +//! version : 1.0.0 +//! author : Tal Ater @TalAter +//! license : MIT +//! https://github.com/TalAter/UpUp +var _CACHE_NAME_PREFIX="upup-cache",_calculateHash=function(e){var t,n=0,s=(e=e.toString()).length;if(0===s)return n;for(t=0;t { + +
{ + const currentPath = window.location.pathname + const basePath = currentPath.split('/game')[0] + router.push(`${basePath}/game/the-cube`) + }} + > +
+ The Cube + +
+ The Cube +
+
+ +
+
اجرا کنید
+ +
+ +
) diff --git a/src/app/[name]/(Dialogs)/game/the-cube/page.tsx b/src/app/[name]/(Dialogs)/game/the-cube/page.tsx new file mode 100644 index 0000000..7f51425 --- /dev/null +++ b/src/app/[name]/(Dialogs)/game/the-cube/page.tsx @@ -0,0 +1,29 @@ +'use client' +import { type FC } from 'react' +import { useRouter } from 'next/navigation' +import { CloseCircle } from 'iconsax-react' + +const TheCubePage: FC = () => { + const router = useRouter() + + return ( +
+ +