Merge pull request #196 from supermedium/leaderboard

leaderboard
This commit is contained in:
Kevin Ngo
2018-11-20 03:57:11 -08:00
committed by GitHub
11 changed files with 1025 additions and 33 deletions

744
package-lock.json generated
View File

@@ -3,6 +3,170 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@firebase/app": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.3.4.tgz",
"integrity": "sha512-Q6sNpWZ3x+FeuBkLCCRrsOraGJOKVLUCc9Amj8zu2vAC1v2uWifRR6kZ60TrpaIxtY4N6pcPTaG0YIUT5lgeSA==",
"requires": {
"@firebase/app-types": "0.3.2",
"@firebase/util": "0.2.2",
"dom-storage": "2.1.0",
"tslib": "1.9.0",
"xmlhttprequest": "1.8.0"
}
},
"@firebase/app-types": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.3.2.tgz",
"integrity": "sha512-ZD8lTgW07NGgo75bTyBJA8Lt9+NweNzot7lrsBtIvfciwUzaFJLsv2EShqjBeuhF7RpG6YFucJ6m67w5buCtzw=="
},
"@firebase/auth": {
"version": "0.7.9",
"resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.7.9.tgz",
"integrity": "sha512-m8e2KZ/WvToTMovoBI5K3N0Ku8Aqt6083oqzQODUYHjf94KsAfGdoQEaJono7T7vK4o7E5xpqFgFldOM5LdgiQ==",
"requires": {
"@firebase/auth-types": "0.3.4"
}
},
"@firebase/auth-types": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.3.4.tgz",
"integrity": "sha512-0r3gSQk9jw5orFHCTUIgao0zan6dHt2J0BO3t/uEzbod+uwqvUn/gh+yg+kK6HX92Fg8E7y030KX4Bw/aXt0Ew=="
},
"@firebase/database": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.3.6.tgz",
"integrity": "sha512-r02JOqTLcd2/qn7QkkJvIAxMiMxmeyd5B76kl9hHAs+3cil5mUzHnI3svtb4h0VIJYDHFKJMlVl/bE3GfcTR3A==",
"requires": {
"@firebase/database-types": "0.3.2",
"@firebase/logger": "0.1.1",
"@firebase/util": "0.2.2",
"faye-websocket": "0.11.1",
"tslib": "1.9.0"
},
"dependencies": {
"faye-websocket": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
"integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
"requires": {
"websocket-driver": ">=0.5.1"
}
}
}
},
"@firebase/database-types": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.3.2.tgz",
"integrity": "sha512-9ZYdvYQ6r3aaHJarhUM5Hf6lQWu3ZJme+RR0o8qfBb9L04TL3uNjt+AJFku1ysVPntTn+9GqJjiIB2/OC3JtwA=="
},
"@firebase/firestore": {
"version": "0.8.7",
"resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.8.7.tgz",
"integrity": "sha512-FdC8YKryht2Rp2CHguendS8VelP83MDY5p7EKBTlxPPZV7yb5Vt+cmLR6AG7TR+FsBzvdOUpbOEnAErUVgZAFQ==",
"requires": {
"@firebase/firestore-types": "0.7.0",
"@firebase/logger": "0.1.1",
"@firebase/webchannel-wrapper": "0.2.11",
"grpc": "1.16.0",
"tslib": "1.9.0"
}
},
"@firebase/firestore-types": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-0.7.0.tgz",
"integrity": "sha512-jyKRcKnSh3CSEPL4xGOZNoOXEiv7YmFK/JEcdd/4cAH17/Xo+Pk67gk1E648LRKh6QPghgNvzNTY5R10mKbQNw=="
},
"@firebase/functions": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.3.2.tgz",
"integrity": "sha512-jZdNzNrJplswIJXcdpXZr6vEbDrDKU4P0+nHv/D85LHeHnPkkdNO+Yh3tikbVEJpYCG8EVOhIEfAIEuFo37i4A==",
"requires": {
"@firebase/functions-types": "0.2.1",
"@firebase/messaging-types": "0.2.3",
"isomorphic-fetch": "2.2.1",
"tslib": "1.9.0"
}
},
"@firebase/functions-types": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.2.1.tgz",
"integrity": "sha512-hH78lgDoa5E1peBSXnfQyshENmh/5a8aia+S4Ocjc53OUWRJ4VqYwWUV5gE4b2mqVKTpN4akJccLq2pCnNGZcA=="
},
"@firebase/logger": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.1.tgz",
"integrity": "sha512-5jn3HHbEfdOwychyIEIkP1cik+MW/vvoOavTOzwDkH+fv6Bx+HBUOzh09M7sCYzXFtKzjbUax9+g39mJNBLklQ=="
},
"@firebase/messaging": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.3.6.tgz",
"integrity": "sha512-Sz/fWOXMa3HxDZxE64Fm335kwP9um1rmun5PIka7od7I4hZ8US+SjYVyUe6jWTh1V/YjcqDi6Xkhoj2nF8yu9g==",
"requires": {
"@firebase/messaging-types": "0.2.3",
"@firebase/util": "0.2.2",
"tslib": "1.9.0"
}
},
"@firebase/messaging-types": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.2.3.tgz",
"integrity": "sha512-avwCgZzcx2uxIW/wT3p3G/EyHftIrvMyiTS7AA7dxDlzfx+8dpAeTsb1+jsHJT4F6foSh5HG17Nw8sDzYuxH1Q=="
},
"@firebase/polyfill": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.3.tgz",
"integrity": "sha512-xs8IZf1WEbufYXyfV8YjmiFZOaujRRq0T03NteihYfuGVTTym7z5SmvLvEHLEUjf2fgeobPEzZ2JgrCQHS+QHw==",
"requires": {
"core-js": "2.5.5",
"promise-polyfill": "7.1.2",
"whatwg-fetch": "2.0.4"
},
"dependencies": {
"core-js": {
"version": "2.5.5",
"resolved": "http://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
"integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs="
},
"promise-polyfill": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-7.1.2.tgz",
"integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ=="
},
"whatwg-fetch": {
"version": "2.0.4",
"resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
"integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
}
}
},
"@firebase/storage": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.2.4.tgz",
"integrity": "sha512-uqA6CoZYkugk69ImqB16VBPP7JRPRfZwcUP9CsE0GPVGQkZQQfBGwzIyEoFA8lUfVLrvxQiL0sQvHUXZ945LMg==",
"requires": {
"@firebase/storage-types": "0.2.3",
"tslib": "1.9.0"
}
},
"@firebase/storage-types": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.2.3.tgz",
"integrity": "sha512-RaZeam2LgsB7xwAtOQr4G0Geoyf7D5TnLF3a12By6Rh0Z9PqBSlWn0SVYGW3SkmxIdqvWZMZvCyamUlqQvQzWw=="
},
"@firebase/util": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.2.tgz",
"integrity": "sha512-vfRjmCWuxtJx3txHocaNlDwCDwwv6KLL5YtlSNi73wBdvF3UfnpLGrth7G3X6gn5rDhOKamRg2+9L8cfsjSS1A==",
"requires": {
"tslib": "1.9.0"
}
},
"@firebase/webchannel-wrapper": {
"version": "0.2.11",
"resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.11.tgz",
"integrity": "sha512-WyMXDxk/WZ+f2lOCeEvDWUce2f5Kk2sNfvArK8f+PlUnzFdy/MBzLXrmbMgyZXP7GP4ooUxYV8Sdmoh1hGk1Uw=="
},
"@tweenjs/tween.js": {
"version": "16.11.0",
"resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-16.11.0.tgz",
@@ -208,6 +372,7 @@
"sinon": "^1.17.5",
"sinon-chai": "^2.8.0",
"snazzy": "^4.0.0",
"uglify-js": "git://github.com/mishoo/UglifyJS2.git#278577f3cb75e72320564805ee91be63e5f9c806",
"uglifyjs-webpack-plugin": "^0.4.6",
"webpack": "^3.5.5",
"webpack-cli": "^3.1.2",
@@ -1037,7 +1202,7 @@
},
"uglify-js": {
"version": "git://github.com/mishoo/UglifyJS2.git#278577f3cb75e72320564805ee91be63e5f9c806",
"from": "git://github.com/mishoo/UglifyJS2.git#278577f3cb75e72320564805ee91be63e5f9c806",
"from": "git://github.com/mishoo/UglifyJS2.git#harmony-v2.8.22",
"requires": {
"source-map": "~0.5.1",
"uglify-to-browserify": "~1.0.0",
@@ -1373,9 +1538,9 @@
"integrity": "sha1-+w+EQdrdHosRzCRRK6eqaS1iK+E="
},
"aframe-state-component": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/aframe-state-component/-/aframe-state-component-6.3.1.tgz",
"integrity": "sha512-L+64JKz9mQW6f6ZY10OyJwyT2QHx5u9sh4xlNS1eKJD8j/BgYYvKie4rlypHxZwzp+5n9Ajy5a6LsnMynuhlOA=="
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/aframe-state-component/-/aframe-state-component-6.4.2.tgz",
"integrity": "sha512-bs57YrfenT1sCvpyoRgpV/N4Uge0odL3MDJbakZS2V31tw9T/NP2igBicR9s4tL8gvEHfJCQSrSKUWnTKl5wPw=="
},
"aframe-thumb-controls-component": {
"version": "1.1.0",
@@ -1627,6 +1792,15 @@
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"ascli": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
"integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
"requires": {
"colour": "~0.7.1",
"optjs": "~3.2.2"
}
},
"asn1.js": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
@@ -3461,6 +3635,14 @@
"resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
"integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
},
"bytebuffer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
"integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
"requires": {
"long": "~3"
}
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -3801,6 +3983,11 @@
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
},
"colour": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
"integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
},
"combine-source-map": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
@@ -4759,6 +4946,11 @@
"version": "github:dmarcos/document-register-element#8ccc532b7f3744be954574caf3072a5fd260ca90",
"from": "github:dmarcos/document-register-element#8ccc532b7"
},
"dom-storage": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
"integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
},
"dom-walk": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
@@ -4872,6 +5064,14 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"encoding": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"requires": {
"iconv-lite": "~0.4.13"
}
},
"enhanced-resolve": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
@@ -5674,6 +5874,21 @@
"resolve-dir": "^0.1.0"
}
},
"firebase": {
"version": "5.5.8",
"resolved": "https://registry.npmjs.org/firebase/-/firebase-5.5.8.tgz",
"integrity": "sha512-aT75TO8JLX2bTsPLq/2FrX87sgsvSF7mFDJBKl+hC5yJeaT3fuqrn806lQ56TRGWXFi5oYENYn00hmy/4PR0AQ==",
"requires": {
"@firebase/app": "0.3.4",
"@firebase/auth": "0.7.9",
"@firebase/database": "0.3.6",
"@firebase/firestore": "0.8.7",
"@firebase/functions": "0.3.2",
"@firebase/messaging": "0.3.6",
"@firebase/polyfill": "0.3.3",
"@firebase/storage": "0.2.4"
}
},
"flat-cache": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
@@ -5889,13 +6104,11 @@
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"optional": true
"bundled": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5908,18 +6121,15 @@
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
@@ -6022,8 +6232,7 @@
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"optional": true
"bundled": true
},
"ini": {
"version": "1.3.5",
@@ -6033,7 +6242,6 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -6046,20 +6254,17 @@
"minimatch": {
"version": "3.0.4",
"bundled": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"optional": true
"bundled": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
@@ -6076,7 +6281,6 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -6149,8 +6353,7 @@
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"object-assign": {
"version": "4.1.1",
@@ -6160,7 +6363,6 @@
"once": {
"version": "1.4.0",
"bundled": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@@ -6266,7 +6468,6 @@
"string-width": {
"version": "1.0.2",
"bundled": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -6619,6 +6820,427 @@
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
},
"grpc": {
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/grpc/-/grpc-1.16.0.tgz",
"integrity": "sha512-+p8YRIng7Gihkn2jycAXwXdA9aQ10SikRrcHY+/r3W1Z1Pr9NFIbLcmBZPoaTbzzLDv/ysqwqFEZriAdd8tveQ==",
"requires": {
"lodash": "^4.17.5",
"nan": "^2.0.0",
"node-pre-gyp": "^0.10.0",
"protobufjs": "^5.0.3"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"bundled": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true
},
"aproba": {
"version": "1.2.0",
"bundled": true
},
"are-we-there-yet": {
"version": "1.1.5",
"bundled": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.0.1",
"bundled": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true
},
"debug": {
"version": "2.6.9",
"bundled": true,
"requires": {
"ms": "2.0.0"
}
},
"deep-extend": {
"version": "0.6.0",
"bundled": true
},
"delegates": {
"version": "1.0.0",
"bundled": true
},
"detect-libc": {
"version": "1.0.3",
"bundled": true
},
"fs-minipass": {
"version": "1.2.5",
"bundled": true,
"requires": {
"minipass": "^2.2.1"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.2",
"bundled": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true
},
"iconv-lite": {
"version": "0.4.23",
"bundled": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
"version": "3.0.1",
"bundled": true,
"requires": {
"minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true
},
"ini": {
"version": "1.3.5",
"bundled": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.0",
"bundled": true
},
"minipass": {
"version": "2.3.3",
"bundled": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.1.0",
"bundled": true,
"requires": {
"minipass": "^2.2.1"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"requires": {
"minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"bundled": true
}
}
},
"ms": {
"version": "2.0.0",
"bundled": true
},
"needle": {
"version": "2.2.2",
"bundled": true,
"requires": {
"debug": "^2.1.2",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
}
},
"node-pre-gyp": {
"version": "0.10.3",
"bundled": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
}
},
"nopt": {
"version": "4.0.1",
"bundled": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"npm-bundled": {
"version": "1.0.3",
"bundled": true
},
"npm-packlist": {
"version": "1.1.11",
"bundled": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true
},
"process-nextick-args": {
"version": "2.0.0",
"bundled": true
},
"rc": {
"version": "1.2.8",
"bundled": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rimraf": {
"version": "2.6.2",
"bundled": true,
"requires": {
"glob": "^7.0.5"
}
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true
},
"sax": {
"version": "1.2.4",
"bundled": true
},
"semver": {
"version": "5.5.0",
"bundled": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true
},
"tar": {
"version": "4.4.6",
"bundled": true,
"requires": {
"chownr": "^1.0.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.3.3",
"minizlib": "^1.1.0",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true
},
"wide-align": {
"version": "1.1.3",
"bundled": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true
},
"yallist": {
"version": "3.0.2",
"bundled": true
}
}
},
"handle-thing": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
@@ -7549,6 +8171,15 @@
}
}
},
"isomorphic-fetch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"requires": {
"node-fetch": "^1.0.1",
"whatwg-fetch": ">=0.10.0"
}
},
"js-base64": {
"version": "2.4.8",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz",
@@ -7870,6 +8501,11 @@
"resolved": "http://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz",
"integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE="
},
"long": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
"integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
},
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -8331,8 +8967,7 @@
"nan": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz",
"integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==",
"optional": true
"integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw=="
},
"nanomatch": {
"version": "1.2.13",
@@ -8431,6 +9066,15 @@
"lower-case": "^1.1.1"
}
},
"node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
"encoding": "^0.1.11",
"is-stream": "^1.0.1"
}
},
"node-forge": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
@@ -8764,6 +9408,11 @@
}
}
},
"optjs": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
"integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
},
"original": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz",
@@ -10948,6 +11597,32 @@
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
},
"protobufjs": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
"integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
"requires": {
"ascli": "~1",
"bytebuffer": "~5",
"glob": "^7.0.5",
"yargs": "^3.10.0"
},
"dependencies": {
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
}
}
},
"protochain": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz",
@@ -13729,6 +14404,11 @@
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
},
"tslib": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
"integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
},
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
@@ -15241,6 +15921,11 @@
"resolved": "https://registry.npmjs.org/webvr-polyfill-dpdb/-/webvr-polyfill-dpdb-1.0.9.tgz",
"integrity": "sha512-4Vc4SVqztKZHjRDyivtAnQMpGKbzhC6pgYt6qN4JYWjvK4p47xGu4y/8oogP2Qri1SamLyGeLd6szLu2Dt4SWg=="
},
"whatwg-fetch": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
"integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
},
"whet.extend": {
"version": "0.9.9",
"resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
@@ -15350,6 +16035,11 @@
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
},
"xmlhttprequest": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
"integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
},
"xregexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",

