/**
* Clase que representa una pieza en el tablero de juego.
* @class Pieza
* @memberof Logica
*/
class Pieza {
/**
* Constructor de Pieza.
* @param {Tablero} tablero - tablero al que pertenece la pieza
* @param {string} tipoPieza - tipo de pieza ('Soldado', 'Caballeria', 'Artilleria', 'Comandante')
* @param {number} fil - fila inicial de la pieza
* @param {number} col - columna inicial de la pieza
* @param {string} jugador - jugador propietario ('J1' o 'J2')
* @param {number} numMovimientos - número de movimientos permitidos
* @param {number} bonusAtaque - bonificación de ataque
* @param {number} bonusDefensa - bonificación de defensa
* @constructor
*/
constructor(tablero, tipoPieza, fil, col, jugador, numMovimientos, bonusAtaque, bonusDefensa) {
this.tablero = tablero;
this.tipoPieza = tipoPieza;
this.fil = fil;
this.col = col;
this.jugador = jugador;
this.numMovimientos = numMovimientos;
this.movida = false;
this.bonusAtaque = bonusAtaque;
this.bonusDefensa = bonusDefensa;
}
/**
* Mueve la pieza a una nueva posición.
* @param {number} fil - nueva fila
* @param {number} col - nueva columna
*/
moverse(fil, col) {
this.fil = fil;
this.col = col;
}
/**
* Obtiene el número de movimientos permitidos de la pieza.
* @returns {number} número de movimientos
*/
getMovimientos(){
return this.numMovimientos;
}
/**
* Obtiene el jugador propietario de la pieza.
* @returns {string} identificador del jugador ('J1' o 'J2')
*/
getJugador(){
return this.jugador;
}
/**
* Obtiene el tipo de pieza.
* @returns {string} tipo de pieza ('Soldado', 'Caballeria', 'Artilleria', 'Comandante')
*/
getTipo(){
return this.tipoPieza;
}
/**
* Obtiene la posición actual de la pieza.
* @returns {{fila: number, col: number}} objeto con propiedades fila y col
*/
getPosicion(){
return {fila: this.fil, col: this.col};
}
/**
* Marca la pieza como movida en este turno.
* Cambia la opacidad del sprite asociado para indicar visualmente el estado.
*/
setMovida(){
this.movida = true;
if (!this.tablero) return;
const escena = this.tablero.getEscena();
if (!escena) return;
const piezaGrafico = escena.getPiezaGrafico();
if (!piezaGrafico) return;
const mapSprites = piezaGrafico.getMapSprites();
if (!mapSprites) return;
const sprite = mapSprites.get(this);
if (sprite) {
sprite.setAlpha(0.5); // Hacer la pieza semi-transparente al moverse
}
}
/**
* Reinicia el estado de movimiento de la pieza para el próximo turno.
*
*/
resetMovida(){
this.movida = false;
if (!this.tablero) return;
const escena = this.tablero.getEscena();
if (!escena) return;
const piezaGrafico = escena.getPiezaGrafico();
if (!piezaGrafico) return;
const mapSprites = piezaGrafico.getMapSprites();
if (!mapSprites) return;
const sprite = mapSprites.get(this);
if (sprite) {
sprite.setAlpha(1); // Restaurar opacidad completa al resetear movimiento
}
}
/**
* Verifica si la pieza ya ha sido movida en este turno.
* @returns {boolean} true si la pieza ya fue movida, false en caso contrario
*/
getMovida(){
return this.movida;
}
/**
* Obtiene la bonificación de ataque de la pieza.
* @returns {number} bonificación de ataque
*/
getBonusAtaque() {
return this.bonusAtaque;
}
/**
* Obtiene la bonificación de defensa de la pieza.
* @returns {number} bonificación de defensa
*/
getBonusDefensa() {
return this.bonusDefensa;
}
/**
* Establece el tablero al que pertenece la pieza.
* @param {Tablero} t - tablero del juego
*/
setTablero(t) {
this.tablero = t;
}
}
export default Pieza;