package com.tacoid.pweek.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.tacoid.pweek.IGameService;
import com.tacoid.pweek.MusicPlayer;
import com.tacoid.pweek.Pweek;
import com.tacoid.pweek.ScoreManager;
import com.tacoid.pweek.SoundPlayer;
import com.tacoid.pweek.IGameService.LeaderboardType;
import com.tacoid.pweek.MusicPlayer.MusicType;
import com.tacoid.pweek.Pweek.ScreenOrientation;
import com.tacoid.pweek.ScoreManager.GameType;
import com.tacoid.pweek.SoundPlayer.SoundType;
import com.tacoid.pweek.actors.BackgroundActor;
import com.tacoid.pweek.actors.GooglePlayActor;
import com.tacoid.pweek.actors.MusicButtonActor;
import com.tacoid.pweek.actors.SoundButtonActor;
import com.tacoid.pweek.actors.SwingMenu;
import com.tacoid.tracking.TrackingManager;
public class MainMenuScreen implements Screen, InputProcessor {
private static final int VIRTUAL_WIDTH = 1280;
private static final int VIRTUAL_HEIGHT = 768;
private static MainMenuScreen instance = null;
private Stage stage;
private SwingMenu menu;
int i = 0;
private MainMenuScreen() {
//init();
}
private void addButton(Actor button, int x, int y) {
stage.addActor(button);
button.setX(x);
button.setY(y);
}
public void init() {
MusicPlayer.getInstance().setVolume(0.8f);
MusicPlayer.getInstance().playMusic(MusicType.MAIN, true);
stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(),
false);
stage.addActor(new BackgroundActor(ScreenOrientation.LANDSCAPE));
menu = new SwingMenu(ScreenOrientation.LANDSCAPE);
menu.initBegin("main");
{
/* VERUS BUTTON */
TextureRegion versusRegion = Pweek.getInstance().atlasPlank.findRegion("versus");
menu.addButton(new VersusButton(versusRegion, versusRegion));
/* SOLO BUTTON */
TextureRegion playRegion = Pweek.getInstance().atlasPlank.findRegion("solo");
menu.addButton(new SoloButton(playRegion, playRegion));
/* CHRONO BUTTON */
TextureRegion chronoRegion = Pweek.getInstance().atlasPlank.findRegion("chrono");
menu.addButton(new ChronoButton(chronoRegion, chronoRegion));
/* MULTIPLAYER BUTTON */
TextureRegion multiRegion = Pweek.getInstance().atlasPlank.findRegion("multi");
menu.addButton(new MultiButton(multiRegion, multiRegion));
}
menu.initEnd();
menu.initBegin("versus");
{
/* EASY BUTTON */
TextureRegion easyRegion = Pweek.getInstance().atlasPlank.findRegion("easy");
menu.addButton(new LevelButton(0, easyRegion, easyRegion));
/* MEDIUM BUTTON */
TextureRegion mediumRegion = Pweek.getInstance().atlasPlank.findRegion("medium");
menu.addButton(new LevelButton(1, mediumRegion, mediumRegion));
/* HARD BUTTON */
TextureRegion hardRegion = Pweek.getInstance().atlasPlank.findRegion("hard");
menu.addButton(new LevelButton(2, hardRegion, hardRegion));
/* VERY HARD BUTTON */
TextureRegion vhardRegion = Pweek.getInstance().atlasPlank.findRegion("veryhard");
menu.addButton(new LevelButton(3, vhardRegion, vhardRegion));
}
menu.initEnd();
menu.initBegin("multiplayer");
{
/* PLAY WITH FRIENDS BUTTON */
TextureRegion friendsRegion = Pweek.getInstance().atlasPlank.findRegion("easy");
menu.addButton(new FriendGameButton(friendsRegion, friendsRegion));
/* QUICK GAME BUTTON */
TextureRegion quickRegion = Pweek.getInstance().atlasPlank.findRegion("multi");
menu.addButton(new QuickGameButton(quickRegion, quickRegion));
}
menu.initEnd();
stage.addActor(menu);
addButton(MusicButtonActor.createMusicButton(Pweek.getInstance().atlasBouttons),VIRTUAL_WIDTH-90, VIRTUAL_HEIGHT-90);
addButton(SoundButtonActor.createSoundButton(Pweek.getInstance().atlasBouttons),VIRTUAL_WIDTH-180, VIRTUAL_HEIGHT-90);
GooglePlayActor googlePlayActor = new GooglePlayActor(Pweek.getInstance().getGameService(), LeaderboardType.ALL, Pweek.getInstance().atlasBouttons, Pweek.getInstance().atlasGoogle);
addButton(googlePlayActor, 10, VIRTUAL_HEIGHT-90);
menu.hideInstant();
menu.show("main");
stage.addActor(new PweekLogo());
}
static public MainMenuScreen getInstance()
{
if (instance == null) {
instance = new MainMenuScreen();
}
return instance;
}
@Override
public void dispose() {
Gdx.app.log("MainScreen", "paused");
}
@Override
public void hide() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void render(float arg0) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
stage.act(Gdx.graphics.getDeltaTime());
}
@Override
public void resize(int arg0, int arg1) {
stage.setViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, false);
stage.getCamera().position.set(VIRTUAL_WIDTH / 2, VIRTUAL_HEIGHT / 2, 0);
}
@Override
public void resume() {
show();
}
@Override
public void show() {
Pweek.getInstance().getHandler().setPortrait(false);
Pweek.getInstance().getHandler().showAds(true);
resize(0, 0);
Gdx.input.setInputProcessor(this);
}
private class PweekLogo extends Actor {
private Sprite sprite;
public PweekLogo() {
sprite = new Sprite( Pweek.getInstance().atlasPlank.findRegion("pweek"));
sprite.setPosition(VIRTUAL_WIDTH/2 - sprite.getWidth()/2, VIRTUAL_HEIGHT- sprite.getHeight()-70);
}
@Override
public void draw(SpriteBatch batch, float arg1) {
sprite.draw(batch);
}
@Override
public Actor hit(float arg0, float arg1, boolean touchable) {
// TODO Auto-generated method stub
return null;
}
}
private class SoloButton extends Button{
public SoloButton(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) {
GameSoloScreen.getInstance().init();
TrackingManager.getTracker().trackEvent("gameplay", "game_start", "solo", null);
Pweek.getInstance().setScreen(GameSoloScreen.getInstance());
}
});
}
}
private class VersusButton extends Button{
public VersusButton(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) {
menu.switchMenuAnimated("versus");
}
});
}
}
private class ChronoButton extends Button{
public ChronoButton(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) {
// TODO Auto-generated method stub
GameTimeAttackScreen.getInstance().init();
TrackingManager.getTracker().trackEvent("gameplay", "game_start", "chrono", null);
Pweek.getInstance().setScreen(GameTimeAttackScreen.getInstance());
}
});
}
}
private class MultiButton extends Button{
public MultiButton(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) {
menu.switchMenuAnimated("multiplayer");
//GameTimeAttackScreen.getInstance().init();
//TrackingManager.getTracker().trackEvent("gameplay", "game_start", "chrono", null);
//Pweek.getInstance().setScreen(GameTimeAttackScreen.getInstance());
}
});
}
}
private class QuickGameButton extends Button{
IGameService gs;
public QuickGameButton(TextureRegion regionUp, TextureRegion regionDown) {
super(new TextureRegionDrawable(regionUp), new TextureRegionDrawable(regionDown));
gs = Pweek.getInstance().getGameService();
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) {
gs.startQuickGame();
}
});
}
}
private class FriendGameButton extends Button{
IGameService gs;
public FriendGameButton(TextureRegion regionUp, TextureRegion regionDown) {
super(new TextureRegionDrawable(regionUp), new TextureRegionDrawable(regionDown));
gs = Pweek.getInstance().getGameService();
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) {
gs.showFriendSelector();
}
});
}
}
private class LevelButton extends Button{
private int level;
private Sprite redCross;
public LevelButton(final int level, TextureRegion regionUp, TextureRegion regionDown) {
super(new TextureRegionDrawable(regionUp), new TextureRegionDrawable(regionDown));
redCross = new Sprite(Pweek.getInstance().atlasPlank.findRegion("redcross"));
this.level = level;
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) {
if(ScoreManager.getInstance().isLevelUnlocked(GameType.VERSUS_IA, level)) {
GameVersusScreen.getInstance().setLevel(level);
GameVersusScreen.getInstance().init();
TrackingManager.getTracker().trackEvent("gameplay", "game_start", "versus_"+level, null);
Pweek.getInstance().getHandler().showAds(false);
Pweek.getInstance().setScreen(GameVersusScreen.getInstance());
menu.switchMenu("main");
}
}
});
}
@Override
public void draw(SpriteBatch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
if(!ScoreManager.getInstance().isLevelUnlocked(GameType.VERSUS_IA, level)) {
redCross.setX(this.getX() + 50);
redCross.setY(this.getY() + 30);
redCross.draw(batch);
}
}
}
@Override
public boolean keyDown(int key) {
switch (key) {
case Keys.BACK:
if(!menu.getCurrentMenu().equals("main")) {
menu.switchMenuAnimated("main");
} else {
TrackingManager.getTracker().trackEvent("UI", "button_click", "android_quit", null);
Gdx.app.exit();
}
}
return false;
}
@Override
public boolean keyTyped(char arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyUp(int arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean scrolled(int arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchDown(int x, int y, int pointer, int button) {
return stage.touchDown(x, y, pointer, button);
}
@Override
public boolean touchDragged(int arg0, int arg1, int arg2) {
return stage.touchDragged(arg0, arg1, arg2);
}
@Override
public boolean mouseMoved(int x, int y) {
return stage.mouseMoved(x, y);
}
@Override
public boolean touchUp(int x, int y, int pointer, int button) {
return stage.touchUp(x, y, pointer, button);
}
}