ghost + trail
This commit is contained in:
parent
ecbb8552cd
commit
2f07a096be
@ -19,7 +19,6 @@ Array.prototype.pick = function() {
|
||||
}
|
||||
|
||||
|
||||
const MINO_SIZE = 20
|
||||
const NEXT_PIECES = 6
|
||||
const HOLD_ROWS = 6
|
||||
const HOLD_COLUMNS = 6
|
||||
@ -38,7 +37,7 @@ const HELD_PIECE_POSITION = [2, 3]
|
||||
const FALLING_PIECE_POSITION = [4, 3]
|
||||
const NEXT_PIECES_POSITIONS = Array.from({length: NEXT_PIECES}, (v, k) => [2, k*4+3])
|
||||
const LOCK_DELAY = 500
|
||||
const FALL_PERIOD = 1000
|
||||
const FALL_PERIOD = 1000
|
||||
const AUTOREPEAT_DELAY = 300
|
||||
const AUTOREPEAT_PERIOD = 10
|
||||
const ANIMATION_DELAY = 100
|
||||
@ -129,6 +128,7 @@ class Tetromino {
|
||||
this.rotationPoint5Used = false
|
||||
this.holdEnabled = true
|
||||
this.locked = false
|
||||
this.borderColor = MINO_BORDER_COLOR
|
||||
this.srs = {} // Super Rotation System
|
||||
this.srs[SPIN.CW] = [
|
||||
[[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],
|
||||
@ -213,10 +213,18 @@ class Tetromino {
|
||||
return this.minoesPos.translate(this.pos)
|
||||
}
|
||||
|
||||
get ghost() {
|
||||
var ghost = new Tetromino(Array.from(this.pos), this.shape)
|
||||
ghost.color = this.transparentColor
|
||||
ghost.borderColor = this.transparentColor
|
||||
ghost.minoesPos = Array.from(this.minoesPos)
|
||||
return ghost
|
||||
}
|
||||
|
||||
drawIn(table) {
|
||||
var bgColor = this.locked ? this.lightColor : this.color
|
||||
this.minoesAbsPos.forEach( pos => {
|
||||
drawMino(table.rows[pos[1]].cells[pos[0]], bgColor, MINO_BORDER_COLOR)})
|
||||
drawMino(table.rows[pos[1]].cells[pos[0]], bgColor, this.borderColor)})
|
||||
}
|
||||
}
|
||||
|
||||
@ -234,8 +242,6 @@ class MinoesTable {
|
||||
this.columns = columns
|
||||
this.defaultBgColor = defaultBgColor
|
||||
this.defaultBorderColor = defaultBorderColor
|
||||
this.width = columns * MINO_SIZE
|
||||
this.height = rows * MINO_SIZE
|
||||
this.piece = null
|
||||
for (var y=0; y < rows; y++) {
|
||||
var row = this.table.insertRow()
|
||||
@ -273,17 +279,16 @@ class Matrix extends MinoesTable {
|
||||
super("matrix", MATRIX_ROWS, MATRIX_COLUMNS, MATRIX_BG_COLOR, MATRIX_BORDER_COLOR)
|
||||
this.lockedMinoes = Array.from(Array(MATRIX_ROWS+3), row => Array(MATRIX_COLUMNS))
|
||||
this.piece = null
|
||||
this.linesCleared = []
|
||||
this.trail = {
|
||||
minoesPos: [],
|
||||
height: 0
|
||||
}
|
||||
/*this.context.textAlign = "center"
|
||||
this.context.textBaseline = "center"
|
||||
this.context.font = "27px 'Share Tech', sans-serif"
|
||||
this.centerX = this.width / 2
|
||||
this.centerY = this.height / 2
|
||||
this.linesCleared = []
|
||||
this.trail = {
|
||||
minoesPos: [],
|
||||
height: 0,
|
||||
gradient: null
|
||||
}*/
|
||||
this.centerY = this.height / 2*/
|
||||
}
|
||||
|
||||
cellIsOccupied(x, y) {
|
||||
@ -312,16 +317,19 @@ class Matrix extends MinoesTable {
|
||||
}
|
||||
|
||||
// trail
|
||||
/*if (this.trail.height) {
|
||||
this.context.fillStyle = this.trail.gradient
|
||||
this.trail.minoesPos.forEach(topLeft => {
|
||||
this.context.fillRect(...topLeft, MINO_SIZE, this.trail.height)
|
||||
if (this.trail.height) {
|
||||
this.trail.minoesPos.forEach(pos => {
|
||||
for (var dy=0; dy < this.trail.height; dy++) {
|
||||
var cell = this.table.rows[pos[1]+dy].cells[pos[0]]
|
||||
drawMino(cell, this.piece.transparentColor, this.piece.transparentColor)
|
||||
}
|
||||
})
|
||||
}*/
|
||||
}
|
||||
|
||||
// falling piece
|
||||
/*for (var ghostYOffset = 1; this.spaceToMove(this.piece.minoesAbsPos.translate([0, ghostYOffset])); ghostYOffset++) {}
|
||||
ghostYOffset--*/
|
||||
var ghost = this.piece.ghost
|
||||
for (; this.spaceToMove(ghost.minoesAbsPos); ghost.pos[1]++) {}
|
||||
ghost.pos[1]--
|
||||
ghost.drawIn(this.table)
|
||||
this.piece.drawIn(this.table)
|
||||
|
||||
// Lines cleared
|
||||
@ -558,7 +566,7 @@ function lockDown(){
|
||||
if (row.filter(mino => mino.length).length == MATRIX_COLUMNS) {
|
||||
matrix.lockedMinoes.splice(y, 1)
|
||||
matrix.lockedMinoes.unshift(Array(MATRIX_COLUMNS))
|
||||
matrix.linesCleared.push((y-3) * MINO_SIZE)
|
||||
matrix.linesCleared.push(y)
|
||||
}
|
||||
})
|
||||
|
||||
@ -657,16 +665,13 @@ function softDrop() {
|
||||
function hardDrop() {
|
||||
scheduler.clearInterval(lockPhase)
|
||||
scheduler.clearTimeout(lockDown)
|
||||
/*matrix.trail.minoesPos = Array.from(matrix.piece.minoesAbsPos).map(pos => pos.mul(MINO_SIZE))
|
||||
for (matrix.trail.height=0; move(MOVEMENT.DOWN); matrix.trail.height += MINO_SIZE) {
|
||||
matrix.trail.minoesPos = Array.from(matrix.piece.minoesAbsPos)
|
||||
for (matrix.trail.height=0; move(MOVEMENT.DOWN); matrix.trail.height ++) {
|
||||
stats.score += 2
|
||||
}*/
|
||||
}
|
||||
while (move(MOVEMENT.DOWN)) {}
|
||||
lockDown()
|
||||
/*matrix.trail.gradient = matrix.context.createLinearGradient(0, 0, 0, matrix.trail.height)
|
||||
matrix.trail.gradient.addColorStop(0,"rgba(255, 255, 255, 0)")
|
||||
matrix.trail.gradient.addColorStop(1, matrix.piece.transparentColor)
|
||||
scheduler.setTimeout(clearTrail, ANIMATION_DELAY)*/
|
||||
scheduler.setTimeout(clearTrail, ANIMATION_DELAY)
|
||||
}
|
||||
|
||||
function clearTrail() {
|
||||
|
Reference in New Issue
Block a user