Escenas_EscenaColocarPiezas.js

import PanelColocarPiezas from "../Render/PanelColocarPiezas.js";
import ColocarPiezas from "../Logica/ColocarPiezas.js";
import TableroGraficoColocarPiezas from "../Render/TableroGraficoColocarPiezas.js";
import PiezaGrafico from "../Render/PiezaGrafico.js";
import PanelEventos from "../Render/PanelEventos.js";
import Equipo from "../Logica/Equipo.js";
import { Eventos } from "../Events.js";
import { EventBus } from "../EventBus.js";
import Pieza from "../Logica/Pieza.js";

/**
 * Escena para colocar las piezas en el tablero antes de iniciar la partida.
 * @class EscenaColocarPiezas
 * @extends Phaser.Scene
 * @memberof Escenas
 */
class EscenaColocarPiezas extends Phaser.Scene {
    /**
     * Constructor de la escena EscenaColocarPiezas.
     * @constructor
     */
    constructor() {
        super("ElegirPiezas")
    }

    /**
     * Método preload de la escena EscenaColocarPiezas.
     * Carga las imágenes necesarias para la escena.
     */
    preload() {
       this.crearImagenes();
    }

    /**
     * Método create de la escena EscenaColocarPiezas.
     * Crea los elementos gráficos y lógicos necesarios para la escena.
     */
    create() {
       // this.crearAnimaciones();
       this.todasLasPiezas = true;

        this.equipoJ1 = new Equipo("J1");
        this.equipoJ2 = new Equipo("J2");

        //Creamos la instancia y la guardamos en tab
        this.tab = new ColocarPiezas(this.equipoJ1, this.equipoJ2);

        this.piezas = [];
        this.piezaGrafico = new PiezaGrafico(this, this.tab);

        this.PanelEventos = new PanelEventos(this);

        //Dibujamos el tablero
        this.tabGrafico = new TableroGraficoColocarPiezas(this.equipoJ1, this.equipoJ2, this, this.tab, this.PanelEventos);

        this.panelElegirPiezas = new PanelColocarPiezas(this, this.tab, this.tabGrafico, this.equipoJ1, this.equipoJ2, this.PanelEventos);
        this.PanelEventos.mostrar('Colocar el tablero', 'Para posicionar las piezas en el tablero, pulsa las casillas disponibles. Para modificar una pieza, pulsa sobre ella y selecciona su nueva posición.', 'WarCanvas');

         EventBus.on(Eventos.PIECE_POSITION, (pieza) => {
            this.piezaPosicionada(pieza); // Emit en ElegirPieza Tablero
            this.tabGrafico.colorearRango();
        });
        EventBus.on(Eventos.PIECE_DELETE, (pieza)=> {
            this.piezaEliminada(pieza); // Emit en ElegirPieza Tablero
            this.tabGrafico.colorearRango();
        });
    }

    /**
     * Método crearImagenes de la escena EscenaColocarPiezas.
     * Carga las imágenes necesarias para las piezas del juego.
     */
    crearImagenes(){
       this.load.image('peon', './imgs/piezas/soldado-dibujado.webp');
        this.load.image('peon-blanco', './imgs/piezas/white-pawn.webp');
        this.load.image('peon-rojo', './imgs/piezas/red-pawn.webp');
        this.load.image('peon2', './imgs/piezas/soldado-realista.webp');
        this.load.image('caballeria', './imgs/piezas/caballeria-dibujada.webp');
        this.load.image('caballeria2', './imgs/piezas/caballeria-realista.webp');
        this.load.image('comandante', './imgs/piezas/Comandante.webp');
        this.load.image('comandante2', './imgs/piezas/comandante-realista.webp');
        this.load.image('artilleria', './imgs/piezas/artilleria-dibujada.webp');
        this.load.image('artilleria2', './imgs/piezas/artilleria-realista.webp');
    }

    /**
     * Dibuja la pieza en la posición indicada.
     * @param {Pieza} pieza 
     */
    piezaPosicionada(pieza) {
        this.piezaGrafico.dibujarPieza(pieza);
    }

    /**
     * Elimina la pieza del tablero.
     * @param {Pieza} pieza 
     */
    piezaEliminada(pieza) {
        this.piezaGrafico.eliminarPieza(pieza)
    }

    /**
     * Cambia a la escena de inicio si todas las piezas están colocadas.
     */
    cambiarEscena() {
        let e1 = this.equipoJ1.getSoldados() + this.equipoJ1.getCaballeria() + this.equipoJ1.getArtilleria() + this.equipoJ1.getComandante();
        let e2 = this.equipoJ2.getSoldados() + this.equipoJ2.getCaballeria() + this.equipoJ2.getArtilleria() + this.equipoJ2.getComandante();
        if(this.todasLasPiezas && (e1 > 0 || e2 > 0)) this.PanelEventos.mostrar('Colocar el tablero', 'Para continuar todas las piezas deben estar posicionadas.', 'Coloca todas las piezas');
        else {
        EventBus.removeAllListeners();
        this.scene.start('Inicio', { // Le pasamos los equipos y si se utiliza la IA o no
                equipo1: this.equipoJ1,
                equipo2: this.equipoJ2,
                ia: false 
        });
        this.equipoJ1 = undefined;
        this.equipoJ2 = undefined;}
    }

    /**
     * Activa o desactiva el modo de colocar todas las piezas.
     */
    Cheat() {
        this.todasLasPiezas = !this.todasLasPiezas;
    }
}

export default EscenaColocarPiezas;