package com.me.adventures.characters;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Animation;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.me.adventures.main.AdventuresOfManuel;
import com.me.adventures.main.Constant;
public class Fantasma extends PersonajeDelJuegoEnemigo {
public static final int ABAJO = 0;
public static final int IZQUIERDA = 1;
public static final int DERECHA = 2;
public static final int ARRIBA = 3;
public static final int SPRITE_QUIETO = 0;
private boolean fantasmaSeQuedaQuieto;
private boolean correr;
private int tiempoMovimientoCorrer;
//Atributos para pintar
private TextureRegion [][] fantasmaMatrizFrames;
private Animation fantasmaAnimationAbajo, fantasmaAnimationIzquierda, fantasmaAnimationDerecha, fantasmaAnimationArriba;
public Fantasma(AdventuresOfManuel adventures, Vector2 posicion, Manuel manuel, int direccion) {
super(adventures, posicion, manuel);
this.ataqueActivado = false;
this.direccion = direccion;
this.fantasmaSeQuedaQuieto = false;
this.correr = false;
this.tiempoMovimientoCorrer = 0;
this.tiempoParaMovimiento = 0;
Textura = adventures.getManager().get("Enemigos/TablaFantasma.png", Texture.class);
fantasmaMatrizFrames = TextureRegion.split(Textura, Constant.ANCHURA_PERSONAJE, Constant.ALTURA_PERSONAJE);
// Asignamos las animaciones de las direcciones del Fantasma
fantasmaAnimationAbajo = new Animation(0.05f, fantasmaMatrizFrames[ABAJO]);
fantasmaAnimationIzquierda = new Animation(0.05f, fantasmaMatrizFrames[IZQUIERDA]);
fantasmaAnimationDerecha= new Animation(0.05f, fantasmaMatrizFrames[DERECHA]);
fantasmaAnimationArriba = new Animation(0.05f, fantasmaMatrizFrames[ARRIBA]);
frameActual = fantasmaMatrizFrames[direccion][SPRITE_QUIETO];
}
public void activarAtaque() {
}
public void update() {
boolean colisionDerecha = colisiones.colisionDerechaObjeto(this) || colisiones.colisionDerechaEnemigo(this) || colisiones.colisionMovibleDerecha(this);
boolean colisionIzquierda = colisiones.colisionIzquierdaObjeto(this) || colisiones.colisionIzquierdaEnemigo(this) || colisiones.colisionMovibleIzquierda(this);
boolean colisionArriba = colisiones.colisionArribaObjeto(this) || colisiones.colisionArribaEnemigo(this) || colisiones.colisionMovibleArriba(this);
boolean colisionAbajo = colisiones.colisionAbajoObjeto(this) || colisiones.colisionAbajoEnemigo(this) || colisiones.colisionMovibleAbajo(this);
boolean colisionManuel = colisiones.colisionAbajoConManuel(this) || colisiones.colisionArribaConManuel(this) || colisiones.colisionDerechaConManuel(this) || colisiones.colisionIzquierdaConManuel(this);
if(colisionManuel || esBola){
fantasmaSeQuedaQuieto = true;
}
else{
fantasmaSeQuedaQuieto = false;
}
if(!fantasmaSeQuedaQuieto){
if(direccion == ARRIBA){
if(!colisionArriba && manuel.getPosicion().x == posicion.x && manuel.getPosicion().y > posicion.y){
correr = true;
moverArriba();
}
else if(colisionArriba){
correr = false;
direccion = DERECHA;
moverDerecha();
}
else{
correr = false;
moverArriba();
}
}
else if(direccion == ABAJO){
if(!colisionAbajo && manuel.getPosicion().x == posicion.x && manuel.getPosicion().y < posicion.y){
correr = true;
moverAbajo();
}
else if(colisionAbajo){
correr = false;
direccion = IZQUIERDA;
moverIzquierda();
}
else{
correr = false;
moverAbajo();
}
}
else if(direccion == DERECHA){
if(!colisionDerecha && manuel.getPosicion().y == posicion.y && manuel.getPosicion().x > posicion.x){
correr = true;
moverDerecha();
}
else if(colisionDerecha){
correr = false;
direccion = ABAJO;
moverAbajo();
}
else{
correr = false;
moverDerecha();
}
}
else{ //direccion == IZQUIERDA
if(!colisionIzquierda && manuel.getPosicion().y == posicion.y && manuel.getPosicion().x < posicion.x){
correr = true;
moverIzquierda();
}
else if(colisionIzquierda){
correr = false;
direccion = ARRIBA;
moverArriba();
}
else{
correr = false;
moverIzquierda();
}
}
}
else{
correr = false;
frameActual = fantasmaMatrizFrames[direccion][SPRITE_QUIETO];
}
if(correr == false && tiempoParaMovimiento > 0)
tiempoParaMovimiento--;
if(correr == true && tiempoMovimientoCorrer > 0)
tiempoMovimientoCorrer--;
super.update();
}
private void moverDerecha(){
if(correr == true){
if(tiempoMovimientoCorrer == 0){
posicion.x = (float) (posicion.x + Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationDerecha.getKeyFrame(stateTime, true);
tiempoMovimientoCorrer = Constant.TIEMPO_MOVIMIENTO_FANTASMA / 4;
}
}
else{
if(tiempoParaMovimiento == 0){
posicion.x = (float) (posicion.x + Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationDerecha.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_FANTASMA;
}
}
}
private void moverIzquierda(){
if(correr == true){
if(tiempoMovimientoCorrer == 0){
posicion.x = (float) (posicion.x - Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationIzquierda.getKeyFrame(stateTime, true);
tiempoMovimientoCorrer = Constant.TIEMPO_MOVIMIENTO_FANTASMA / 4;
}
}
else{
if(tiempoParaMovimiento == 0){
posicion.x = (float) (posicion.x - Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationIzquierda.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_FANTASMA;
}
}
}
private void moverArriba(){
if(correr == true){
if(tiempoMovimientoCorrer == 0){
posicion.y = (float) (posicion.y + Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationArriba.getKeyFrame(stateTime, true);
tiempoMovimientoCorrer = Constant.TIEMPO_MOVIMIENTO_FANTASMA / 4;
}
}
else{
if(tiempoParaMovimiento == 0){
posicion.y = (float) (posicion.y + Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationArriba.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_FANTASMA;
}
}
}
private void moverAbajo(){
if(correr == true){
if(tiempoMovimientoCorrer == 0){
posicion.y = (float) (posicion.y - Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationAbajo.getKeyFrame(stateTime, true);
tiempoMovimientoCorrer = Constant.TIEMPO_MOVIMIENTO_FANTASMA / 4;
}
}
else{
if(tiempoParaMovimiento == 0){
posicion.y = (float) (posicion.y - Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = fantasmaAnimationAbajo.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_FANTASMA;
}
}
}
@Override
public void draw(SpriteBatch batch) {
super.draw(batch);
}
// Getters and Setters ------------------------------------------------------------------------
}