Package estados

Source Code of estados.Aula

package estados;

import componentes.DataManager;
import componentes.Nivel;
import componentes.PanelInfo;
import entidades.Bloque;
import entidades.Jugador;
import entidades.NPC;
import it.marteEngine.ResourceManager;
import it.marteEngine.World;
import it.marteEngine.entity.Entity;
import java.util.ArrayList;
import java.util.List;
import org.newdawn.slick.*;
import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.state.transition.EmptyTransition;
import org.newdawn.slick.state.transition.FadeOutTransition;
import org.newdawn.slick.tiled.TiledMap;

/**
* @author Héctor Pérez Pedrosa - WIDA46976866
* @author  Carlos Romero Delgado - WIDA48022963
*/
public class Aula extends World {

    private static final int ANCHO_MAPA = 42;
    private static final int ALTO_MAPA = 31;
    private static final int TAMANO_CASILLA = 24;
    private static final String DIR_ABA = "abajo";
    private static final String DIR_ARR = "arriba";
    private static final String DIR_DER = "derecha";
    private static final String DIR_IZQ = "izquierda";
    private final Nivel nivel;
    private final List<Entity> arrayNPC = new ArrayList<Entity>();
    private Jugador player;
    private final List<Animation> animations;
    private PanelInfo actionArea;
    private static StateBasedGame stateBasedGame;
    private Graphics graphics;
    private static String npcText;
    private boolean gameReady = false; //Controla si el movimiento del personaje esta activo
    private Image fondoPausa;
    private Music musicaClase;

    // Constructores //
    /**
     * Constructor de Aula.
     *
     * @param id int - Identificador del estado.
     * @param container GameContainer - El Contenedor del juego creado en el
     * main.
     */
    public Aula(final int id, final GameContainer container) {
        super(id, container);
        //Creamos el mapa y generamos el nivel
        final TiledMap tiledMap = ResourceManager.getMap("claseTiled");
        nivel = new Nivel(tiledMap);

        //Generamos las animaciones que hemos definido en el Tiled Map.
        nivel.findAnimations();
        animations = nivel.getAnimations();

        //Asignamos el tamaño al mundo
        setWidth(ANCHO_MAPA * TAMANO_CASILLA);
        setHeight(ALTO_MAPA * TAMANO_CASILLA);
    }

    // Overrides //
    /**
     * @see org.newdawn.slick.state.GameState#init
     */
    @Override
    public final void init(final GameContainer container, final StateBasedGame game) throws SlickException {
        super.init(container, game);

        //Fondo para el menú de pausa
        fondoPausa = new Image(1024, 768);

        //Creamos los personajes
        crearNPC();

        //Creamos el área donde van los textos
        actionArea = PanelInfo.getInstance();
        actionArea.getBackground().setAlpha(0);

        //Creamos la música
        musicaClase = ResourceManager.getMusic("clase");
    }

    /**
     * @see org.newdawn.slick.state.GameState#enter
     */
    @Override
    public final void enter(final GameContainer container, final StateBasedGame game) throws SlickException {
        super.enter(container, game);

        //Borramos todo lo que había y volvemos a aañadir el mapa, al jugador y a los NPC al mundo
        clear();
        addAll(nivel.getEntities(), World.GAME);
        addAll(arrayNPC, World.GAME);
        add(player, World.GAME);

        //Acciones a tomar dependiendo del estado anterior.
        if (DataManager.getLastState() == 4) {
            musicaClase.loop();
        }

        //Variables de control
        stateBasedGame = game;
    }

    /**
     * @see org.newdawn.slick.state.GameState#leave
     */
    @Override
    public void leave(final GameContainer container, final StateBasedGame game) throws SlickException {
        super.leave(container, game);

        //Ăšltimo estado en el que estaba.
        DataManager.setLastState(game.getCurrentStateID());
    }

