package com.me.invaders.charapters;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
public class Alien {
public final static int IZQUIERDA = 0;
public final static int DERECHA = 1;
private final float DES_SPEED = 20; // Velocidad de descenso del alien.
private Texture texturaAlien;
private Vector2 posicion;
private float anchura, altura;
private Rectangle bordes;
private int movimiento;
private float margenIzquierdo; // Es el margen izquierdo que no puede pasar el alien.
private float margenDerecho; // Es el margen derecho que no puede pasar el alien.
private float velocidad; // Velocidad con la que se mueven.
private int contadorDeBajadas; // Contador que cuanto cada bajada de los aliens
public Alien(Texture texturaAlien, Vector2 posicion, float margenIzquierdo, float margenDerecho, float velocidad) {
this.texturaAlien = texturaAlien;
this.posicion = posicion;
this.anchura = texturaAlien.getWidth();
this.altura = texturaAlien.getHeight();
bordes = new Rectangle(posicion.x, posicion.y, anchura, altura);
movimiento = DERECHA;
this.margenIzquierdo = margenIzquierdo; // Es el margen izquierdo que no puede pasar el alien.
this.margenDerecho = margenDerecho; // Es el margen derecho que no puede pasar el alien.
this.velocidad = velocidad;
contadorDeBajadas = 0;
}
public void draw(SpriteBatch batch) {
batch.draw(texturaAlien, posicion.x, posicion.y, anchura, altura);
}
public void update() {
if(movimiento == DERECHA) {
posicion.x = posicion.x + velocidad; // Avanza a la izquierda.
if(posicion.x + anchura > margenDerecho) { // Si el alien esta en el margen derecho.
movimiento = IZQUIERDA;
posicion.y = posicion.y - DES_SPEED; // Descender
contadorDeBajadas += 1; // contaqmos la bajada
//SPEED = SPEED * 1.1f; // Aumentamos la velocidad.
}
}
if(movimiento == IZQUIERDA) {
posicion.x = posicion.x - velocidad; // Avanza a la derecha.
if(posicion.x < margenIzquierdo) { // Si el alien esta en el margen izquierdo.
movimiento = DERECHA;
posicion.y = posicion.y - DES_SPEED; // Descender
contadorDeBajadas += 1; // contaqmos la bajada
//SPEED = SPEED * 1.1f; // Aumentamos la velocidad.
}
}
// Actualizamos los bordes (la anchura y altura ya se definen en el constructor de Entidad)
bordes.x = posicion.x;
bordes.y = posicion.y;
}
public boolean Muerto(Shot disparo) {
return colisiona(bordes, disparo.getBordes());
}
private boolean colisiona(Rectangle a, Rectangle b) {
return a.overlaps(b); // la funcion overlaps nos devuelve verdadero si dos rectangulos se solapan.
}
// Getters -----------------------------------
public Vector2 getPosicion() {
return posicion;
}
public int getContadorDeBajadas() {
return contadorDeBajadas;
}
public float getAnchura() {
return anchura;
}
public float getAltura() {
return altura;
}
public Rectangle getBordes() {
return bordes;
}
}