package com.mony.crazydriver.managers;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureWrap;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.TimeUtils;
import com.mony.crazydriver.CrazyDriver;
import com.mony.crazydriver.characters.Enemy;
import com.mony.crazydriver.characters.Car;
import com.mony.crazydriver.characters.Friend;
import com.mony.crazydriver.characters.Objetos;
import com.mony.crazydriver.screens.EndScreen;
import com.mony.crazydriver.screens.GameOverScreen;
public class SpriteManager {
//actualiza la logica del juego (choques, mover las cosas...)
CrazyDriver game;
Car car;
Sprite sprite;
Array<Enemy> enemies;
Array<Friend> friends;
Array<Objetos> objetos;
private Texture texture;
float scrollTimer=0;
long ultimaPersona;
long ultimoObjeto;
LevelManager levelManager;
public SpriteManager(CrazyDriver game){
//poner donde empieza el coche en 150 x y en 0 y
car = new Car(ResourceManager.getAtlas("imagenes")
.findRegion("car_up"), 150, 0);
//instancia los arrays de amigos y enemigos
enemies=new Array<Enemy>();
friends=new Array<Friend>();
objetos=new Array<Objetos>();
//esto es para que el fondo de mueva
texture = new Texture(Gdx.files.internal("suelo/tunnel_road.jpg"));
texture.setWrap(TextureWrap.Repeat,TextureWrap.Repeat);
sprite = new Sprite(texture, 0, 0, 512, 512);
//genero aleatoriamente peatones
//generarPersonas();
generarObjetos();
this.game = game;
}
public void setLevelManager(LevelManager levelManager){
this.levelManager=levelManager;
}
public void finishLevel() {
enemies.clear();
friends.clear();
}
public void render(SpriteBatch batch){
Gdx.gl.glClearColor(0, 0, 0, 1);
//Limpio la pantalla en el bucle render todo el rato.
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(sprite,0,0);
//tengo que multiplicar x 0.2f para que vaya mas despacio
scrollTimer+=Gdx.graphics.getDeltaTime()*0.2f;
if(scrollTimer>1.0f)
scrollTimer = 0.0f;
sprite.setV(scrollTimer);
sprite.setV2(scrollTimer-1);
car.render(batch);
for (Enemy enemy : enemies) {
enemy.render(batch);
}
for (Friend friend : friends) {
friend.render(batch);
}
for (Objetos objeto : objetos) {
objeto.render(batch);
}
batch.end();
}
public void update(float dt){
handleInput(dt);
if(car.getScore()==5 && levelManager.getCurrentLevel()==1){
car.setScore(0);
levelManager.currentLevel=2;
finishLevel();
levelManager.loadNextLevel();
}
if(car.getScore()==10 && levelManager.getCurrentLevel()==2){
game.setScreen(new EndScreen(game));
}
car.update(dt);
for (Friend friend : friends) {
friend.update(dt);
}
for(Enemy enemy:enemies){
enemy.update(dt);
}
for (Objetos objeto : objetos) {
objeto.update(dt);
}
checkCollisions(dt);
if (TimeUtils.nanoTime() - ultimaPersona > 2099000000){
generarPersonas();
}
System.out.println(car.getSpeed());
}
private void handleInput(float dt){
if (Gdx.input.isKeyPressed(Keys.LEFT)) {
car.state = Car.State.LEFT;
car.move(new Vector2(-dt, 0));
}
else if (Gdx.input.isKeyPressed(Keys.RIGHT)) {
car.state = Car.State.RIGHT;
car.move(new Vector2(dt, 0));
}
else if (Gdx.input.isKeyPressed(Keys.UP)) {
car.state = Car.State.UP;
car.move(new Vector2(0, dt));
}
else if (Gdx.input.isKeyPressed(Keys.DOWN)) {
car.state = Car.State.DOWN;
car.move(new Vector2(0, -dt));
}
else
car.state = Car.State.IDLE;
}
private void checkCollisions(float dt){
//Cuando un coche choca con un peat�n
Enemy enemy = null;
Friend friend=null;
Objetos objeto=null;
for (int i = enemies.size-1; i >= 0; i--) {
enemy = enemies.get(i);
for (int j = friends.size-1; j >= 0; j--) {
friend=friends.get(j);
if(enemy.rect.overlaps(friend.rect)){
friends.removeIndex(j);
if (game.configurationManager.isSoundEnabled()){
ResourceManager.getSound("atropellar").play();
}
}
}
}
//Cuando un coche choca con un monstruo rosita
for (int i = enemies.size-1; i >= 0; i--) {
enemy = enemies.get(i);
for (int j = objetos.size-1; j >= 0; j--) {
objeto=objetos.get(j);
if(enemy.rect.overlaps(objeto.rect)){
objetos.removeIndex(j);
if(car.getSpeed()>150){
generarObjetos();
}
}
}
}
//cuando mi coche choca con un enemigo coche
for (Enemy enemy1 : enemies) {
if(car.rect.overlaps(enemy1.rect)){
if (game.configurationManager.isSoundEnabled()){
ResourceManager.getSound("shit").play();
}
game.setScreen(new GameOverScreen(game));
}
}
//cuando recojo personas
for (int i = friends.size-1; i >=0; i--) {
friend=friends.get(i);
if(car.rect.overlaps(friend.rect)){
if (game.configurationManager.isSoundEnabled()){
ResourceManager.getSound("ty").play();
}
car.addScore(1);
friends.removeIndex(i);
}
}
//si cojo un mostruo rosa me quita 50 de velocidad en el coche
for (int i = objetos.size-1; i >= 0; i--) {
objeto=objetos.get(i);
if(car.rect.overlaps(objeto.rect)){
car.setSpeed(car.getSpeed()-50);
objetos.removeIndex(i);
if(car.getSpeed()>150){
generarObjetos();
}
}
}
}
public void generarPersonas(){
int x = MathUtils.random(0, 512 - 32);
int y = MathUtils.random(0, 512-55);
Friend friend = new Friend(ResourceManager.getAnimation("woman_andando"), x, y,50f);
friends.add(friend);
ultimaPersona = TimeUtils.nanoTime();
}
public void generarObjetos(){
int x = MathUtils.random(0, 500-16);
int y = MathUtils.random(0, 500-16);
Objetos objeto = new Objetos(ResourceManager.getAnimation("enemy_pink"), x, y,0f);
objetos.add(objeto);
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
}