256 lines
6.4 KiB
Java
Executable File
256 lines
6.4 KiB
Java
Executable File
package zero1hd.polyjet.screens;
|
|
|
|
import com.badlogic.gdx.Gdx;
|
|
import com.badlogic.gdx.Input.Keys;
|
|
import com.badlogic.gdx.InputMultiplexer;
|
|
import com.badlogic.gdx.InputProcessor;
|
|
import com.badlogic.gdx.ScreenAdapter;
|
|
import com.badlogic.gdx.graphics.Color;
|
|
import com.badlogic.gdx.graphics.GL20;
|
|
import com.badlogic.gdx.scenes.scene2d.Actor;
|
|
import com.badlogic.gdx.scenes.scene2d.Stage;
|
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
|
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
|
|
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
|
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
|
import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
|
|
import com.badlogic.gdx.scenes.scene2d.ui.Window;
|
|
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
|
|
|
import zero1hd.polyjet.Polyjet;
|
|
import zero1hd.polyjet.audio.AudioData;
|
|
import zero1hd.polyjet.ui.stages.GamePlayArea;
|
|
import zero1hd.polyjet.ui.windows.FPSWindow;
|
|
|
|
public class GameScreen extends ScreenAdapter implements InputProcessor {
|
|
private GamePlayArea gameArea;
|
|
public InputMultiplexer inputs;
|
|
|
|
public boolean paused = false;
|
|
private boolean debug = false;
|
|
|
|
public Polyjet core;
|
|
public Stage overlay;
|
|
private Label scoreLabel;
|
|
Window pauseMenu;
|
|
FPSWindow FPSDisplay;
|
|
|
|
private AudioData music;
|
|
|
|
public GameScreen(Polyjet polyJet) {
|
|
core = polyJet;
|
|
|
|
// Overlay stuff
|
|
overlay = new Stage();
|
|
scoreLabel = new Label("Score: 0", core.getDefaultSkin(), "default-font", Color.WHITE);
|
|
scoreLabel.setPosition(25, Gdx.graphics.getHeight() - scoreLabel.getHeight() - 25);
|
|
|
|
ImageButton pause = new ImageButton(core.getDefaultSkin().getDrawable("pause"),
|
|
core.getDefaultSkin().getDrawable("pause-down"));
|
|
pause.setPosition(Gdx.graphics.getWidth() - pause.getWidth() - 25,
|
|
Gdx.graphics.getHeight() - pause.getHeight() - 25);
|
|
pause.addListener(new ChangeListener() {
|
|
@Override
|
|
public void changed(ChangeEvent event, Actor actor) {
|
|
pause();
|
|
}
|
|
});
|
|
|
|
WidgetGroup healthBar = new WidgetGroup();
|
|
final Image healthBarTank = new Image(core.getDefaultSkin().getPatch("bar-empty"));
|
|
healthBarTank.setHeight(100);
|
|
healthBar.setSize(healthBarTank.getWidth(), healthBarTank.getHeight());
|
|
healthBar.setPosition(Gdx.graphics.getWidth() - healthBar.getWidth() - 16,
|
|
pause.getY() - healthBar.getHeight() - 32);
|
|
|
|
Image healthBarFiller = new Image(core.getDefaultSkin().getPatch("bar-fill")) {
|
|
@Override
|
|
public void act(float delta) {
|
|
setHeight(
|
|
((float) gameArea.getPolyjet().health / (float) gameArea.getMaxHealth()) * (healthBarTank.getHeight()));
|
|
super.act(delta);
|
|
}
|
|
};
|
|
healthBar.addActor(healthBarFiller);
|
|
healthBar.addActor(healthBarTank);
|
|
overlay.addActor(healthBar);
|
|
|
|
FPSDisplay = new FPSWindow("FPS", core.getDefaultSkin());
|
|
overlay.addActor(pause);
|
|
overlay.addActor(scoreLabel);
|
|
|
|
// Pause menu
|
|
pauseMenu = new Window("Paused", core.getDefaultSkin());
|
|
pauseMenu.add(new TextButton("resume", core.getDefaultSkin()) {
|
|
{
|
|
addListener(new ChangeListener() {
|
|
|
|
@Override
|
|
public void changed(ChangeEvent event, Actor actor) {
|
|
reBegin();
|
|
}
|
|
});
|
|
}
|
|
}).space(20f);
|
|
pauseMenu.setModal(true);
|
|
pauseMenu.setPosition((Gdx.graphics.getWidth() - pauseMenu.getWidth()) / 2,
|
|
(Gdx.graphics.getHeight() - pauseMenu.getHeight()) / 2);
|
|
|
|
// Continue to add things to input multiplexer
|
|
gameArea = new GamePlayArea(polyJet.getAssetManager());
|
|
|
|
inputs = new InputMultiplexer();
|
|
inputs.addProcessor(this);
|
|
inputs.addProcessor(overlay);
|
|
inputs.addProcessor(gameArea);
|
|
|
|
if (!paused) {
|
|
music.getPlaybackMusic().play();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void show() {
|
|
Gdx.input.setInputProcessor(inputs);
|
|
super.show();
|
|
}
|
|
|
|
@Override
|
|
public void render(float delta) {
|
|
Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
|
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
|
|
Gdx.gl.glLineWidth(1f);
|
|
gameArea.getViewport().apply();
|
|
|
|
gameArea.draw();
|
|
|
|
overlay.getViewport().apply();
|
|
overlay.draw();
|
|
if (!paused) {
|
|
music.readIndexUpdate();
|
|
scoreLabel.setText("Score: " + gameArea.getScore());
|
|
gameArea.act(delta);
|
|
|
|
if (gameArea.getPolyjet().isDead()) {
|
|
end(false);
|
|
}
|
|
|
|
overlay.act(delta);
|
|
}
|
|
|
|
if (!music.getPlaybackMusic().isPlaying()) {
|
|
end(true);
|
|
}
|
|
|
|
super.render(delta);
|
|
}
|
|
|
|
private void end(boolean trueEnd) {
|
|
if (trueEnd) {
|
|
// TODO they didn't die
|
|
} else {
|
|
// TODO They done goofed and ended up dying.
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void dispose() {
|
|
overlay.dispose();
|
|
gameArea.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@Override
|
|
public void resize(int width, int height) {
|
|
gameArea.getViewport().update(width, height, true);
|
|
overlay.getViewport().update(width, height, true);
|
|
|
|
super.resize(width, height);
|
|
}
|
|
|
|
@Override
|
|
public void pause() {
|
|
paused = true;
|
|
overlay.addActor(pauseMenu);
|
|
music.getPlaybackMusic().pause();
|
|
super.pause();
|
|
}
|
|
|
|
@Override
|
|
public void resume() {
|
|
super.resume();
|
|
}
|
|
|
|
public void reBegin() {
|
|
paused = false;
|
|
pauseMenu.remove();
|
|
music.getPlaybackMusic().play();
|
|
}
|
|
|
|
@Override
|
|
public boolean keyUp(int keycode) {
|
|
switch (keycode) {
|
|
case Keys.F3:
|
|
if (debug) {
|
|
debug = false;
|
|
for (int i = 0; i < gameArea.getActors().size; i++) {
|
|
gameArea.setDebugAll(debug);
|
|
}
|
|
FPSDisplay.remove();
|
|
} else {
|
|
debug = true;
|
|
for (int i = 0; i < gameArea.getActors().size; i++) {
|
|
gameArea.setDebugAll(debug);
|
|
}
|
|
overlay.addActor(FPSDisplay);
|
|
}
|
|
|
|
break;
|
|
|
|
case Keys.ESCAPE:
|
|
if (paused) {
|
|
reBegin();
|
|
} else {
|
|
pause();
|
|
}
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean keyTyped(char character) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean mouseMoved(int screenX, int screenY) {
|
|
// TODO Auto-generated method stub
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean scrolled(int amount) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean keyDown(int keycode) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
|
|
return false;
|
|
}
|
|
|
|
@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;
|
|
}
|
|
} |