View File

@@ -20,7 +20,7 @@
"aframe-proxy-event-component": "^2.1.0",
"aframe-ring-shader": "^1.1.0",
"aframe-slice9-component": "^1.0.0",
"aframe-state-component": "^6.2.0",
"aframe-state-component": "^6.4.2",
"aframe-thumb-controls-component": "^1.1.0",
"algoliasearch": "^3.29.0",
"ansi-html": "0.0.7",
@@ -34,6 +34,7 @@
"body-parser": "1.18.2",
"classnames": "^2.2.5",
"css-loader": "^0.28.7",
"firebase": "^5.5.8",
"html-entities": "^1.2.1",
"html-minifier": "^3.5.11",
"ip": "1.1.5",

View File

@@ -1,8 +1,12 @@
AFRAME.registerComponent('keyboard-raycastable', {
dependencies: ['super-keyboard'],
schema: {
condition: {default: ''}
},
play: function () {
this.el.components['super-keyboard'].kbImg.setAttribute('bind-toggle__raycastable',
'isSearching');
this.data.condition);
}
});

View File

@@ -0,0 +1,143 @@
const firebase = require('firebase/app');
require('firebase/firestore');
const NUM_SCORES_DISPLAYED = 10;
/**
* High score with Firebase cloud store.
* Index: challengeId ASC difficulty ASC score DESC time ASC
*/
AFRAME.registerComponent('leaderboard', {
schema: {
apiKey: {type: 'string'},
authDomain: {type: 'string'},
databaseURL: {type: 'string'},
projectId: {type: 'string'},
storageBucket: {type: 'string'},
messagingSenderId: {type: 'string'},
challengeId: {default: ''},
menuSelectedChallengeId: {default: ''},
isVictory: {default: false}
},
init: function () {
this.qualifyingIndex = undefined;
this.scores = [];
this.eventDetail = {scores: this.scores};
this.addEventDetail = {scoreData: undefined, index: undefined};
this.username = localStorage.getItem('supersaberusername') || 'Super Zealot';
this.el.addEventListener('leaderboardusername', evt => {
this.username = evt.detail.value;
localStorage.setItem('supersaberusername', this.username);
});
this.el.addEventListener('leaderboardsubmit', this.addScore.bind(this));
},
update: function (oldData) {
// Initialize Cloud Firestore through Firebase.
if (!firebase.apps.length && this.data.apiKey) {
firebase.initializeApp({
apiKey: this.data.apiKey,
authDomain: this.data.authDomain,
databaseURL: this.data.databaseURL,
projectId: this.data.projectId,
storageBucket: this.data.storageBucket,
messagingSenderId: this.data.messagingSenderId
});
this.firestore = firebase.firestore();
this.firestore.settings({timestampsInSnapshots: true});
this.db = this.firestore.collection('scores');
}
if (!oldData.isVictory && this.data.isVictory) {
this.checkLeaderboardQualify();
}
if (this.data.menuSelectedChallengeId &&
oldData.menuSelectedChallengeId !== this.data.menuSelectedChallengeId) {
this.fetchScores(this.data.menuSelectedChallengeId);
}
if (this.data.challengeId && oldData.challengeId !== this.data.challengeId) {
this.fetchScores(this.data.challengeId);
}
},
addScore: function () {
const state = this.el.sceneEl.systems.state.state;
if (!state.isVictory) { return; }
const scoreData = {
challengeId: state.challenge.id,
score: state.score.score,
username: this.username,
difficulty: state.challenge.difficulty,
time: new Date()
};
this.db.add(scoreData);
this.addEventDetail.scoreData = scoreData;
this.el.emit('leaderboardscoreadded', this.addEventDetail, false);
},
fetchScores: function (challengeId) {
const state = this.el.sceneEl.systems.state.state;
const query = this.db
.where('challengeId', '==', challengeId)
.where(
'difficulty', '==',
state.menuSelectedChallenge.id
? state.menuSelectedChallenge.difficulty
: state.challenge.difficulty)
.orderBy('score', 'desc')
.orderBy('time', 'asc')
.limit(10);
query.get().then(snapshot => {
this.eventDetail.challengeId = challengeId;
this.scores.length = 0;
if (!snapshot.empty) {
snapshot.forEach(score => this.scores.push(score.data()));
}
this.el.sceneEl.emit('leaderboard', this.eventDetail, false);
}).catch(e => {
console.error('[firestore]', e);
});
},
/**
* Is high score?
*/
checkLeaderboardQualify: function () {
const state = this.el.sceneEl.systems.state.state;
const score = state.score.score;
// If less than 10, then automatic high score.
if (this.scores.length < NUM_SCORES_DISPLAYED) {
this.qualifyingIndex = this.scores.length;
this.el.sceneEl.emit('leaderboardqualify', this.scores.length, false);
return;
}
// Check if overtook any existing high score.
for (let i = 0; i < this.scores.length; i++) {
if (score > this.scores[i].score) {
this.qualifyingIndex = i;
this.el.sceneEl.emit('leaderboardqualify', i, false);
return;
}
}
}
});
AFRAME.registerComponent('leaderboard-title', {
schema: {
leaderboardQualified: {default: false}
},
update: function () {
const value = this.data.leaderboardQualified
? 'NEW HIGH SCORE!'
: 'LEADERBOARD';
this.el.setAttribute('text', 'value', value);
}
});

