package com.me.missingwords.screens;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.utils.Timer;
import com.badlogic.gdx.utils.Timer.Task;
import com.me.missingwords.MissingWords;
import com.me.missingwords.actors.Dice;
import com.me.missingwords.actors.RollsLeft;
import com.me.missingwords.actors.World;
import com.me.missingwords.buttons.ContinueButton;
import com.me.missingwords.buttons.MoveButton;
import com.me.missingwords.buttons.RollDiceButton;
import com.me.missingwords.buttons.WaitButton;
import com.me.missingwords.listeners.ContinueMiniListener;
import com.me.missingwords.listeners.MoveListener;
import com.me.missingwords.listeners.RollListener;
import com.me.missingwords.listeners.WaitListener;
/**
*
* Muestra la pantalla del minijuego.
*
*/
public class MiniGameScreen extends BaseScreen {
private World world;
private RollDiceButton rollButton;
private MoveButton moveButton;
private WaitButton waitButton;
private ContinueButton continueButton;
private Dice dice;
private Timer tRoll;
private RollsLeft rollsLeft;
public MiniGameScreen(MissingWords missingWords) {
super(missingWords);
/* Creamos el temporizador */
tRoll = new Timer();
/* Creamos el tablero de juego */
world = new World(missingWords);
/* Creamos el dado */
dice = new Dice(missingWords);
stage.addActor(dice);
/* Creamos los botones de lanzar, mover, esperar y continuar */
rollButton = new RollDiceButton(missingWords);
rollButton.addListener(new RollListener(missingWords));
stage.addActor(rollButton);
moveButton = new MoveButton(missingWords);
moveButton.addListener(new MoveListener(missingWords));
stage.addActor(moveButton);
waitButton = new WaitButton(missingWords);
waitButton.addListener(new WaitListener(missingWords));
waitButton.setVisible(false);
stage.addActor(waitButton);
continueButton = new ContinueButton(missingWords);
continueButton.addListener(new ContinueMiniListener(missingWords));
continueButton.setVisible(false);
stage.addActor(continueButton);
/* Creamos la etiqueta de tiradas restantes */
rollsLeft = new RollsLeft(missingWords);
stage.addActor(rollsLeft);
}
@Override
public void render(float delta) {
super.render(delta);
world.getRenderer().render(); // renderizamos el tablero
stage.act();
stage.draw();
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
@Override
public void show() {
super.show();
dice.drawDice = false; // Ocultamos el dado
moveButton.setMoved(false); // No se ha movido ninguna vez
/* Ocultamos los botones de esperar y continuar */
waitButton.hide();
continueButton.hide();
if (missingWords.isSinglePlayer()) { // SINGLEPLAYER
rollButton.show();
moveButton.setVisible(true);
moveButton.setTouchable(Touchable.disabled);
rollsLeft.setRolls(missingWords.getGameScreen().getHuman().getRolls());
}
else { // PLAYER VS CPU
if (missingWords.getGameScreen().getHuman().isMyTurn()) { // Turno jugador
rollButton.show();
moveButton.setVisible(true);
moveButton.setTouchable(Touchable.disabled);
rollsLeft.setRolls(missingWords.getGameScreen().getHuman().getRolls());
}
else { // Turno npc
rollButton.hide();
moveButton.hide();
rollsLeft.setRolls(missingWords.getGameScreen().getNpc().getRolls());
tRoll.scheduleTask(new Task() {
@Override
public void run() {
dice.roll();
rollsLeft.decreaseRolls();
if (rollsLeft.getRolls() == 0) // si no quedan tiradas
rollsLeft.setRolls(-1); // se establece condici�n de parada
world.movePlayer(dice.getResult(), false);
}
}, 1, 2, rollsLeft.getRolls() - 1);
}
}
}
@Override
public void hide() {
// TODO Auto-generated method stub
super.hide();
}
@Override
public void pause() {
// TODO Auto-generated method stub
super.pause();
}
@Override
public void resume() {
// TODO Auto-generated method stub
super.resume();
}
@Override
public void dispose() {
world.dispose();
stage.dispose();
}
/* -------------- Getters and Setters -------------- */
public RollDiceButton getRollButton() {
return rollButton;
}
public MoveButton getMoveButton() {
return moveButton;
}
public WaitButton getWaitButton() {
return waitButton;
}
public ContinueButton getContinueButton() {
return continueButton;
}
public World getWorld() {
return world;
}
public Dice getDice() {
return dice;
}
public RollsLeft getRollsLeft() {
return rollsLeft;
}
public Timer gettRoll() {
return tRoll;
}
}