package com.me.adventures.characters; import java.util.List; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.math.Rectangle; import com.me.adventures.main.AdventuresOfManuel; import com.me.adventures.main.Constant; public class Colision { private AdventuresOfManuel adventures; private Manuel manuel; private List<PersonajeDelJuegoEnemigo> personajes; private List<ObjetoDelJuego> objetos; private List<ObjetoDelJuego> objetosEnemigos; private List<Corazon> corazones; private List<PersonajeDelJuegoEnemigo> personajesMovibles; private Cofre cofre; private Salida salida; private Sound sonidoGameOver; public Colision(AdventuresOfManuel adventures, Manuel manuel, List<PersonajeDelJuegoEnemigo> personajes, List<ObjetoDelJuego> objetos, List<PersonajeDelJuegoEnemigo> personajesMovibles, List<Corazon> corazones, Cofre cofre, Salida salida, List<ObjetoDelJuego> objetosEnemigos) { this.adventures = adventures; this.manuel = manuel; this.personajes = personajes; this.objetos = objetos; this.personajesMovibles = personajesMovibles; this.corazones = corazones; this.cofre = cofre; this.salida = salida; this.objetosEnemigos = objetosEnemigos; sonidoGameOver = adventures.getManager().get("Musica/Perder.mp3", Sound.class); } private boolean colisiona(Rectangle a, Rectangle b) { return a.overlaps(b); } private boolean colisionObjeto(Rectangle auxiliar, List<ObjetoDelJuego> ob) { boolean ningunaColision = true; for(int i = 0; i < ob.size() && ningunaColision; i++) { if(colisiona(auxiliar, ob.get(i).getBordes())){ ningunaColision = false; } } return !ningunaColision; } public boolean colisionDerechaObjeto(PersonajeDelJuego personaje) { if(salida.salidaAbierta() == true && comprobarSalida()) return false; Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x + Constant.SPEED); return colisionObjeto(auxiliar,objetos); } public boolean colisionIzquierdaObjeto(PersonajeDelJuego personaje) { if(salida.salidaAbierta() == true && comprobarSalida()) return false; Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x - Constant.SPEED); return colisionObjeto(auxiliar,objetos); } public boolean colisionArribaObjeto(PersonajeDelJuego personaje) { if(salida.salidaAbierta() == true && comprobarSalida()) return false; Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y +Constant.SPEED); return colisionObjeto(auxiliar,objetos); } public boolean colisionAbajoObjeto(PersonajeDelJuego personaje) { if(salida.salidaAbierta() == true && comprobarSalida()) return false; Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y -Constant.SPEED); return colisionObjeto(auxiliar,objetos); } private boolean comprobarSalida(){ if(salida.getTipo() == Constant.PUERTA){ if((salida.getBordes().x + 58) == manuel.getBordes().x && salida.getBordes().y == (manuel.getBordes().y + Constant.ALTURA_PERSONAJE)) return true; else return false; } return comprobarCoordenada(salida, manuel); } public boolean colisionCorazon(PersonajeDelJuego personaje) { boolean colisiones = false; for(int i = 0; i < corazones.size() && !colisiones; i++){ Corazon c = corazones.get(i); if(c.getEstado() == true){ //el coraz�n no se ha cogido colisiones = comprobarCoordenada(c, personaje); if(colisiones == true){ c.setEstado(); manuel.obtenerCorazon(); manuel.obtenerProyectil(c.getProyectilesOtorga()); if(cofre.getCorazonesNecesarios() == manuel.getCorazonesObtenidos()){ cofre.abrirCofre(); for(PersonajeDelJuego p : personajes){ p.activarAtaque(); } } } } } return colisiones; } private boolean comprobarCoordenada(ObjetoDelJuego objeto, PersonajeDelJuego personaje){ if(personaje.getBordes().x == objeto.getBordes().x && personaje.getBordes().y == objeto.getBordes().y) return true; return false; } public void colisionCofre(PersonajeDelJuego personaje){ if(!salida.salidaAbierta() && cofre.getCorazonesNecesarios() == manuel.getCorazonesObtenidos() && comprobarCoordenada(cofre, personaje) == true){ cofre.cogerGema(); salida.abrirSalida(); objetos.remove(salida.coordenadaPared()); } } private boolean colisionEnemigo(Rectangle auxiliar, PersonajeDelJuego personaje) { boolean ningunaColision = true; for(int i = 0; i < personajes.size() && ningunaColision; i++) { if(colisiona(auxiliar, personajes.get(i).getBordes()) && personaje != personajes.get(i)){ if(personajes.get(i).estaEnBola()) { personajesMovibles.add(personajes.get(i)); personajes.remove(i); } else ningunaColision = false; } } return !ningunaColision; } public boolean colisionDerechaEnemigo(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x + Constant.SPEED); return colisionEnemigo(auxiliar, personaje); } public boolean colisionIzquierdaEnemigo(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x - Constant.SPEED); return colisionEnemigo(auxiliar, personaje); } public boolean colisionArribaEnemigo(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y + Constant.SPEED); return colisionEnemigo(auxiliar, personaje); } public boolean colisionAbajoEnemigo(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y - Constant.SPEED); return colisionEnemigo(auxiliar, personaje); } //---------------------------- public boolean colisionObjetoEnemigoMovible(PersonajeDelJuego personaje) { return colisionObjeto(personaje.getBordes(),objetos) || colisionEnemigo(personaje.getBordes(), personaje) || colisionEnemigoMovible(personaje.getBordes()); } private boolean colisionObjetoEnemigo(Rectangle auxiliar) { return colisionObjeto(auxiliar,objetos) /*|| colisionEnemigo(auxiliar)*/; } public boolean colisionObjetoEnemigoArriba(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y + Constant.SPEED); return colisionObjetoEnemigo(auxiliar); } public boolean colisionObjetoEnemigoAbajo(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y - Constant.SPEED); return colisionObjetoEnemigo(auxiliar); } public boolean colisionObjetoEnemigoDerecha(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x + Constant.SPEED); return colisionObjetoEnemigo(auxiliar); } public boolean colisionObjetoEnemigoIzquierda(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x - Constant.SPEED); return colisionObjetoEnemigo(auxiliar); } public boolean colisionDisparoObjeto(Proyectil disparo) { return colisionObjeto(disparo.getBordes(),objetos); } public boolean colisionDisparoEnemigo(Proyectil disparo) { boolean ningunaColision = true; for(int i = 0; i < personajes.size() && ningunaColision; i++) { if(colisiona(disparo.getBordes(), personajes.get(i).getBordes())) { personajes.get(i).convertirEnBola(); ponerEnHuevo(i); ningunaColision = false; } } for(int i = 0; i < personajesMovibles.size() && ningunaColision; i++) { if(colisiona(disparo.getBordes(), personajesMovibles.get(i).getBordes()) && personajesMovibles.get(i).estaEnBola()) { personajesMovibles.get(i).desaparecer(); finHuevo(personajesMovibles.get(i)); ningunaColision = false; } } return !ningunaColision; } // Para las colisiones de los disparos de los enemigsos public boolean colisionDisparoAManuel(Proyectil disparo) { boolean ningunaColision = true; if(colisiona(disparo.getBordes(), manuel.getBordes())) { if(adventures.isSonidoActivado()) sonidoGameOver.play(); adventures.gameOver(); ningunaColision = false; } return !ningunaColision; } public boolean colisionDisparoEnemigoObjeto(Proyectil disparo) { return colisionObjeto(disparo.getBordes(),objetosEnemigos); } public boolean colisionDisparoEnemigoEnemigoMovible(Proyectil disparo) { return colisionMovible(disparo.getBordes()); } //..... public boolean colisionEnemigoMovible(PersonajeDelJuego personaje) { boolean ningunaColision = true; for(int i = 0; i < personajesMovibles.size() && ningunaColision; i++) { if(colisiona(personaje.getBordes(), personajesMovibles.get(i).getBordes())){ ningunaColision = false; } } return !ningunaColision; } public boolean colisionEnemigoMovible(Rectangle auxiliar) { boolean ningunaColision = true; for(int i = 0; i < personajesMovibles.size() && ningunaColision; i++) { if(colisiona(auxiliar, personajesMovibles.get(i).getBordes())){ ningunaColision = false; } } return !ningunaColision; } public void finHuevo(PersonajeDelJuego personaje) { int i = personajesMovibles.indexOf(personaje); personajes.add(personajesMovibles.get(i)); personajesMovibles.remove(i); } private void ponerEnHuevo(int i) { personajesMovibles.add(personajes.get(i)); personajes.remove(i); } public boolean colisionMovible(Rectangle auxiliar, PersonajeDelJuego personaje) { boolean ningunaColision = true; for(int i = 0; i < personajesMovibles.size() && ningunaColision; i++) { if(colisiona(auxiliar, personajesMovibles.get(i).getBordes()) && personaje != personajesMovibles.get(i)){ ningunaColision = false; } } return !ningunaColision; } public boolean colisionMovible(Rectangle auxiliar) { boolean ningunaColision = true; for(int i = 0; i < personajesMovibles.size() && ningunaColision; i++) { if(colisiona(auxiliar, personajesMovibles.get(i).getBordes())){ ningunaColision = false; } } return !ningunaColision; } public boolean colisionMovibleArriba(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y + Constant.SPEED); return colisionMovible(auxiliar, personaje); } public boolean colisionMovibleAbajo(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y - Constant.SPEED); return colisionMovible(auxiliar, personaje); } public boolean colisionMovibleDerecha(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x + Constant.SPEED); return colisionMovible(auxiliar, personaje); } public boolean colisionMovibleIzquierda(PersonajeDelJuego personaje) { Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x - Constant.SPEED); return colisionMovible(auxiliar, personaje); } public boolean colisionAbajoConManuel(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y - Constant.SPEED); return colisiona(auxiliar, manuel.getBordes()); } public boolean colisionArribaConManuel(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y + Constant.SPEED); return colisiona(auxiliar, manuel.getBordes()); } public boolean colisionDerechaConManuel(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x + Constant.SPEED); return colisiona(auxiliar, manuel.getBordes()); } public boolean colisionIzquierdaConManuel(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x - Constant.SPEED); return colisiona(auxiliar, manuel.getBordes()); } public boolean colisionMovibleCorazon(Rectangle auxiliar) { boolean ningunaColision = true; for(int i = 0; i < corazones.size() && ningunaColision; i++) { if(colisiona(auxiliar, corazones.get(i).getBordes())){ ningunaColision = false; } } return !ningunaColision; } public boolean colisionAbajoMovibleCorazon(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y - Constant.SPEED); return colisionMovibleCorazon(auxiliar); } public boolean colisionArribaMovibleCorazon(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.y = (float) (auxiliar.y + Constant.SPEED); return colisionMovibleCorazon(auxiliar); } public boolean colisionDerechaMovibleCorazon(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x + Constant.SPEED); return colisionMovibleCorazon(auxiliar); } public boolean colisionIzquierdaMovibleCorazon(PersonajeDelJuego personaje){ Rectangle auxiliar = new Rectangle(personaje.getBordes().x, personaje.getBordes().y, personaje.getBordes().width, personaje.getBordes().height); auxiliar.x = (float) (auxiliar.x - Constant.SPEED); return colisionMovibleCorazon(auxiliar); } }