    /**
     * @see org.newdawn.slick.state.GameState#render
     */
    @Override
    public final void render(final GameContainer container, final StateBasedGame game, final Graphics g) throws SlickException {
        super.render(container, game, g);

        //Variables de control
        graphics = g;

        //Ponemos la fuente y el fondo
        g.setFont(ResourceManager.getFont("pokeGB"));
        g.setBackground(Color.black);

        //Creamos el area de texto, y escribimos de color negro
        g.drawImage(actionArea.getBackground(), -5, 615);
        g.setColor(Color.black);
        g.drawString(actionArea.getShowInfo(), 60, 675);

        //Dibujamos las animaciones del mapa
        for (int i = 0; i < animations.size(); i++) {
            if (nivel.getAnimationLayer().get(i) == 3) {
                animations.get(i).draw(nivel.getAnimationXPositions().get(i), nivel.getAnimationYPositions().get(i));
            }
        }
    }

    /**
     * @see org.newdawn.slick.state.GameState#update
     */
    @Override
    public final void update(final GameContainer container, final StateBasedGame game, final int delta) throws SlickException {
        super.update(container, game, delta);
    }

    /**
     * @see org.newdawn.slick.InputListener#keyPressed
     */
    @Override
    public final void keyPressed(final int key, final char c) {

        //Si pulsas escape se abre el menu de pausa
        if (key == Input.KEY_ESCAPE) {
            graphics.copyArea(fondoPausa, 0, 0);
            DataManager.setFondoPausa(fondoPausa);
            stateBasedGame.enterState(3);
        }
        //Cuando las condiciones se cumplen, muestra/ocula el cuadro de texto, escribe el texto y activa/desactiva el movimiento del personaje
        if (key == Input.KEY_SPACE && actionArea.isReady() && player.isColliding()) {
            if (!gameReady) {
                miraAlJugador();
                muestraDialogo(npcText);
                gameReady = true;
            } else {
                escondeDialogo();
                gameReady = false;
            }
        }
    }

    // Utilidades //
    /**
     * Método que muestra el cuadro de diálogo.
     */
    private void muestraDialogo(final String texto) {
        player.setActive(false);
        actionArea.getBackground().setAlpha(1);
        actionArea.writeInfo(texto);
    }

    /**
     * Método que esconde el cuadro de diálogo.
     */
    private void escondeDialogo() {
        player.setActive(true);
        actionArea.setShowInfo("");
        actionArea.getBackground().setAlpha(0);
    }

    /**
     * Método que hace que los NPC miren al personaje cuando les hable.
     */
    private void miraAlJugador() {
        if (player.collide(Bloque.NPC, player.x + player.mySpeed.x, player.y) != null) {
            ((NPC) player.collide(Bloque.NPC, player.x + player.mySpeed.x, player.y)).setAnim(NPC.STAND_LEFT);
        } else if (player.collide(Bloque.NPC, player.x - player.mySpeed.x, player.y) != null) {
            ((NPC) player.collide(Bloque.NPC, player.x - player.mySpeed.x, player.y)).setAnim(NPC.STAND_RIGHT);
        } else if (player.collide(Bloque.NPC, player.x, player.y + player.mySpeed.y) != null) {
            ((NPC) player.collide(Bloque.NPC, player.x, player.y + player.mySpeed.y)).setAnim(NPC.STAND_UP);
        } else if (player.collide(Bloque.NPC, player.x, player.y - player.mySpeed.y) != null) {
            ((NPC) player.collide(Bloque.NPC, player.x, player.y - player.mySpeed.y)).setAnim(NPC.STAND_DOWN);
        }
    }

    /**
     * Método que cambia al estado de Pasillo.
     */
    public static void entraPasillo() {
        stateBasedGame.enterState(4, new FadeOutTransition(), new EmptyTransition());
    }

