package com.arretadogames.pilot.screens;
import android.graphics.Color;
import aurelienribon.tweenengine.BaseTween;
import aurelienribon.tweenengine.Timeline;
import aurelienribon.tweenengine.Tween;
import aurelienribon.tweenengine.TweenAccessor;
import aurelienribon.tweenengine.TweenCallback;
import aurelienribon.tweenengine.TweenEquations;
import com.arretadogames.pilot.R;
import com.arretadogames.pilot.entities.AraraAzul;
import com.arretadogames.pilot.entities.LoboGuara;
import com.arretadogames.pilot.entities.MacacoPrego;
import com.arretadogames.pilot.entities.Player;
import com.arretadogames.pilot.entities.PlayerNumber;
import com.arretadogames.pilot.entities.TatuBola;
import com.arretadogames.pilot.game.Game;
import com.arretadogames.pilot.game.GameMode;
import com.arretadogames.pilot.game.GameState;
import com.arretadogames.pilot.loading.FontLoader;
import com.arretadogames.pilot.loading.FontLoader.FontTypeFace;
import com.arretadogames.pilot.loading.FontSpecification;
import com.arretadogames.pilot.render.opengl.GLCanvas;
import com.arretadogames.pilot.tournaments.TournamentManager;
import com.arretadogames.pilot.ui.AnimationManager;
import com.arretadogames.pilot.ui.GameButtonListener;
public class FinishRaceScreen extends GameScreen implements TweenAccessor<FinishRaceScreen>, GameButtonListener {
final FontSpecification titleFont = FontLoader.getInstance().getFont(FontTypeFace.ARIAN);
private final float GAME_WIDTH = getDimension(R.dimen.screen_width);
private final float GAME_HEIGHT = getDimension(R.dimen.screen_height);
private final float STAR_OFFSET = 72;
private final float STAR_HEIGHT = 334;
private final float STAR_WIDTH_POS_P1 = 116;
private final float STAR_WIDTH_POS_P2 = 407;
private int starId;
private int winnerProfile;
private int backgroundId;
private int starShadowId;
private int p1Score = 500;
private int p2Score = 750;
private int p1Victories = 0;
private int p2Victories = 0;
private float currentY = 480;
private int alphaBack = 0;
private boolean goOn = false;
public FinishRaceScreen() {
backgroundId = R.drawable.finishracebg;
starId = R.drawable.star_plain;
starShadowId = R.drawable.star_shadow;
}
public void setRaceWinner(PlayerNumber winner, Player player) {
if (player instanceof MacacoPrego) {
winnerProfile = R.drawable.macaco_profile;
} else if (player instanceof TatuBola) {
winnerProfile = R.drawable.tatu_profile;
} else if (player instanceof LoboGuara) {
winnerProfile = R.drawable.lobo_profile;
} else if (player instanceof AraraAzul) {
winnerProfile = R.drawable.arara_profile;
}
if (winner == PlayerNumber.ONE){
TournamentManager.getInstance().countWins(PlayerNumber.ONE);
} else {
TournamentManager.getInstance().countWins(PlayerNumber.TWO);
}
if (Game.getInstance().getGameMode() == GameMode.TOURNAMENT) {
p1Victories = TournamentManager.getInstance().getWins(PlayerNumber.ONE);
p2Victories = TournamentManager.getInstance().getWins(PlayerNumber.TWO);
}
}
@Override
public void render(GLCanvas canvas, float timeElapsed) {
canvas.saveState();
canvas.drawRect(0, 0, 800, 480, Color.argb(alphaBack, 0, 0, 0));
canvas.translate(0, currentY);
canvas.drawBitmap(backgroundId, 0, 0, GAME_WIDTH, GAME_HEIGHT, 0,
getDimension(R.dimen.main_menu_bg_extra_height));
canvas.drawBitmap(winnerProfile, 300, 133, 200, 200);
if (Game.getInstance().getGameMode() == GameMode.TOURNAMENT) {
drawPlayerStars(p1Victories, STAR_WIDTH_POS_P1, canvas);
drawPlayerStars(p2Victories, STAR_WIDTH_POS_P2, canvas);
}
drawScore(canvas);
canvas.restoreState();
}
public void disableGoOn() {
goOn = false;
}
private void drawScore(GLCanvas canvas) {
canvas.drawText("" + p1Score, 220f, 240f, titleFont, 1.2f, true, 0f);
canvas.drawText("" + p2Score, 570f, 240f, titleFont, 1.2f, true, 0f);
}
private void drawPlayerStars(int numVictories, float starWidthPos, GLCanvas canvas) {
int offset = 0;
float startPos = starWidthPos;
for (int i=0; i<4; i++) {
if (i < numVictories) {
canvas.drawBitmap(starId, startPos + offset, STAR_HEIGHT, 64, 64);
offset += STAR_OFFSET;
} else {
canvas.drawBitmap(starShadowId, startPos + offset, STAR_HEIGHT, 64, 64);
offset += STAR_OFFSET;
}
}
}
public void activate(){
Timeline.createSequence()
.push(Timeline.createParallel()
.push(Tween.to(this, 0, 1f).target(0)
.ease(TweenEquations.easeOutBounce))
.push(Tween.to(this, 1, 1f).target(100)))
.pushPause(1f)
.setCallback(new TweenCallback() {
@Override
public void onEvent(int arg0, BaseTween<?> arg1) {
goOn = true;
}
})
.start(AnimationManager.getInstance());
// .pushPause(1f)
// .push(Tween.to(this, 0, 1f).target(480)
// .ease(TweenEquations.easeOutBounce))
}
@Override
public void step(float timeElapsed) {
// TODO Auto-generated method stub
}
@Override
public void input(InputEventHandler event) {
if (Game.getInstance().getGameMode() == GameMode.TOURNAMENT) {
if (goOn && TournamentManager.getInstance().nextLevel())
Game.getInstance().goTo(GameState.LEVEL_RESTART);
} else {
if (goOn) {
TournamentManager.getInstance().resetTournamentData();
Game.getInstance().goTo(GameState.MAIN_MENU);
}
}
}
@Override
public void onPause() {
}
@Override
public void onClick(int buttonId) {
// All functions here are ASYNCHRONOUS
// switch (buttonId) {
// case CONTINUE_BT:
// hide();
// break;
// case RESTART_BT:
// Game.getInstance().goTo(GameState.LEVEL_RESTART);
// break;
// case QUIT_BT:
// if (Game.getInstance().getGameMode() == GameMode.TOURNAMENT)
// TournamentManager.getInstance().resetTournamentData();
//
// Game.getInstance().goTo(GameState.MAIN_MENU);
// break;
// default:
// break;
// }
}
@Override
public int getValues(FinishRaceScreen arg0, int type, float[] arg2) {
if (type == 0) {
arg2[0] = currentY;
} else if (type == 1) {
arg2[0] = alphaBack;
}
return 1;
}
@Override
public void setValues(FinishRaceScreen arg0, int type, float[] arg2) {
if (type == 0) {
currentY = arg2[0];
} else if (type == 1) {
alphaBack = (int) arg2[0];
}
}
}