View File

@@ -24,6 +24,7 @@ AFRAME.registerComponent('search', {
},
superkeyboardchange: bindEvent(function (evt) {
if (evt.target !== this.el) { return; }
this.search(evt.detail.value);
}),

View File

@@ -76,6 +76,8 @@ AFRAME.registerComponent('super-keyboard', {
font: this.data.font,
baseline: 'bottom',
lineHeight: 40,
shader: 'msdf',
negate: true,
value: this.data.label,
color: this.data.labelColor,
width: this.data.width,
@@ -161,7 +163,7 @@ AFRAME.registerComponent('super-keyboard', {
this.data.width !== oldData.width) {
this.label.setAttribute('text', {
value: this.data.label, color: this.data.labelColor, width: this.data.width});
this.label.object3D.position.set(0, 0.3 * w, -0.02);
this.label.object3D.position.set(0, 0.35 * w, -0.02);
}
if (this.data.width !== oldData.width ||

View File

@@ -0,0 +1,17 @@
/**
* Couple visibility and raycastability.
*/
AFRAME.registerComponent('visible-raycastable', {
schema: {
default: true
},
update: function () {
this.el.object3D.visible = this.data;
if (this.data) {
this.el.setAttribute('raycastable', '');
} else {
this.el.removeAttribute('raycastable', '');
}
}
});

View File

@@ -21,6 +21,7 @@
bind__beat-loader="challengeId: challenge.id; difficulty: menuSelectedChallenge.difficulty; isPlaying: isPlaying; menuSelectedChallengeId: menuSelectedChallenge.id"
bind__gameover="isGameOver: isGameOver"
bind__intro-song="isPlaying: menuActive && !menuSelectedChallenge.id; isSearching: isSearching"
bind__leaderboard="isVictory: isVictory; menuSelectedChallengeId: menuSelectedChallenge.id; challengeId: challenge.id"
bind__overlay="enabled: !isPlaying"
bind__song="challengeId: challenge.id; isPlaying: isPlaying; isBeatsPreloaded: challenge.isBeatsPreloaded; isGameOver: isGameOver; isVictory: isVictory"
bind__song-preview-system="challengeId: challenge.id; isSearching: isSearching; isSongLoading: isSongLoading; selectedChallengeId: menuSelectedChallenge.id"
@@ -33,6 +34,7 @@
debug-state
effect-bloom="strength: 1"
gpu-preloader
leaderboard="apiKey: AIzaSyBCnpzND3eN37CBSu1bSYfaKQoe6yD3SnY; authDomain: supersaberrr.firebaseapp.com; databaseURL: https://supersaberrr.firebaseio.com; projectId: supersaberrr; storageBucket: supersaberrr.appspot.com; messagingSenderId: 172125624222"
loading-screen="backgroundColor: #000;"
overlay="objects: .overlay"
pool__beat-arrow-blue="mixin: arrowBlueBeat; size: 10; container: #beatContainer"
@@ -74,6 +76,7 @@
{% include './templates/tutorial.html' %}
{% include './templates/gameMenu.html' %}
{% include './templates/victory.html' %}
{% include './templates/leaderboard.html' %}
<!-- Wrong + miss beat visual indicators. -->
<a-entity id="badContainer" bind__visible="isPlaying">

View File

@@ -2,6 +2,7 @@
var utils = require('../utils');
const challengeDataStore = {};
const NUM_LEADERBOARD_DISPLAY = 10;
const SEARCH_PER_PAGE = 6;
const SONG_NAME_TRUNCATE = 24;
const SONG_SUB_NAME_TRUNCATE = 32;
@@ -11,8 +12,8 @@ const DAMAGE_MAX = 10;
const DEBUG_CHALLENGE = {
author: 'Superman',
difficulty: 'Normal',
id: '517',
difficulty: 'Expert',
id: '31',
image: 'assets/img/molerat.jpg',
songName: 'Friday',
songLength: 100,
@@ -57,6 +58,11 @@ AFRAME.registerState({
isSongFetching: false, // Fetching stage.
isSongLoading: false, // Either fetching or decoding.
isVictory: false, // Victory screen.
leaderboard: [],
leaderboardFetched: false,
leaderboardQualified: false,
leaderboardNames: '',
leaderboardScores: '',
menuActive: true, // Main menu active.
menuDifficulties: [], // List of strings of available difficulties for selected.
menuSelectedChallenge: { // Currently selected challenge in the main menu.
@@ -207,6 +213,7 @@ AFRAME.registerState({
Object.assign(state.menuSelectedChallenge, DEBUG_CHALLENGE);
Object.assign(state.challenge, DEBUG_CHALLENGE);
state.isVictory = true;
state.leaderboardQualified = true;
state.menuActive = false;
state.score.accuracy = 74.99;
state.score.beatsHit = 125;
@@ -228,6 +235,7 @@ AFRAME.registerState({
state.isPaused = false;
state.isSongLoading = true;
state.isVictory = false;
state.leaderboardQualified = false;
},
gamemenuexit: (state) => {
@@ -238,6 +246,7 @@ AFRAME.registerState({
state.isVictory = false;
state.menuActive = true;
state.challenge.id = '';
state.leaderboardQualified = false;
},
genreclear: (state) => {
@@ -261,6 +270,44 @@ AFRAME.registerState({
state.menuSelectedChallenge.id = '';
},
/**
* High scores.
*/
leaderboard: (state, payload) => {
state.leaderboard.length = 0;
state.leaderboardFetched = true;
state.leaderboardNames = '';
state.leaderboardScores = '';
for (let i = 0; i < payload.scores.length; i++) {
let score = payload.scores[i];
state.leaderboard.push(score);
state.leaderboardNames += `${score.username}\n`;
state.leaderboardScores += `${score.score}\n`;
}
},
leaderboardqualify: state => {
state.leaderboardQualified = true;
},
/**
* Insert new score into leaderboard locally.
*/
leaderboardscoreadded: (state, payload) => {
state.leaderboard.splice(payload.index, 0, payload.scoreData);
state.leaderboardNames = '';
state.leaderboardScores = '';
for (let i = 0; i < NUM_LEADERBOARD_DISPLAY; i++) {
let score = state.leaderboard[i];
state.leaderboardNames += `${score.username}\n`;
state.leaderboardScores += `${score.score}\n`;
}
},
leaderboardsubmit: state => {
state.leaderboardQualified = false;
},
/**
* Song clicked from menu.
*/
@@ -284,14 +331,18 @@ AFRAME.registerState({
computeMenuSelectedChallengeIndex(state);
state.isSearching = false;
clearLeaderboard(state);
},
menuchallengeunselect: state => {
state.menuSelectedChallenge.id = '';
clearLeaderboard(state);
},
menudifficultyselect: (state, difficulty) => {
state.menuSelectedChallenge.difficulty = difficulty;
clearLeaderboard(state);
},
minehit: state => {
@@ -551,3 +602,11 @@ function computeBeatsText (state) {
state.score.beatsText =
`${state.score.beatsHit} / ${state.score.beatsMissed + state.score.beatsHit} BEATS`;
}
function clearLeaderboard (state) {
state.leaderboard.length = 0;
state.leaderboard.__dirty = true;
state.leaderboardNames = '';
state.leaderboardScores = '';
state.leaderboardFetched = false;
}

View File

@@ -0,0 +1,72 @@
<a-entity
id="leaderboard"
class="overlay accuracyTextCounterSubscribe"
position="2 1.1 -1.27"
rotation="0 -50 0"
bind__animation="enabled: isVictory"
bind__scale="isVictory && '0 0 0' || '1 1 1'"
bind__visible="(!!menuSelectedChallenge.id || !!challenge.id) && (menuActive || isPaused || isVictory) && !genreMenuOpen"
animation="property: scale; from: 0 0 0; to: 1 1 1; easing: easeOutBack; startEvents: textcounterdone">
<a-entity
mixin="slice"
id="leaderboardBackground"
slice9="left: 70; width: 1.3; height: 1.55; opacity: 0.9"></a-entity>
<a-entity
id="leaderboardChallengeImage"
bind__menu-selected-challenge-image="selectedChallengeId: menuSelectedChallenge.id"
bind__visible="!isVictory"
geometry="primitive: plane; height: 0.12; width: 0.12"
material="shader: flat"
position="-0.44 0.63 0.001"></a-entity>
<a-entity
id="leaderboardTitle"
mixin="font"
bind__leaderboard-title="leaderboardQualified: leaderboardQualified"
text="align: center; width: 2.5; value: LEADERBOARD"
position="0.04 0.540 0.001"></a-entity>
<a-entity
id="leaderboardNames"
mixin="font"
bind__text="value: leaderboardNames"
bind__visible="!leaderboardQualified && !leaderboardEmpty"
text="baseline: center; width: 0.9; anchor: left; color: #00acfc; wrapCount: 20; lineHeight: 53;"
position="-0.53 -0.16 0.001"></a-entity>
<a-entity
id="leaderboardScores"
mixin="font"
bind__text="value: leaderboardScores"
bind__visible="!leaderboardQualified && !leaderboardEmpty"
text="baseline: center; align: right; width: 0.9; anchor: right; color: #fff; wrapCount: 20; lineHeight: 53;"
position="0.53 -0.16 0.001"></a-entity>
<a-entity
id="leaderboardEmpty"
mixin="font"
bind__visible="leaderboard.length === 0"
text="align: center; color: #777; baseline: center; width: 1.6; value: No high scores. Be the first!"
position="0 0 0.001"></a-entity>
<a-entity
id="leaderboardKeyboard"
bind__super-keyboard="{% if not DEBUG_KEYBOARD %}hand: activeHand === 'left' && '#leftHand' || '#rightHand'; {% endif %}show: leaderboardQualified"
super-keyboard="label: Enter yourself to the leaderboard!; inputColor: #00acfc; labelColor: #575757; width: 1.1; hand: {{ DEBUG_KEYBOARD and '#mouseCursor' or '#rightHand' }}; imagePath: assets/img/keyboard/; font: assets/fonts/Teko-Bold.json; align: center; model: supersaber; keyColor: #fff; injectToRaycasterObjects: false; filters: allupper; keyHoverColor: #fff; maxLength: 15"
position="0 -0.1 0.02"
proxy-event__change="event: superkeyboardchange; to: a-scene; as: leaderboardusername"
keyboard-raycastable="condition: leaderboardQualified">
</a-entity>
<a-entity id="leaderboardSubmit"
position="0 -0.59 0.002"
mixin="bigMenuButton"
bind__visible-raycastable="leaderboardQualified"
slice9="width: 0.8; height: 0.16"
proxy-event="event: click; to: a-scene; as: leaderboardsubmit">
<a-entity mixin="font" text="align: center; color: #AAA; wrapCount: 26; value: SUBMIT HIGH SCORE" position="0 -0.055 0.01"></a-entity>
</a-entity>
</a-entity>

View File

@@ -303,7 +303,7 @@
bind__super-keyboard="{% if not DEBUG_KEYBOARD %}hand: activeHand === 'left' && '#leftHand' || '#rightHand'; {% endif %}show: isSearching"
super-keyboard="label: Search from over 6000 songs!; inputColor: #fff; labelColor: #FFF; width: 1.2; hand: {{ DEBUG_KEYBOARD and '#mouseCursor' or '#rightHand' }}; imagePath: assets/img/keyboard/; font: assets/fonts/Teko-Bold.json; align: center; model: supersaber; keyColor: #fff; injectToRaycasterObjects: false; filters: allupper; keyHoverColor: #fff"
position="0.6 1.1 -1.999"
keyboard-raycastable
keyboard-raycastable="condition: isSearching"
search
proxy-event__dismiss="event: superkeyboarddismiss; to: a-scene; as: keyboardclose"
proxy-event__accept="event: superkeyboardinput; to: a-scene; as: keyboardclose">