    /**
     * Método para crear y añadir los NPC
     */
    private void crearNPC() {
        player = new Jugador(20, 5, ResourceManager.getParameter("SpriteProtagonista"), 42, 57);
        NPC julio = new NPC(17, 8, ResourceManager.getParameter("SpriteNPC_Profe_Julio"), 42, 57, DIR_DER, "julio", "julio_c");
        NPC monica = new NPC(17, 11, ResourceManager.getParameter("SpriteNPC_Profe_Monica"), 42, 57, DIR_DER, "monica", "monica_c");
        NPC quim = new NPC(23, 8, ResourceManager.getParameter("SpriteNPC_Profe_Quim"), 42, 57, DIR_IZQ, "quim", "quim_c");
        NPC nacho = new NPC(23, 11, ResourceManager.getParameter("SpriteNPC_Profe_Nacho"), 42, 57, DIR_IZQ, "nacho", "nacho_c");
        NPC npc1 = new NPC(13, 11, ResourceManager.getParameter("SpriteNPC_mas11"), 45, 57, DIR_ARR, "npc1", "npc1_c");
        NPC npc2 = new NPC(27, 11, ResourceManager.getParameter("SpriteNPC_fem05"), 42, 60, DIR_IZQ, "npc2", "npc2_c");
        NPC npc3 = new NPC(31, 11, ResourceManager.getParameter("SpriteNPC_mas08"), 42, 60, DIR_IZQ, "npc3", "npc3_c");
        NPC npc4 = new NPC(5, 17, ResourceManager.getParameter("SpriteNPC_mas07"), 42, 60, DIR_ABA, "npc4", "npc4_c");
        NPC npc5 = new NPC(9, 17, ResourceManager.getParameter("SpriteNPC_mas02"), 48, 60, DIR_DER, "npc5", "npc5_c");
        NPC npc6 = new NPC(13, 17, ResourceManager.getParameter("SpriteNPC_mas04"), 42, 57, DIR_DER, "npc6", "npc6_c");
        NPC npc7 = new NPC(27, 17, ResourceManager.getParameter("SpriteNPC_mas05"), 42, 60, DIR_IZQ, "npc7", "npc7_c");
        NPC npc8 = new NPC(31, 17, ResourceManager.getParameter("SpriteNPC_mas10"), 42, 60, DIR_ABA, "npc8", "npc8_c");
        NPC npc9 = new NPC(35, 17, ResourceManager.getParameter("SpriteNPC_mas09"), 48, 60, DIR_ABA, "npc9", "npc9_c");
        NPC npc10 = new NPC(5, 23, ResourceManager.getParameter("SpriteNPC_mas01"), 45, 57, DIR_ABA, "npc10", "npc10_c");
        NPC npc11 = new NPC(9, 23, ResourceManager.getParameter("SpriteNPC_mas14"), 42, 60, DIR_ABA, "npc11", "npc11_c");
        NPC npc12 = new NPC(13, 23, ResourceManager.getParameter("SpriteNPC_mas13"), 42, 60, DIR_ABA, "npc12", "npc12_c");
        NPC npc13 = new NPC(27, 23, ResourceManager.getParameter("SpriteNPC_mas12"), 42, 60, DIR_IZQ, "npc13", "npc13_c");

        arrayNPC.add(npc1);
        arrayNPC.add(npc2);
        arrayNPC.add(npc3);
        arrayNPC.add(npc4);
        arrayNPC.add(npc5);
        arrayNPC.add(npc6);
        arrayNPC.add(npc7);
        arrayNPC.add(npc8);
        arrayNPC.add(npc9);
        arrayNPC.add(npc10);
        arrayNPC.add(npc11);
        arrayNPC.add(npc12);
        arrayNPC.add(npc13);
        arrayNPC.add(julio);
        arrayNPC.add(monica);
        arrayNPC.add(quim);
        arrayNPC.add(nacho);
    }

    // Getters & Setters //
    public static void setNpcText(final String text) {
        npcText = text;
    }
}
TOP

Related Classes of estados.Aula

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.