package org.tjuscs.bulletgame.view;
import org.tjuscs.bulletgame.BulletGame;
import org.tjuscs.bulletgame.view.component.AudioPlayer;
import org.tjuscs.bulletgame.view.component.Renderer;
import org.tjuscs.bulletgame.view.component.Resources;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputMultiplexer;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.input.GestureDetector;
import com.badlogic.gdx.input.GestureDetector.GestureListener;
import com.badlogic.gdx.math.Vector2;
public class HomeScreen implements Screen {
private Renderer render;
private Resources res;
private AudioPlayer audio;
private int beginLocY = 600;
private int scene = 0;
private int furScene = 0;
private int mouseOpt = -1;
private int recOrder = -1;
private int recScene = -1;
private int pieceCount;
private int GAP = 43;
private MainData mainData;
private String mainUI[][]={{"Start Game","Stage Practice","Spell Practice","View Replay","Exit Game"},
{"Select Difficulty","","Normal","Difficult"},
{"Select Stage","","Stage 1","Stage 2"},
{"Select Player","","Hakurei Reimu","KiriSame Marisa"},
{"Spell Practice","","Practice 1","Practice 2"},
{"View Replay",""}
};
private int fontOrder[][]={
{1,3,100},
{1,2,3,100},
{4,100},
{5}
};
public class MainData{
String difficulty;
String stage;
String player;
String practice;
String replay;
}
public HomeScreen(){
render = Renderer.getInstance();
res = Resources.getInstance();
audio = AudioPlayer.getInstance();
}
@Override
public void render(float delta) {
// TODO Auto-generated method stub
//System.out.println("Rendering[" + frameCount++ + "]\tFPS="+ Gdx.graphics.getFramesPerSecond());
if(furScene == 100){
BulletGame.setCurrentScreen(BulletGame.gameScreen);
}else{
scene = furScene;
render.startRender();
render.RenderClear(0, 0, 0, 1);
render.Render("bk_main", 256, 256,0,1.2,2.0);
pieceCount = mainUI[scene].length;
for(int i = 0;i < pieceCount;i++){
if(i == mouseOpt){
render.RenderTextCenter("menu_fontRED", mainUI[scene][i], beginLocY-i*GAP);
}
else{
render.RenderTextCenter("menu_font", mainUI[scene][i], beginLocY-i*GAP);
}
}
render.endRender();
}
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void show() {
//add Listener
Gdx.input.setInputProcessor(new InputMultiplexer(new InputProcMainScr(),
new GestureDetector(new GestureHandlerMainScr())));
//load Resource -- Music;
res.LoadMusic("menu","THlib/music/menu.mp3");
audio.PlayMusic("menu", 0.1);
//load Resource -- Image;
res.LoadImageFromFile("bk_main", "THlib/ui/main_back/menu_bg_2.png");
//load Resource -- Font;
res.LoadFont("menu_font", "THlib/ui/font/segoe.fnt");
res.LoadFont("menu_fontRED", "THlib/ui/font/segoeRED.fnt");
//assign data
beginLocY = 600;
scene = 0;
mouseOpt = -1;
recOrder = -1;
recScene = -1;
mainData = new MainData();
}
@Override
public void hide() {
beginLocY = 600;
scene = 0;
furScene = 0;
mouseOpt = -1;
recOrder = -1;
recScene = -1;
//audio.StopMusic("menu");
}
@Override
public void pause() {
// TODO Auto-generated method stub
audio.PauseMusic("menu");
}
@Override
public void resume() {
// TODO Auto-generated method stub
audio.PlayMusic("menu",0.1);
}
@Override
public void dispose() {
}
public class InputProcMainScr implements InputProcessor {
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer,
int button) {
int k = (beginLocY - Gdx.graphics.getHeight() + screenY)/GAP;
if(k >= 0 && k < pieceCount ){
if(scene == 0){
if(k == 4){
//! Quit Game
//System.out.println("Quite Game");
Gdx.app.exit();
return true;
}
recOrder = k;
recScene++;
furScene = fontOrder[recOrder][recScene];
}
else if(scene > 0 && scene <=5 && k>1){
recScene++;
furScene = fontOrder[recOrder][recScene];
switch (scene){
case 1:
mainData.difficulty = mainUI[scene][k];
// System.out.println("a" + mainData.difficulty);
break;
case 2:
mainData.stage = mainUI[scene][k];
// System.out.println("a" + mainData.stage);
break;
case 3:
mainData.player = mainUI[scene][k];
// System.out.println("a" + mainData.player);
break;
case 4:
mainData.practice = mainUI[scene][k];
// System.out.println("a" + mainData.practice);
break;
case 5:
mainData.replay = mainUI[scene][k];
// System.out.println("a" + mainData.replay);
break;
}
}
}
return true;
}
@Override
public boolean scrolled(int amount) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
int k = (beginLocY - Gdx.graphics.getHeight() + screenY)/GAP;
if(k >= 0 && k < pieceCount ){
if(scene == 0 ||(scene >=1 && scene <=5 && k>1)) mouseOpt = k;
}
// System.out.println("mouseMoved:" + k);
return true;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean keyDown(int keycode) {
//System.out.println("keyDown"+keycode);
//a-29 z-54 up-19 down- 20 left-21 right-22 enter-66 esc 131
return true;
}
}
public class GestureHandlerMainScr implements GestureListener {
@Override
public boolean zoom(float initialDistance, float distance) {
return false;
}
@Override
public boolean touchDown(float x, float y, int pointer, int button) {
return false;
}
@Override
public boolean tap(float x, float y, int count, int button) {
return false;
}
@Override
public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2,
Vector2 pointer1, Vector2 pointer2) {
return false;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
return false;
}
@Override
public boolean longPress(float x, float y) {
return false;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
return false;
}
}
}