130 lines
3.5 KiB
Java
Executable File

package zero1hd.polyjet.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.ScreenAdapter;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.math.Vector3;
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.utils.ClickListener;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import zero1hd.polyjet.Polyjet;
import zero1hd.polyjet.ui.pages.CreditsPage;
import zero1hd.polyjet.ui.pages.MainPage;
import zero1hd.polyjet.ui.pages.MoreOptionsPage;
import zero1hd.polyjet.ui.pages.OptionsPage;
import zero1hd.polyjet.util.TransitionAdapter;
public class MainMenu extends ScreenAdapter implements TransitionAdapter {
public Stage stage;
private Vector3 targetPosition;
private MainPage mainPage;
private OptionsPage optionsPage;
private CreditsPage creditsPage;
private MoreOptionsPage moreOptionsPage;
Polyjet core;
public MainMenu(final Polyjet core) {
this.core = core;
stage = new Stage(new ScreenViewport());
targetPosition = new Vector3(stage.getCamera().position);
}
public void postTransition() {
stage.clear();
mainPage = new MainPage(core, targetPosition);
mainPage.setPosition(0, 0);
stage.addActor(mainPage);
//End main menu
moreOptionsPage = new MoreOptionsPage(core, targetPosition);
optionsPage = new OptionsPage(core, targetPosition, moreOptionsPage);
optionsPage.setPosition(Gdx.graphics.getWidth(), 0);
stage.addActor(optionsPage);
creditsPage = new CreditsPage(core.defaultSkin);
creditsPage.setPosition(0, Gdx.graphics.getHeight());
stage.addActor(creditsPage);
moreOptionsPage.setPosition(1f*Gdx.graphics.getWidth(), -1f*Gdx.graphics.getHeight());
stage.addActor(moreOptionsPage);
stage.addListener(new InputListener() {
@Override
public boolean keyUp(InputEvent event, int keycode) {
if (keycode == Keys.ESCAPE) {
stage.unfocusAll();
if (targetPosition.x != 0.5f*Gdx.graphics.getWidth() || targetPosition.y != 0.5f*Gdx.graphics.getHeight()) {
targetPosition.x = 0.5f*Gdx.graphics.getWidth();
targetPosition.y = 0.5f*Gdx.graphics.getHeight();
}
moreOptionsPage.controlUnselect();
}
return super.keyUp(event, keycode);
}
});
stage.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
if (stage.hit(x, y, true) == null) {
stage.unfocusAll();
moreOptionsPage.controlUnselect();
}
super.clicked(event, x, y);
}
});
Gdx.app.debug("Post Transition", "Beginning screen setup for Main menu.");
}
@Override
public void show() {
Gdx.input.setInputProcessor(stage);
super.show();
}
@Override
public void hide() {
if (optionsPage != null) {
optionsPage.saveOptions(core.prefs);
}
super.hide();
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
if (stage.getCamera().position.x != targetPosition.x || stage.getCamera().position.y != targetPosition.y) {
stage.getCamera().position.lerp(targetPosition, 0.25f);
}
super.render(delta);
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height, false);
targetPosition.x = width/2;
targetPosition.y = height/2;
super.resize(width, height);
}
@Override
public void dispose() {
stage.dispose();
super.dispose();
}
}