package com.touchspin.td;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Peripheral;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
/* ======================================================================================
* File: ScreenOptions.java
* Authors: Brian Adams - b.adams5736@edmail.edcc.edu
* Russell Brendel - russell.brendel.2925@edmail.edcc.edu
* Damian Forrester - dforrester777@gmail.com
* Wendi Tang - w.tang2404@myedmail.edcc.edu
*
* Organization: Edmonds Community College
* Term: Spring 2014
* Class: CS 185 - Game Project Developement
* Instructor: Tim Hunt - thunt@edcc.edu
*
* Project: Ollie
* --------------------------------------------------------------------------------------
*
* Shows the options screen. There are 5 buttons on this screen, but only 4 may be shown
* at a time. When button 5 is shown, buttons 1, 2, 3 are not shown.
*
* ======================================================================================
*/
public class ScreenOptions extends GameMenu {
String levelReturn;
Screen previousScreen;
char menuLevel;
MainGame saved;
/**----------------------------------------------------------------------------------
* Constructor
*
* Calls:
* super
* ----------------------------------------------------------------------------------
*/
public ScreenOptions (){
super();
levelReturn = "main";
g.i().sound.sfxMute(true);
}
/**----------------------------------------------------------------------------------
* Overloaded Constructor
* This is used for when a game has been paused.
*
* Inputs
* savedScreen - The saved state of the game, for recall when the game resumes.
*
* Calls:
* super
* ----------------------------------------------------------------------------------
*/
public ScreenOptions (Screen savedScreen){
super();
levelReturn = "game";
previousScreen = savedScreen;
}
/**----------------------------------------------------------------------------------
* Sets up all the buttons on the screen. This class uses 5 buttons that change
* depending on what other buttons have been pressed.
* ----------------------------------------------------------------------------------
*/
public void buttons(){
stage.clear();
String longest = g.i().Sounds;
if (longest.length() < g.i().Controls.length()){
longest = g.i().Controls;
}
if (longest.length() < g.i().Language.length()){
longest = g.i().Language;
}
if (longest.length() < g.i().Back.length()){
longest = g.i().Back;
}
if (longest.length() < g.i().MuteMusic.length()){
longest = g.i().MuteMusic;
}
if (longest.length() < g.i().MuteSFX.length()){
longest = g.i().MuteSFX;
}
final TextButton button1 = new TextButton(longest, style);
final TextButton button2 = new TextButton("", style);
final TextButton button3 = new TextButton("", style);
final TextButton button4 = new TextButton("", style);
longest = "\u25BC " + g.i().Keyboard;
if (longest.length() < g.i().Gyro.length()){
longest = "\u25BC " + g.i().Gyro;
}
if (longest.length() < g.i().CurrentLanguage.length() + 2){
longest = "\u25BC " + g.i().CurrentLanguage;
}
final TextButton button5 = new TextButton(longest, style);
ChangeListener muteMusicListen = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor) {
g.i().t.action("playSound,buttonClick");
g.i().music = ! g.i().music;
if (g.i().music){
button1.setChecked(false);
} else {
button1.setChecked(true);
}
g.i().sound.BGMusic("mute");
}};
ChangeListener muteSFXListen = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor) {
g.i().t.action("playSound,buttonClick");
g.i().sfx = ! g.i().sfx;
if (g.i().sfx){
button2.setChecked(false);
g.i().sfxLevel = 1;
} else {
button2.setChecked(true);
g.i().sfxLevel = 0;
}
g.i().sound.sfxMute(false);
}};
ChangeListener languageListen = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor) {
g.i().t.action("playSound,buttonClick");
menuLevel = 'L';
buttons();
}};
ChangeListener mainMenuListen = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor) {
if (levelReturn == "main") {
g.i().t.action("NewLevel,Main,playSound,buttonClick");
} else {
g.i().t.action("playSound,buttonClick");
g.i().leAnonymizer.pausePressed = false;
g.i().leAnonymizer.resetAll();
g.i().t.game.setScreen(previousScreen);
}
}};
ChangeListener soundsListen = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor){
g.i().t.action("playSound,buttonClick");
menuLevel = 'S';
buttons();
}};
ChangeListener conrolsListen = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor){
g.i().t.action("playSound,buttonClick");
menuLevel = 'C';
buttons();
}};
ChangeListener optionsBack = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor){
g.i().t.action("playSound,buttonClick");
menuLevel = 'O';
buttons();
}};
ChangeListener controlChange = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor){
g.i().t.action("playSound,buttonClick");
switch (g.i().controls) {
case 'A':
if (Gdx.input.isPeripheralAvailable(
Peripheral.HardwareKeyboard)){
g.i().controls = 'D';
}
break;
case 'D':
if (Gdx.input.isPeripheralAvailable(Peripheral.Accelerometer)){
g.i().controls = 'A';
} else {
g.i().controls = 'D';
}
break;
case 'M':
g.i().controls = 'K';
break;
case 'K':
g.i().controls = 'M';
break;
}
buttons();
button5.setChecked(false);
}};
ChangeListener changeLanguage = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor){
if (button5.isChecked()){
g.i().t.action("playSound,buttonClick");
switch (g.i().language) {
case "zh":
g.i().language = "ja";
break;
case "en":
g.i().language = "es";
break;
case "es":
g.i().language = "zh";
break;
case "ja":
g.i().language = "vi";
break;
case "vi":
g.i().language = "en";
break;
}
}
g.i().languageSet();
setTemplet();
buttons();
button5.setChecked(false);
}};
final float xRow1 = Gdx.graphics.getHeight() / 15 * 6;
final float xRow2 = Gdx.graphics.getHeight() / 15 * 3;
final float yRow1 = Gdx.graphics.getWidth() / 3;
final float yRow2 = Gdx.graphics.getWidth() / 3 * 2;
float height = 0;
float width = 0;
stage.addActor(button1);
stage.addActor(button2);
stage.addActor(button3);
stage.addActor(button4);
stage.addActor(button5);
switch (menuLevel){
case 'S':
super.setLogo(Gdx.files.internal("img/menu/LogoSounds.png"));
button1.setText(g.i().MuteMusic);
button1.setChecked(! g.i().music);
button1.addListener(muteMusicListen);
button2.setText(g.i().MuteSFX);
button2.setChecked(! g.i().sfx);
button2.setVisible(true);
button2.addListener(muteSFXListen);
button3.setVisible(false);
button4.setText(g.i().Back);
button4.addListener(optionsBack);
button5.setVisible(false);
break;
case 'L':
super.setLogo(Gdx.files.internal("img/menu/LogoLanguage.png"));
button5.setText("\u25BC " + g.i().CurrentLanguage);
button1.setVisible(false);
button2.setVisible(false);
button3.setVisible(false);
button4.setText(g.i().Back);
button4.addListener(optionsBack);
button5.setVisible(true);
button5.addListener(changeLanguage);
break;
case 'C':
super.setLogo(Gdx.files.internal("img/menu/LogoControls.png"));
switch (g.i().controls) {
case 'A':
button5.setText("\u25BC " + g.i().Gyro);
break;
case 'K':
button5.setText("\u25BC " + g.i().KeyboardMouse);
break;
case 'M':
button5.setText("\u25BC " + g.i().Mouse);
break;
case 'D':
button5.setText("\u25BC " + g.i().Keyboard);
break;
}
button1.setVisible(false);
button2.setVisible(false);
button3.setVisible(false);
button4.setText(g.i().Back);
button4.addListener(optionsBack);
button5.addListener(controlChange);
button5.setVisible(true);
break;
default:
super.setLogo(Gdx.files.internal("img/menu/LogoOptions.png"));
menuLevel = 'O';
button1.setText(g.i().Sounds);
button1.setChecked(false);
button1.setVisible(true);
button1.addListener(soundsListen);
button2.setText(g.i().Controls);
button2.setChecked(false);
button2.setVisible(true);
button2.addListener(conrolsListen);
button3.setText(g.i().Language);
button3.setChecked(false);
button3.setVisible(true);
button3.addListener(languageListen);
button4.setText(g.i().Back);
button4.setChecked(false);
button4.addListener(mainMenuListen);
button5.setVisible(false);
}
if (width == 0){
for (int i=0; i < 4; i++){
if (height < stage.getActors().items[i].getHeight()){
height = stage.getActors().items[i].getHeight();
}
if (width < stage.getActors().items[i].getWidth()){
width = stage.getActors().items[i].getWidth();
}
}
}
for
(int i=0; i < stage.getActors().size; i++){
stage.getActors().items[i].setHeight(Gdx.graphics.getHeight() / 7);
stage.getActors().items[i].setWidth(Gdx.graphics.getWidth() / 4.5f);
}
stage.getActors().items[4].setWidth(Gdx.graphics.getWidth() / 3.75f);
height = stage.getActors().items[0].getHeight() / 2;
width = stage.getActors().items[0].getWidth() / 2;
stage.getActors().items[0].setPosition(yRow1 - width, xRow1 - height);
stage.getActors().items[1].setPosition(yRow2 - width, xRow1 - height);
stage.getActors().items[2].setPosition(yRow1 - width, xRow2 - height);
stage.getActors().items[3].setPosition(yRow2 - width, xRow2 - height);
stage.getActors().items[4].setPosition((Gdx.graphics.getWidth() / 2) -
((button5.getWidth() / 2)), xRow1 - (button5.getHeight() / 2));
}
/**----------------------------------------------------------------------------------
* Sets the a logo image on the screen. This method is called from the parent class.
* ----------------------------------------------------------------------------------
*/
public void logo(){
super.setLogo(Gdx.files.internal("img/menu/LogoOptions.png"));
}
}