From c7099e65a75b22bbbf0512ec24f6ac2274e4b89a Mon Sep 17 00:00:00 2001
From: adrien <adrien@malingrey.fr>
Date: Fri, 21 Apr 2023 19:23:04 +0200
Subject: [PATCH] combo

---
 app.js | 51 +++++++++++++++++++++++++++++++++++----------------
 1 file changed, 35 insertions(+), 16 deletions(-)

diff --git a/app.js b/app.js
index 59a89d3..d3d3fa2 100644
--- a/app.js
+++ b/app.js
@@ -17,7 +17,7 @@ const T_SPIN = {
     T_SPIN: "T-SPIN"
 }
 
-// score = SCORES[tSpin][clearedLines]
+// score = SCORES[tSpin][nbClearedLines]
 const SCORES = {
     [T_SPIN.NONE]:   [0, 100, 300, 500, 800],
     [T_SPIN.MINI]:   [100, 200],
@@ -29,7 +29,7 @@ const CLEARED_LINES_NAMES = [
     "SINGLE",
     "DOUBLE",
     "TRIPLE",
-    "<strong>QUATRIS</strong>",
+    "<h4>QUATRIS</h4>",
 ]
 
 const DELAY = {
@@ -411,6 +411,7 @@ function changeKey(input) {
 class Stats {
     constructor() {
         this.highScore = Number(localStorage["highScore"]) || 0
+        this.combo = -1
     }
 
     set score(score) {
@@ -460,6 +461,36 @@ class Stats {
     get goal() {
         return this._goal
     }
+
+    lockDown(nbClearedLines, tSpin) {
+        messagesSpan.innerHTML = ""
+
+        // Cleared lines & T-Spin
+        if (nbClearedLines || tSpin ) {
+            this.goal -= nbClearedLines
+            let patternScore = SCORES[tSpin][nbClearedLines] * this.level
+            this.score += patternScore
+
+            if (tSpin) messagesSpan.innerHTML += `<div class="rotate-in-animation">${tSpin}</div>\n`
+            if (nbClearedLines) messagesSpan.innerHTML += `<div class="zoom-in-animation">${CLEARED_LINES_NAMES[nbClearedLines]}</div>\n`
+            messagesSpan.innerHTML += `<div class="zoom-in-animation">${patternScore}</div>\n`
+        }
+
+        // Combo
+        if (nbClearedLines) {
+            this.combo++
+            if (this.combo >= 1) {
+                let comboScore = (nbClearedLines == 1 ? 20 : 50) * this.combo * this.level
+                this.score += comboScore
+                messagesSpan.innerHTML += `<div class="zoom-in-animation">COMBO x${this.combo}</div>\n`
+                messagesSpan.innerHTML += `<div class="zoom-in-animation">${comboScore}</div>\n`
+            }
+        } else {
+            this.combo = -1
+        }
+
+        if (this.goal <= 0) this.level++
+    }
 }
 
 
@@ -664,20 +695,8 @@ function lockDown() {
             matrix.lockedMinoes.unshift(Array(matrix.columns))
             matrix.table.rows[y].classList.add("line-cleared-animation")
         }
-        let nbClearedLines = clearedLines.length
-        if (nbClearedLines || tSpin) {
-            matrix.redraw()
-            stats.goal -= nbClearedLines
-            stats.score += SCORES[tSpin][nbClearedLines]
-            messagesSpan.innerHTML = ""
-            if (tSpin) messagesSpan.innerHTML += `<div class="rotate-in-animation">${tSpin}</div>\n`
-            if (nbClearedLines) messagesSpan.innerHTML += `<div class="zoom-in-animation">${CLEARED_LINES_NAMES[nbClearedLines]}</div>\n`
-            messagesSpan.innerHTML += `<div class="zoom-in-animation">${SCORES[tSpin][nbClearedLines]}</div>\n`
-        }
-
-        if (stats.goal <= 0) {
-            stats.level++
-        }
+        matrix.redraw()
+        stats.lockDown(clearedLines.length, tSpin)
         
         generate()
     }