package com.tacoid.pweek.actors;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.NinePatch;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.tacoid.pweek.I18nManager;
import com.tacoid.pweek.Pweek;
import com.tacoid.pweek.ScoreManager;
import com.tacoid.pweek.SoundPlayer;
import com.tacoid.pweek.Pweek.ScreenOrientation;
import com.tacoid.pweek.ScoreManager.GameType;
import com.tacoid.pweek.SoundPlayer.SoundType;
import com.tacoid.pweek.screens.GameScreen;
import com.tacoid.pweek.screens.GameVersusScreen;
import com.tacoid.pweek.screens.MainMenuScreen;
import com.tacoid.tracking.TrackingManager;
public class GameOverActor extends Group {
static public enum GameOverType {
WIN,
LOSE,
GAMEOVER
};
private class QuitButton extends Button {
public QuitButton(TextureRegion regionUp, TextureRegion regionDown) {
super(new TextureRegionDrawable(regionUp), new TextureRegionDrawable(regionDown));
addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
SoundPlayer.getInstance().playSound(SoundType.TOUCH_MENU, 0.5f, true);
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y,
int pointer, int button) {
newUnlock = false;
Pweek.getInstance().setScreen(MainMenuScreen.getInstance());
}
});
}
}
private class ReplayButton extends Button {
public ReplayButton(TextureRegion regionUp, TextureRegion regionDown) {
super(new TextureRegionDrawable(regionUp), new TextureRegionDrawable(regionDown));
addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
SoundPlayer.getInstance().playSound(SoundType.TOUCH_MENU, 0.5f, true);
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y,
int pointer, int button) {
gameScreen.init();
newUnlock = false;
Pweek.getInstance().getHandler().showAds(false);
hide();
}
});
}
}
private class NextLevelButton extends Button {
public NextLevelButton(TextureRegion regionUp, TextureRegion regionDown) {
super(new TextureRegionDrawable(regionUp), new TextureRegionDrawable(regionDown));
addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
SoundPlayer.getInstance().playSound(SoundType.TOUCH_MENU, 0.5f, true);
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y,
int pointer, int button) {
((GameVersusScreen)gameScreen).setLevel(gameScreen.getLevel()+1);
gameScreen.init();
newUnlock = false;
Pweek.getInstance().getHandler().showAds(false);
hide();
}
});
}
}
private Sprite winSprite;
private Sprite loseSprite;
private Sprite gameOverSprite;
private GameScreen gameScreen;
private SwingMenu menu;
private GameOverType type;
private int highScore = 0;
private boolean newHighScore = false;
private boolean newUnlock = false;
private BitmapFont font;
private I18nManager i18n;
private NinePatch scorePanelNinePatch;
public GameOverActor(TextureAtlas atlasPlank, TextureAtlas atlasPanels, TextureAtlas atlasButtons, BitmapFont font, GameScreen gs, float x, float y) {
gameScreen = gs;
i18n = I18nManager.getInstance();
TextureRegion nextRegion = null;
TextureRegion quitterRegion = atlasPlank.findRegion("quitter");
TextureRegion rejouerRegion = atlasPlank.findRegion("rejouer");
if (gameScreen.getGameType() == GameType.VERSUS_IA) {
nextRegion = atlasPlank.findRegion("suivant");
winSprite = new Sprite(atlasPlank.findRegion("gagne"));
loseSprite = new Sprite(atlasPlank.findRegion("perdu"));
}
gameOverSprite = new Sprite(atlasPlank.findRegion("gameover"));
scorePanelNinePatch = new NinePatch(atlasButtons.findRegion("frame-ninepatch"), 20, 20, 20, 20);
menu = new SwingMenu(gs.getOrientation());
menu.initBegin("gameover-simple");
menu.addButton(new ReplayButton(rejouerRegion, rejouerRegion));
menu.addButton(new QuitButton(quitterRegion, quitterRegion));
menu.initEnd();
if (gameScreen.getGameType() == GameType.VERSUS_IA) {
menu.initBegin("gameover-next");
menu.addButton(new NextLevelButton(nextRegion, nextRegion));
menu.addButton(new ReplayButton(rejouerRegion, rejouerRegion));
menu.addButton(new QuitButton(quitterRegion, quitterRegion));
menu.initEnd();
}
this.addActor(menu);
if (gameScreen.getGameType() == GameType.VERSUS_IA) {
winSprite.setPosition(x-winSprite.getWidth()/2, y-winSprite.getHeight()/2);
loseSprite.setPosition(x-loseSprite.getWidth()/2, y-loseSprite.getHeight()/2);
}
gameOverSprite.setPosition(x-gameOverSprite.getWidth()/2, y-gameOverSprite.getHeight()/2);
this.type = GameOverType.GAMEOVER;
//this.addActor(shareButton);
this.font = font;
font.setScale(0.8f);
this.hide();
this.setVisible(true);
}
public void show(GameOverType type) {
boolean hasNext = false;
if(gameScreen.getGameType() == GameType.VERSUS_IA && type == GameOverType.WIN) {
if(gameScreen.getLevel()<3 && !ScoreManager.getInstance().isLevelUnlocked(GameType.VERSUS_IA, gameScreen.getLevel()+1)) {
ScoreManager.getInstance().unlockLevel(GameType.VERSUS_IA, gameScreen.getLevel()+1);
newUnlock = true;
}
if(gameScreen.getLevel()<3) {
hasNext = true;
}
}
if(hasNext) {
menu.show("gameover-next");
} else {
menu.show("gameover-simple");
}
this.type = type;
this.setVisible(true);
this.highScore = ScoreManager.getInstance().getScore(gameScreen.getGameType());
this.newHighScore = false;
if(highScore < gameScreen.getScore() && gameScreen.getGameType() != GameType.VERSUS_IA) {
this.newHighScore = true;
}
ScoreManager.getInstance().setScore(Pweek.getInstance().getGameService(), gameScreen.getGameType(), gameScreen.getScore());
Pweek.getInstance().getHandler().showAds(true);
/* TRACKING */
if(gameScreen.getGameType() == GameType.VERSUS_IA) {
TrackingManager.getTracker().trackEvent("gameplay", "game_over", gameScreen.getGameType().toString()+"_"+gameScreen.getLevel()+"_"+type.toString(), (long) gameScreen.getElapsedTime());
} else {
TrackingManager.getTracker().trackEvent("gameplay", "game_over", gameScreen.getGameType().toString()+"_"+type.toString(), (long) gameScreen.getElapsedTime());
}
}
public void hide() {
menu.hideInstant();
this.setVisible(false);
}
public void draw(SpriteBatch batch, float arg1) {
float x=0,y=0;
String message;
super.draw(batch,arg1);
if(gameScreen.getOrientation() == ScreenOrientation.LANDSCAPE) {
x = 640;
y = 500;
} else {
x = 384;
y = 558;
}
if (gameScreen.getGameType() != GameType.VERSUS_IA) {
font.setScale(0.8f);
font.setColor(1f, 1f, 1f, 1f);
message = i18n.getString("score") + String.valueOf(gameScreen.getScore());
scorePanelNinePatch.draw(batch, x - 150, y - (40 + 2 * font.getBounds(message).height), 300, font.getBounds(message).height * 2 + 60);
font.draw(batch, message, x-font.getBounds(message).width/2,y);
if(newHighScore) {
message = i18n.getString("nouveau_record");
font.draw(batch, i18n.getString("nouveau_record"), x-font.getBounds(message).width/2, y - 30f);
}
else {
message = i18n.getString("record") + String.valueOf(highScore);
font.draw(batch, i18n.getString("record") + String.valueOf(highScore), x-font.getBounds(message).width/2,y-30f);
}
} else if(newUnlock) {
String levelname;
font.setScale(0.8f);
font.setColor(1f, 1f, 1f, 1f);
switch(gameScreen.getLevel()+1) {
case 1:
levelname=i18n.getString("moyen");
break;
case 2:
levelname=i18n.getString("difficile");
break;
case 3:
levelname=i18n.getString("tres_difficile");
break;
default:
levelname="Invalid level";
}
message = i18n.getString("niveau") + " " + levelname + " " + i18n.getString("deverrouille");
scorePanelNinePatch.draw(batch, x-font.getBounds(message).width/2 - 40, y - (20 + font.getBounds(message).height), font.getBounds(message).width + 80, font.getBounds(message).height + 40);
font.draw(batch, message, x-font.getBounds(message).width/2 ,y);
}
switch(type) {
case GAMEOVER:
gameOverSprite.draw(batch);
break;
case LOSE:
loseSprite.draw(batch);
break;
case WIN:
winSprite.draw(batch);
break;
}
}
}