Skip to content
Snippets Groups Projects
Commit 6fbc2ee0 authored by Sander Østrem Fagernes's avatar Sander Østrem Fagernes
Browse files

Resolve "Find game screen setup"

parent 0789ba63
No related branches found
No related tags found
1 merge request!33Resolve "Find game screen setup"
...@@ -18,6 +18,13 @@ camo-background-portrait ...@@ -18,6 +18,13 @@ camo-background-portrait
orig: 224, 500 orig: 224, 500
offset: 0, 0 offset: 0, 0
index: -1 index: -1
dark-back-arrow-button
rotate: false
xy: 644, 900
size: 38, 38
orig: 38, 38
offset: 0, 0
index: -1
dark-menu-header dark-menu-header
rotate: false rotate: false
xy: 228, 433 xy: 228, 433
...@@ -27,35 +34,42 @@ dark-menu-header ...@@ -27,35 +34,42 @@ dark-menu-header
index: -1 index: -1
dark-rounded-button dark-rounded-button
rotate: false rotate: false
xy: 228, 397 xy: 644, 940
size: 246, 34 size: 246, 34
orig: 246, 34 orig: 246, 34
offset: 0, 0 offset: 0, 0
index: -1 index: -1
dark-rounded-button-disabled
rotate: false
xy: 644, 976
size: 275, 34
orig: 275, 34
offset: 0, 0
index: -1
dark-rounded-button-down dark-rounded-button-down
rotate: false rotate: false
xy: 644, 927 xy: 228, 348
size: 246, 34 size: 246, 34
orig: 246, 34 orig: 246, 34
offset: 0, 0 offset: 0, 0
index: -1 index: -1
dark-stroked-input-field dark-stroked-input-field
rotate: false rotate: false
xy: 644, 963 xy: 228, 384
size: 261, 47 size: 261, 47
orig: 261, 47 orig: 261, 47
offset: 0, 0 offset: 0, 0
index: -1 index: -1
logo logo
rotate: false rotate: false
xy: 228, 355 xy: 491, 391
size: 134, 40 size: 134, 40
orig: 134, 40 orig: 134, 40
offset: 0, 0 offset: 0, 0
index: -1 index: -1
transparent-white-box transparent-white-box
rotate: false rotate: false
xy: 907, 1009 xy: 921, 1009
size: 1, 1 size: 1, 1
orig: 1, 1 orig: 1, 1
offset: 0, 0 offset: 0, 0
......
...@@ -32,7 +32,13 @@ ...@@ -32,7 +32,13 @@
"font": "default", "font": "default",
"fontColor": "white", "fontColor": "white",
"up": "dark-rounded-button", "up": "dark-rounded-button",
"down": "dark-rounded-button-down" "down": "dark-rounded-button-down",
"disabled": "dark-rounded-button-disabled"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle": {
"default": {
"up": "dark-back-arrow-button"
} }
}, },
"com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle": { "com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle": {
......
frontend/assets/menu-textures.png

48.7 KiB | W: | H:

frontend/assets/menu-textures.png

51.1 KiB | W: | H:

frontend/assets/menu-textures.png
frontend/assets/menu-textures.png
frontend/assets/menu-textures.png
frontend/assets/menu-textures.png
  • 2-up
  • Swipe
  • Onion skin
package com.game.tankwars.controller;
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.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.game.tankwars.ResourceManager;
import com.game.tankwars.TankWarsGame;
import com.game.tankwars.view.GameScreen;
import com.game.tankwars.view.MainMenuScreen;
public class FindGameController {
private final TankWarsGame tankWarsGame;
private final Stage stage;
private final TextField gamePinField;
private final TextButton joinLobbyButton, createLobbyButton;
private final Button backButton;
/**
* Sets the event listeners of the buttons and the text field of the FindGameScreen,
* and allows for transitioning to MainMenuScreen and to GameScreen.
*/
public FindGameController(final TankWarsGame tankWarsGame,
TextField gamePinField, TextButton joinLobbyButton,
TextButton createLobbyButton, Button backButton, final Stage stage) {
this.tankWarsGame = tankWarsGame;
this.gamePinField = gamePinField;
this.joinLobbyButton = joinLobbyButton;
this.createLobbyButton = createLobbyButton;
this.backButton = backButton;
this.stage = stage;
setEventListeners();
}
public void setEventListeners() {
/*
* Transitions back to MainMenuScreen
*/
backButton.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
tankWarsGame.setScreen(new MainMenuScreen(tankWarsGame));
return true;
}
});
/*
* Filters text field input:
* Max 4 characters long and only digits
*/
gamePinField.setTextFieldFilter(new TextField.TextFieldFilter() {
@Override
public boolean acceptChar(TextField textField, char c) {
return textField.getText().length() < 4 && Character.isDigit(c);
}
});
/*
* Enables the joinLobbyButton when the gamePinField contains 4 digits,
* and disables it otherwise
*/
gamePinField.addListener(new InputListener() {
@Override
public boolean keyTyped(InputEvent event, char character) {
super.keyTyped(event, character);
if (event.getKeyCode() == 66) {
gamePinField.getOnscreenKeyboard().show(false);
stage.unfocus(gamePinField);
stage.getViewport().setScreenY(0);
stage.getViewport().apply();
}
joinLobbyButton.setDisabled(gamePinField.getText().length() != 4);
return true;
}
});
/*
* Move camera down when text field is clicked
* to make the field appear above the keyboard.
*/
gamePinField.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
super.clicked(event, x, y);
stage.getViewport().setScreenY((int) (2 * stage.getHeight() / 3));
stage.getViewport().apply();
}
});
/*
* Disables input listener when the button is disabled.
* TODO: Join a lobby by sending a request to the backend
*/
joinLobbyButton.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
if (joinLobbyButton.isDisabled()) return true;
System.out.println("Game pin: " + gamePinField.getText() + " - yet to be implemented");
return true;
}
});
/*
* TODO: Create a lobby by sending request to backend - Transition to waiting screen?
*/
createLobbyButton.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
ResourceManager.getInstance().clear();
tankWarsGame.setScreen(new GameScreen(tankWarsGame));
return true;
}
});
}
}
...@@ -21,8 +21,6 @@ import com.game.tankwars.view.MainMenuScreen; ...@@ -21,8 +21,6 @@ import com.game.tankwars.view.MainMenuScreen;
/** /**
* Todo: Login user on backend
*
* Listens to the login button on the LoginScreen and logs in * Listens to the login button on the LoginScreen and logs in
* the user with the username provided in the username text field. * the user with the username provided in the username text field.
* Transitions to MainMenuScreen on login. * Transitions to MainMenuScreen on login.
......
...@@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.InputListener; ...@@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.game.tankwars.ResourceManager; import com.game.tankwars.ResourceManager;
import com.game.tankwars.TankWarsGame; import com.game.tankwars.TankWarsGame;
import com.game.tankwars.view.FindGameScreen;
import com.game.tankwars.view.GameScreen; import com.game.tankwars.view.GameScreen;
import com.game.tankwars.view.LeaderboardScreen; import com.game.tankwars.view.LeaderboardScreen;
import com.game.tankwars.view.LoginScreen; import com.game.tankwars.view.LoginScreen;
...@@ -32,15 +33,12 @@ public class MainMenuController { ...@@ -32,15 +33,12 @@ public class MainMenuController {
private void setEventListeners() { private void setEventListeners() {
/* /*
* Transition to GameScreen * Transition to FindGameScreen
* Clear Resource Manager to dispose all menu-related textures
* TODO: Transition to FindGameScreen and then no longer clear ResourceManager
*/ */
findGameButton.addListener(new InputListener() { findGameButton.addListener(new InputListener() {
@Override @Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
ResourceManager.getInstance().clear(); tankWarsGame.setScreen(new FindGameScreen(tankWarsGame));
tankWarsGame.setScreen(new GameScreen(tankWarsGame));
return true; return true;
} }
}); });
......
package com.game.tankwars.view;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.viewport.ExtendViewport;
import com.game.tankwars.ResourceManager;
import com.game.tankwars.TankWarsGame;
import com.game.tankwars.controller.FindGameController;
/**
* Screen where the user can choose between creating a new game lobby
* and join an existing lobby by entering a game pin.
*/
public class FindGameScreen implements Screen {
private final TankWarsGame tankWarsGame;
private Stage stage;
public FindGameScreen(final TankWarsGame tankWarsGame) {
this.tankWarsGame = tankWarsGame;
}
@Override
public void show() {
stage = new Stage(new ExtendViewport(tankWarsGame.getViewportWidth(),
tankWarsGame.getViewportHeight()), new SpriteBatch());
Gdx.input.setInputProcessor(stage);
Skin skin = ResourceManager.getInstance().loadAndGetMenuAssets();
Image backgroundPortrait = new Image(skin.getDrawable("camo-background-portrait"));
Drawable backgroundBlurred = skin.getDrawable("camo-background-portrait-blurred");
Image logo = new Image(skin.getDrawable("logo"));
Drawable headerBox = skin.getDrawable("dark-menu-header");
Label findGameLabel = new Label("Find Game", skin.get("header", Label.LabelStyle.class));
Label gamePinLabel = new Label("Game pin", skin.get("default", Label.LabelStyle.class));
TextField gamePinField = new TextField("",
skin.get("default", TextField.TextFieldStyle.class));
gamePinField.setAlignment(Align.center);
TextButton joinLobbyButton = new TextButton("Join lobby",
skin.get("default", TextButton.TextButtonStyle.class));
joinLobbyButton.setDisabled(true);
TextButton createLobbyButton = new TextButton("Create lobby",
skin.get("default", TextButton.TextButtonStyle.class));
Button backButton = new Button(skin.get("default", Button.ButtonStyle.class));
//--- Layout
float lw = 2 * stage.getWidth() / 6f;
float rw = stage.getWidth() - lw;
Table rootTable = new Table();
rootTable.setFillParent(true);
Group leftGroup = new Group();
leftGroup.setSize(lw, stage.getHeight());
backgroundPortrait.setSize(lw, backgroundPortrait.getHeight() / backgroundPortrait.getWidth() * lw);
backgroundPortrait.setPosition(0, stage.getHeight() / 2f - backgroundPortrait.getHeight() / 2f);
leftGroup.addActor(backgroundPortrait);
backButton.setPosition(14, stage.getHeight() - backButton.getHeight() - 14);
leftGroup.addActor(backButton);
Table rightTable = new Table();
rightTable.background(backgroundBlurred);
Table headerTable = new Table();
headerTable.background(headerBox);
headerTable.add(logo).expandX().width(3 * rw / 7f).
height(logo.getHeight() / logo.getWidth() * 3 * rw / 7f);
headerTable.add(findGameLabel).expandX();
rightTable.add(headerTable).fillX().height(stage.getHeight() / 4f);
rightTable.row().expand(1, 0);
rightTable.add(gamePinLabel).width(2 * rw / 3f).bottom().padLeft(10);
rightTable.row().expand(1, 2);
rightTable.add(gamePinField).width(2 * rw / 3f).height(42).top();
rightTable.row().expand(1, 1);
rightTable.add(joinLobbyButton).width(2 * rw / 3f).height(28);
rightTable.row().expand(1, 4);
rightTable.add(createLobbyButton).width(2 * rw / 3f).height(28);
rootTable.add(leftGroup).width(lw).height(stage.getHeight());
rootTable.add(rightTable).expandX().height(stage.getHeight());
stage.addActor(rootTable);
new FindGameController(tankWarsGame, gamePinField, joinLobbyButton, createLobbyButton, backButton, stage);
}
@Override
public void render(float delta) {
ScreenUtils.clear(0, 0, 0, 1f);
stage.act(delta);
stage.draw();
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
@Override
public void dispose() {
stage.dispose();
}
}
...@@ -56,7 +56,7 @@ public class LoginScreen implements Screen { ...@@ -56,7 +56,7 @@ public class LoginScreen implements Screen {
skin.get("default", TextButton.TextButtonStyle.class)); skin.get("default", TextButton.TextButtonStyle.class));
//--- Layout //--- Layout
float lw = 2 * stage.getWidth() / 5f; float lw = 2 * stage.getWidth() / 6f;
float rw = stage.getWidth() - lw; float rw = stage.getWidth() - lw;
Table rootTable = new Table(); Table rootTable = new Table();
......
...@@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx; ...@@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter; import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.Screen; import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Label;
...@@ -42,7 +43,7 @@ public class MainMenuScreen extends InputAdapter implements Screen { ...@@ -42,7 +43,7 @@ public class MainMenuScreen extends InputAdapter implements Screen {
Skin skin = ResourceManager.getInstance().loadAndGetMenuAssets(); Skin skin = ResourceManager.getInstance().loadAndGetMenuAssets();
Drawable background = skin.getDrawable("camo-background-landscape"); Image background = new Image(skin.getDrawable("camo-background-landscape"));
Image logo = new Image(skin.getDrawable("logo")); Image logo = new Image(skin.getDrawable("logo"));
Drawable headerBox = skin.getDrawable("dark-menu-header"); Drawable headerBox = skin.getDrawable("dark-menu-header");
...@@ -82,12 +83,18 @@ public class MainMenuScreen extends InputAdapter implements Screen { ...@@ -82,12 +83,18 @@ public class MainMenuScreen extends InputAdapter implements Screen {
panelTable.add(settingsButton).width(buttonWidth).expandX().height(buttonHeight); panelTable.add(settingsButton).width(buttonWidth).expandX().height(buttonHeight);
panelTable.add(logoutButton).width(buttonWidth).expandX().height(buttonHeight); panelTable.add(logoutButton).width(buttonWidth).expandX().height(buttonHeight);
rootTable.background(background);
rootTable.add(headerTable).fillX().height(2 * stage.getHeight() / 7f).top(); rootTable.add(headerTable).fillX().height(2 * stage.getHeight() / 7f).top();
rootTable.row().expandY(); rootTable.row().expandY();
rootTable.add(panelTable).fillX().height(3 * stage.getHeight() / 7f).bottom(); rootTable.add(panelTable).fillX().height(3 * stage.getHeight() / 7f).bottom();
stage.addActor(rootTable); Group group = new Group();
group.setSize(stage.getWidth(), stage.getHeight());
background.setSize(stage.getWidth(), background.getHeight() / background.getWidth() * stage.getWidth());
background.setPosition(0, stage.getHeight() / 2f - background.getHeight() / 2f);
group.addActor(background);
group.addActor(rootTable);
stage.addActor(group);
new MainMenuController(this.tankWarsGame, findGameButton, highScoreButton, settingsButton, logoutButton); new MainMenuController(this.tankWarsGame, findGameButton, highScoreButton, settingsButton, logoutButton);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment