diff --git a/package-lock.json b/package-lock.json
index 94f363a..1947985 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"@nextui-org/react": "^1.0.0-beta.10",
"ioredis": "^5.2.3",
"next": "12",
- "next-seo": "^5.8.0",
+ "next-seo": "^5.6.0",
"next-themes": "^0.2.1",
"node-fetch": "^3.2.10",
"prop-types": "^15.8.1",
@@ -24,7 +24,7 @@
"devDependencies": {
"@types/node": "^18.11.3",
"@types/react": "^18.0.21",
- "eslint": "8.25.0",
+ "eslint": "8.26.0",
"eslint-config-next": "12.3.1",
"typescript": "^4.8.4"
}
@@ -197,9 +197,9 @@
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.10.7",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz",
- "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==",
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz",
+ "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
@@ -2488,14 +2488,15 @@
}
},
"node_modules/eslint": {
- "version": "8.25.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz",
- "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==",
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz",
+ "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==",
"dev": true,
"dependencies": {
"@eslint/eslintrc": "^1.3.3",
- "@humanwhocodes/config-array": "^0.10.5",
+ "@humanwhocodes/config-array": "^0.11.6",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -2511,14 +2512,14 @@
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "glob-parent": "^6.0.1",
+ "glob-parent": "^6.0.2",
"globals": "^13.15.0",
- "globby": "^11.1.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
"js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
@@ -3619,6 +3620,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -5322,9 +5332,9 @@
}
},
"@humanwhocodes/config-array": {
- "version": "0.10.7",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz",
- "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==",
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz",
+ "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.1",
@@ -7028,14 +7038,15 @@
"dev": true
},
"eslint": {
- "version": "8.25.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz",
- "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==",
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz",
+ "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==",
"dev": true,
"requires": {
"@eslint/eslintrc": "^1.3.3",
- "@humanwhocodes/config-array": "^0.10.5",
+ "@humanwhocodes/config-array": "^0.11.6",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -7051,14 +7062,14 @@
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "glob-parent": "^6.0.1",
+ "glob-parent": "^6.0.2",
"globals": "^13.15.0",
- "globby": "^11.1.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
"js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
@@ -7856,6 +7867,12 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
diff --git a/package.json b/package.json
index e615f70..ba3d548 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
"devDependencies": {
"@types/node": "^18.11.3",
"@types/react": "^18.0.21",
- "eslint": "8.25.0",
+ "eslint": "8.26.0",
"eslint-config-next": "12.3.1",
"typescript": "^4.8.4"
}
diff --git a/src/components/ScoreStats.js b/src/components/ScoreStats.js
index 99b5dcd..59b2bd7 100644
--- a/src/components/ScoreStats.js
+++ b/src/components/ScoreStats.js
@@ -44,14 +44,14 @@ export default class ScoreStats extends Component {
Average Cut
-
{this.getAverage(data.SaberA.averagePreSwing).toFixed(2)}
-
{this.getAverage(data.SaberA.averagePostSwing).toFixed(2)}
-
{this.getAverage(data.SaberA.averageCut).toFixed(2)}
+
{data.SaberA.averagePreSwing.toFixed(2)}
+
{data.SaberA.averagePostSwing.toFixed(2)}
+
{data.SaberA.cutDistanceScore.toFixed(2)}
-
{this.getAverage(data.SaberB.averagePreSwing).toFixed(2)}
-
{this.getAverage(data.SaberB.averagePostSwing).toFixed(2)}
-
{this.getAverage(data.SaberB.averageCut).toFixed(2)}
+
{data.SaberB.averagePreSwing.toFixed(2)}
+
{data.SaberB.averagePostSwing.toFixed(2)}
+
{data.SaberB.cutDistanceScore.toFixed(2)}
diff --git a/src/helpers/beatSaverHelpers.ts b/src/helpers/beatSaverHelpers.ts
index a4bb3f1..113f75b 100644
--- a/src/helpers/beatSaverHelpers.ts
+++ b/src/helpers/beatSaverHelpers.ts
@@ -50,7 +50,7 @@ export async function getMapData(hash: string): Promise {
bsr: jsonResponse.id,
mapArt: getLatestMapArt(jsonResponse),
};
- await setValue(key, JSON.stringify(json));
+ await setValue(key, JSON.stringify(json), 86400 * 7); // Expire in a week
console.log(
`[Cache]: Cached BS Map Data for hash ${mapHash} in ${
Date.now() - before
diff --git a/src/helpers/validateSteamId.js b/src/helpers/validateSteamId.js
index eba5d7e..ebe2314 100644
--- a/src/helpers/validateSteamId.js
+++ b/src/helpers/validateSteamId.js
@@ -32,7 +32,7 @@ export async function isValidSteamId(steamId) {
}
}
- await setValue(`${KEY}${steamId}`, valid);
+ await setValue(`${KEY}${steamId}`, valid, valid ? 86400 * 7 : 86400); // Expire in a week if is valid
console.log(
`[Cache]: Cached Steam ID for id ${steamId} in ${Date.now() - before}ms`
);
diff --git a/src/pages/overlay.js b/src/pages/overlay.js
index d92d853..8c491aa 100644
--- a/src/pages/overlay.js
+++ b/src/pages/overlay.js
@@ -15,6 +15,16 @@ export default class Overlay extends Component {
constructor(props) {
super(props);
+ this.cutData = [];
+ this.cutData.SaberA = {
+ count: [0, 0, 0],
+ totalScore: [0, 0, 0],
+ };
+ this.cutData.SaberB = {
+ count: [0, 0, 0],
+ totalScore: [0, 0, 0],
+ };
+
this._mounted = false;
this.state = {
hasError: false,
@@ -41,14 +51,14 @@ export default class Overlay extends Component {
failed: false,
mapStarCount: undefined,
SaberA: {
- averageCut: [15.0],
- averagePreSwing: [70.0],
- averagePostSwing: [30.0],
+ cutDistanceScore: 0.0,
+ averagePreSwing: 0.0,
+ averagePostSwing: 0.0,
},
SaberB: {
- averageCut: [15.0],
- averagePreSwing: [70.0],
- averagePostSwing: [30.0],
+ cutDistanceScore: 0.0,
+ averagePreSwing: 0.0,
+ averagePostSwing: 0.0,
},
};
this.setupTimer();
@@ -297,16 +307,25 @@ export default class Overlay extends Component {
await this.updateData(this.state.id);
}, 1000); // 1 second
}
+ this.cutData = [];
+ this.cutData.SaberA = {
+ count: [0, 0, 0],
+ totalScore: [0, 0, 0],
+ };
+ this.cutData.SaberB = {
+ count: [0, 0, 0],
+ totalScore: [0, 0, 0],
+ };
this.setState({
SaberA: {
- averageCut: [15.0],
- averagePreSwing: [70.0],
- averagePostSwing: [30.0],
+ cutDistanceScore: 0.0,
+ averagePreSwing: 0.0,
+ averagePostSwing: 0.0,
},
SaberB: {
- averageCut: [15.0],
- averagePreSwing: [70.0],
- averagePostSwing: [30.0],
+ cutDistanceScore: 0.0,
+ averagePreSwing: 0.0,
+ averagePostSwing: 0.0,
},
songInfo: undefined,
beatSaverData: undefined,
@@ -352,25 +371,25 @@ export default class Overlay extends Component {
noteFullyCut: (data) => {
const { noteCut } = data;
+ let beforeCutScore = 0.0;
+ let afterCutScore = 0.0;
+ let cutDistanceScore = 0.0;
+
+ const cutDataSaber = this.cutData[noteCut.saberType];
+ cutDataSaber.count[0]++;
+ cutDataSaber.count[1]++;
+ cutDataSaber.count[2]++;
+ cutDataSaber.totalScore[0] += noteCut.beforeCutScore;
+ cutDataSaber.totalScore[1] += noteCut.afterCutScore;
+ cutDataSaber.totalScore[2] += noteCut.cutDistanceScore;
+ beforeCutScore = cutDataSaber.totalScore[0] / cutDataSaber.count[0];
+ afterCutScore = cutDataSaber.totalScore[1] / cutDataSaber.count[1];
+ cutDistanceScore = cutDataSaber.totalScore[2] / cutDataSaber.count[2];
+
const cutData = this.state[noteCut.saberType];
- if (cutData.averageCut.includes(15) && cutData.averageCut.length === 1) {
- cutData.averageCut = [];
- }
- if (
- cutData.averagePreSwing.includes(70) &&
- cutData.averagePreSwing.length === 1
- ) {
- cutData.averagePreSwing = [];
- }
- if (
- cutData.averagePostSwing.includes(30) &&
- cutData.averagePostSwing.length === 1
- ) {
- cutData.averagePostSwing = [];
- }
- cutData.averagePreSwing.push(noteCut.beforeCutScore);
- cutData.averagePostSwing.push(noteCut.afterCutScore);
- cutData.averageCut.push(noteCut.cutDistanceScore);
+ cutData.averagePreSwing = beforeCutScore;
+ cutData.averagePostSwing = afterCutScore;
+ cutData.cutDistanceScore = cutDistanceScore;
this.setState({ [noteCut.saberType]: cutData });
},
songStart: (data) => {
diff --git a/yarn.lock b/yarn.lock
index 7ae4f9f..d788b79 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -98,9 +98,10 @@
dependencies:
tslib "2.4.0"
-"@humanwhocodes/config-array@^0.10.5":
- version "0.10.7"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc"
+"@humanwhocodes/config-array@^0.11.6":
+ version "0.11.6"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.6.tgz#6a51d603a3aaf8d4cf45b42b3f2ac9318a4adc4b"
+ integrity sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==
dependencies:
"@humanwhocodes/object-schema" "^1.2.1"
debug "^4.1.1"
@@ -252,7 +253,7 @@
version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
-"@nodelib/fs.walk@^1.2.3":
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
version "1.2.8"
resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
dependencies:
@@ -1127,13 +1128,7 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.1.1, debug@^4.3.2:
- version "4.3.3"
- resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz"
- dependencies:
- ms "2.1.2"
-
-debug@^4.3.4:
+debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
dependencies:
@@ -1397,13 +1392,15 @@ eslint-visitor-keys@^3.3.0:
version "3.3.0"
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz"
-eslint@8.25.0:
- version "8.25.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.25.0.tgz#00eb962f50962165d0c4ee3327708315eaa8058b"
+eslint@8.26.0:
+ version "8.26.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d"
+ integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==
dependencies:
"@eslint/eslintrc" "^1.3.3"
- "@humanwhocodes/config-array" "^0.10.5"
+ "@humanwhocodes/config-array" "^0.11.6"
"@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
@@ -1419,14 +1416,14 @@ eslint@8.25.0:
fast-deep-equal "^3.1.3"
file-entry-cache "^6.0.1"
find-up "^5.0.0"
- glob-parent "^6.0.1"
+ glob-parent "^6.0.2"
globals "^13.15.0"
- globby "^11.1.0"
grapheme-splitter "^1.0.4"
ignore "^5.2.0"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
js-sdsl "^4.1.4"
js-yaml "^4.1.0"
json-stable-stringify-without-jsonify "^1.0.1"
@@ -1601,9 +1598,10 @@ glob-parent@^5.1.2:
dependencies:
is-glob "^4.0.1"
-glob-parent@^6.0.1:
+glob-parent@^6.0.2:
version "6.0.2"
- resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
dependencies:
is-glob "^4.0.3"
@@ -1831,6 +1829,11 @@ is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz"