import { Eventos } from "../Events.js";
import { EventBus } from "../EventBus.js";
import Turno from "../Logica/Turno.js";
/**
* Clase que gestiona la parte gráfica del turno
* @class TurnoGraficos
* @memberof Render
*/
class TurnoGraficos {
/**
* Constructor de TurnoGrafico
* @param {Phaser.Scene} escena
*/
constructor(escena) {
this.escena = escena;
this.piezasMover = 3;
this.accionesPieza = 0;
this.jugadorTurno = "J1"; //Default porque siempre es el que empieza
EventBus.on(Eventos.CHANGE_TURN, () => {
this.setAccionesTurno(3);
})
}
/**
* Crear los elementos gráficos del turno
* @param {Turno} turno
*/
create(turno) {
const width = this.escena.scale.width;
const height = this.escena.scale.height;
this.escena.add.rectangle(0, height - 83, width, 83, 0x402200).setOrigin(0, 0);
this.JugadorText = this.escena.add.text(50, height - 45, 'J1: ', { // Título
fontSize: '32px',
fontFamily: 'Kotton',
fill: '#ffffff'
}).setOrigin(0.5);
//Imagenes de los movimientos restantes de cada jugador
this.procesarIconos();
this.accionessText = this.escena.add.text(width / 2, height - 60, 'Acciones de pieza: ' + this.accionesPieza, { // Título
fontSize: '28px',
fontFamily: 'Kotton',
fill: '#ffffff'
}).setOrigin(0.5);
this.acabarText = this.escena.add.text(width / 2, height - 30, 'Finalizar Movimiento', { // Título
fontSize: '22px',
fontFamily: 'Kotton',
fill: '#ce2020ff'
}).setInteractive({ useHandCursor: true }).setOrigin(0.5);
this.acabarText.on('pointerdown', () => {
turno.acabarMovimientos();
})
this.acabarText.on('pointerover', () => {
this.acabarText.setColor('#febcbcff');
})
this.acabarText.on('pointerout', () => {
this.acabarText.setColor('#ce2020ff');
})
}
/**
* Setear las acciones de la pieza
* @param {number} acciones
*/
setAccionesPieza(acciones) {
this.accionesPieza = acciones;
this.accionessText.text = 'Acciones de pieza: ' + this.accionesPieza;
}
/**
* Setar las acciones del turno
* @param {number} acciones
*/
setAccionesTurno(acciones) {
this.piezasMover = acciones;
this.procesarIconos();
}
/**
* Crea la lista de iconos segun los movimientos restantes de cada jugador
*
*/
procesarIconos() {
// eliminar iconos y crearlos otra vez (Tras cada accion de cada jugador)
if (this.iconosAcciones) {
this.iconosAcciones.forEach(i => i.destroy());
}
this.iconosAcciones = [];
const startX = 110;
const y = this.escena.scale.height - 45;
for (let i = 0; i < this.piezasMover; i++) {
let icon = undefined;
if (this.jugadorTurno == "J1") {
icon = this.escena.add.sprite(startX + i * 70, y, 'peon').setScale(0.08);
} else {
icon = this.escena.add.sprite(startX + i * 70, y, 'peon2').setScale(0.08);
}
this.iconosAcciones.push(icon);
}
}
/**
* Setear el turno del jugador
* @param {Jugador} jugador
*/
setTurnoJugador(jugador) {
this.JugadorText.text = jugador + ": ";
this.jugadorTurno = jugador;
// Redibujar iconos según el jugador (J1 o J2)
this.setAccionesTurno(this.piezasMover);
}
/**
* Desactiva el botón "Finalizar Movimiento" durante el turno de la IA
*/
desactivarBotonFinalizar() {
if (this.acabarText) {
this.acabarText.setAlpha(0.5);
this.acabarText.disableInteractive();
}
}
/**
* Activa el botón "Finalizar Movimiento" durante el turno del jugador
*/
activarBotonFinalizar() {
if (this.acabarText) {
this.acabarText.setAlpha(1);
this.acabarText.setInteractive({ useHandCursor: true });
}
}
/**
* Desactivar la UI del turno
*/
desactivarUI() {
if (this.acabarText) this.acabarText.disableInteractive();
}
}
export default TurnoGraficos;