From 8f2be5fff227052fafb8c455f003ba640a78c77c Mon Sep 17 00:00:00 2001 From: MeowcaTheoRange <58280776+MeowcaTheoRange@users.noreply.github.com> Date: Sun, 24 Apr 2022 23:04:55 +0000 Subject: [PATCH] Cosmetics & Optimizations --- .github/workflows/format.yml | 20 ++++++++++++++++++++ .prettierrc | 1 + code/easing.js | 6 +++--- code/{game.js => main.js} | 28 ++++++++++++++++++---------- index.html | 2 +- readme.md | 4 +++- sounds/nullHit.mp3 | Bin 0 -> 17998 bytes 7 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 .prettierrc rename code/{game.js => main.js} (97%) create mode 100644 sounds/nullHit.mp3 diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index e69de29..dc2bb3e 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -0,0 +1,20 @@ +name: Formatter + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Setup repo + uses: actions/checkout@v2 + + - name: Format code with Prettier + uses: creyD/prettier_action@v4.2 + with: + commit_message: "code formatted" \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..68ea04d --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +tabWidth: 4 \ No newline at end of file diff --git a/code/easing.js b/code/easing.js index 267cb78..7bdf7c4 100644 --- a/code/easing.js +++ b/code/easing.js @@ -146,7 +146,7 @@ export function tween(func, attrs, timeLen, minVal, maxVal, ease, type, onFinish var upd = onUpdate(() => { switch (type(time(), stTime, timeLen)) { case "CALLBACK": - for (h in attrs) { + for (let h in attrs) { func[attrs[h]] = maxVal; } upd(); @@ -155,7 +155,7 @@ export function tween(func, attrs, timeLen, minVal, maxVal, ease, type, onFinish stTime = time(); break; case "CONTINUE": - for (h in attrs) { + for (let h in attrs) { func[attrs[h]] = minVal; } break; @@ -168,7 +168,7 @@ export function tween(func, attrs, timeLen, minVal, maxVal, ease, type, onFinish default: break; } - for (i in attrs) { + for (let i in attrs) { func[attrs[i]] = lerp(minVal, maxVal, ease((time() - stTime) / timeLen)); } }); diff --git a/code/game.js b/code/main.js similarity index 97% rename from code/game.js rename to code/main.js index 2fe6635..7e463fe 100644 --- a/code/game.js +++ b/code/main.js @@ -11,7 +11,7 @@ kaboom({ }); load(new Promise((resolve, reject) => { - loadFont("unscii", "fonts/unscii_8x8.png", 8, 8, {chars: " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"}); + loadFont("unscii", "sprites/unscii_8x8.png", 8, 8, {chars: " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"}); // Music loadSound("tutorial", "sounds/Getting it Done.mp3"); //135 loadSound("faith", "sounds/The Friendly Faith Plate.mp3"); //120 @@ -21,6 +21,7 @@ load(new Promise((resolve, reject) => { // // Sounds + loadSound("nullHit", "sounds/nullHit.mp3"); loadSound("score", "sounds/score.mp3"); loadSound("metro", "sounds/metro.wav"); loadSound("explode", "sounds/explode.mp3"); @@ -477,7 +478,7 @@ scene("Game", (arr) => { ]) onUpdate(() => { if (health > 1) health = 1; - if (health < 0) {health = 0;go("Lose", score);music.stop();} + if (health < 0) {health = 0;go("Lose", score, arr);music.stop();} if (music.time() > music.duration() && health >= 0) {go("Title");} strumLine = lerp(18, width() / 2, health); noteClick.pos.x = strumLine - 5; @@ -550,6 +551,11 @@ scene("Game", (arr) => { } }); onKeyPress("space", () => {judgeHitsLol()}); + onKeyPress("backspace", () => { + underlay.stop(); + music.stop(); + go("Help") + }); onKeyPress("a", () => {autoplay = !autoplay}); onKeyPress("d", () => {debugMode = !debugMode}); onClick(() => {judgeHitsLol()}); @@ -696,6 +702,7 @@ scene("Game", (arr) => { } function judgeHitsLol() { var iv = false; + var hits = 0; every("note", (j) => { if (!iv) { if (!j.empty) { @@ -703,6 +710,7 @@ scene("Game", (arr) => { var theColor = WHITE; if(j.pos.x >= strumLine - 20) { if(j.pos.x <= strumLine + 22) { + hits++; iv = true; destroy(j); //Destroys note. No score. noteClick.play("click"); @@ -718,17 +726,15 @@ scene("Game", (arr) => { str = "Perfect!"; theColor = MAGENTA; } - if(j.pos.x <= strumLine) { + if(j.pos.x <= strumLine + 5) { score += 50; health += 0.02; - str = "Marvelous!"; - theColor = YELLOW; + str = "Perfect!!"; } if(j.pos.x <= strumLine - 3) { score += 50; health -= 0.01; str = "Perfect!"; - theColor = MAGENTA; } if(j.pos.x <= strumLine - 8) { score -= 100; @@ -755,6 +761,9 @@ scene("Game", (arr) => { } } }); + if (hits <= 0) { + play("nullHit"); + } } function beatHit() { every("dances", (obj) => { @@ -958,7 +967,7 @@ scene("Title", () => { onTouchStart(() => {go("Help", ["tutorial"]);/*losemus.stop();*/}); }); -scene("Lose", (score) => { +scene("Lose", (score, song) => { const lost = add([ sprite("jellybeanFail"), "dances", @@ -985,9 +994,8 @@ scene("Lose", (score) => { pos: vec2(0, height() - 30) }); }) - onKeyPress("space", () => {go("Title");losemus.stop();}); - onClick(() => {go("Title");losemus.stop();}); - onTouchStart(() => {go("Title");losemus.stop();}); + onKeyPress("space", () => {go("Game", song);losemus.stop();}); + onClick(() => {go("Game", song);losemus.stop();}); }); scene("Chart", (song) => { diff --git a/index.html b/index.html index 9a3d75b..e196b61 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - + diff --git a/readme.md b/readme.md index 83cfef8..7589ea3 100644 --- a/readme.md +++ b/readme.md @@ -3,4 +3,6 @@ ## ToDo * Good practices in Js code -* Module code \ No newline at end of file +* Module code +* Custom font +* More minimization? \ No newline at end of file diff --git a/sounds/nullHit.mp3 b/sounds/nullHit.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f31f30544fa5f0694f1245b4680f5d8c56502e8f GIT binary patch literal 17998 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 Ktcm~sIsPxj&>g1$ literal 0 HcmV?d00001