diff --git a/frontend/android/AndroidManifest.xml b/frontend/android/AndroidManifest.xml index 0b4adf0d1847db490b4bc696bf26d8d897b043e8..c84955598781818383685ee4cb5ad9ca8628faac 100644 --- a/frontend/android/AndroidManifest.xml +++ b/frontend/android/AndroidManifest.xml @@ -5,7 +5,7 @@ <application android:allowBackup="true" - android:icon="@drawable/ic_launcher" + android:icon="@drawable/gameware_logo" android:isGame="true" android:appCategory="game" android:label="@string/app_name" diff --git a/frontend/android/assets/bubbleWrapPhoto.png b/frontend/android/assets/bubbleWrapPhoto.png new file mode 100644 index 0000000000000000000000000000000000000000..04b12fdd3f2af2026d19d4f74c42f0288005d8b2 Binary files /dev/null and b/frontend/android/assets/bubbleWrapPhoto.png differ diff --git a/frontend/android/assets/bubbleWrapPhotoEdit.png b/frontend/android/assets/bubbleWrapPhotoEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..30f989cdf614c034d7806e0f405c1fe19930ee7f Binary files /dev/null and b/frontend/android/assets/bubbleWrapPhotoEdit.png differ diff --git a/frontend/android/assets/colorRushPhoto.png b/frontend/android/assets/colorRushPhoto.png new file mode 100644 index 0000000000000000000000000000000000000000..c820977028c5614454677bec91f1fbb0de910816 Binary files /dev/null and b/frontend/android/assets/colorRushPhoto.png differ diff --git a/frontend/android/assets/colorRushPhotoEdit.png b/frontend/android/assets/colorRushPhotoEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..3f35ee58031891837e3e6431b85fde4cfb091e98 Binary files /dev/null and b/frontend/android/assets/colorRushPhotoEdit.png differ diff --git a/frontend/android/assets/glassy/raw/button-disabled.png b/frontend/android/assets/glassy/raw/button-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..18ca2b35d0546b22a4aa1e3cffce547ab08a6605 Binary files /dev/null and b/frontend/android/assets/glassy/raw/button-disabled.png differ diff --git a/frontend/android/res/drawable-xxxhdpi/gameware_logo.png b/frontend/android/res/drawable-xxxhdpi/gameware_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f7be1fcf294fd2e29ac8c4393c0ea6efb2172dd4 Binary files /dev/null and b/frontend/android/res/drawable-xxxhdpi/gameware_logo.png differ diff --git a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java b/frontend/core/src/com/gameware/game/states/BubbleWrapState.java index c6e5a1c0f967a9086319c3463ae192f366bab46f..f7d7a0b0d60cf0ee42fc56d62dff33cd1a390b2b 100644 --- a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java +++ b/frontend/core/src/com/gameware/game/states/BubbleWrapState.java @@ -28,6 +28,7 @@ public class BubbleWrapState extends PlayStateTemplate { public BubbleWrapState(GameStateManager gsm) { super(gsm); + super.screenshot = new Texture(Gdx.files.internal("bubbleWrapPhotoEdit.png")); unpopped = new Texture(Gdx.files.internal("glassy/raw/bubble_unpopped_1.png")); popped1 = new Texture(Gdx.files.internal("glassy/raw/bubble_popped_1.png")); @@ -157,6 +158,7 @@ public class BubbleWrapState extends PlayStateTemplate { this.popped2.dispose(); this.popped3.dispose(); this.pauseButton.dispose(); + background.dispose(); } @Override diff --git a/frontend/core/src/com/gameware/game/states/ColorRushState.java b/frontend/core/src/com/gameware/game/states/ColorRushState.java index 4e205b2c7be0e3710dc925785ead99eeba714644..1ffaceb81f05439648eaea8e95cbb0e09cacb187 100644 --- a/frontend/core/src/com/gameware/game/states/ColorRushState.java +++ b/frontend/core/src/com/gameware/game/states/ColorRushState.java @@ -30,11 +30,11 @@ public class ColorRushState extends PlayStateTemplate { private boolean buttonsEnabled = true; private boolean disposeTargetLeft = true; - private PauseButton pauseButton; public ColorRushState(GameStateManager gsm){ super(gsm); + super.screenshot = new Texture(Gdx.files.internal("colorRushPhotoEdit.png")); // Creates the background this.background = new Texture(Gdx.files.internal("glassy/raw/ColorRushBackground.jpg")); diff --git a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java index f917f99c223e94fd16bdbf4582b17bd2d5a3b6c0..4470f7a41ee6811837a55c158081971f6b380fed 100644 --- a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java +++ b/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java @@ -1,6 +1,7 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; @@ -52,7 +53,7 @@ public class CreateJoinTournamentState extends State { private List<Tournament> tournaments = new ArrayList<>(); private Tournament tournamentTryingToLeave = null; private int padding = 50; - private String includeFinTournamentsLabelText = "Include finished \n tournaments?"; + private String includeFinTournamentsLabelText = "Include finished?"; private boolean includeFinishedTournaments = false; @@ -135,11 +136,10 @@ public class CreateJoinTournamentState extends State { btnTable.row(); btnTable.add(makeCreateBtn()).size(buttonWidth, buttonHeight).spaceBottom(spacingOnBottomInputFIeld).spaceRight(spacingOnBottom); btnTable.add(makeJoinBtn()).size(buttonWidth, buttonHeight).spaceBottom(spacingOnBottomInputFIeld); - btnTable.row(); - btnTable.add(makeBackBtn()); outerTable.add(btnTable); stage.addActor(outerTable); + stage.addActor(makeBackBtn()); makeDialog(); } @@ -252,6 +252,7 @@ public class CreateJoinTournamentState extends State { handleBackBtnClick(); } }); + backBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return backBtn; } @@ -272,11 +273,17 @@ public class CreateJoinTournamentState extends State { } @Override - protected void handleInput() { } + protected void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } + } @Override public void update(float dt) { Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } @@ -320,7 +327,7 @@ public class CreateJoinTournamentState extends State { } private void handleLeaveBtnClick(Tournament t){ - dialog.text("Do you want do leave\n"+t.getName()+"?").pad(padding); + dialog.text("Do you want to leave\n"+t.getName()+"?").pad(padding); dialog.show(stage); tournamentTryingToLeave = t; } diff --git a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java index d6495deb3d0d4a5d2097b31faf3827be7aec56e2..15e91ba9e7c9faf38823402fc72b521c1949070d 100644 --- a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java +++ b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java @@ -1,6 +1,7 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; @@ -161,11 +162,16 @@ public class CreateNewTournamentState extends State { @Override protected void handleInput() { - + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleCancelBtnClick(); + } } @Override public void update(float dt) { + Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } diff --git a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java b/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java index 12cd600498330899e2378a2f1f54e91b00db119a..864a90dfea098e8bfea75a9eb1f0e688f37ed60c 100644 --- a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java +++ b/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java @@ -1,6 +1,7 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; @@ -127,7 +128,7 @@ public class FinishedTournamentState extends State { } }; - dialog.text("Do you want do leave\n"+tournament.getName()+"?").pad(padding); + dialog.text("Do you want to leave\n"+tournament.getName()+"?").pad(padding); dialog.button("Yes", true).pad(padding); //sends "true" as the result dialog.button("No", false).pad(padding); //sends "false" as the result } @@ -144,11 +145,17 @@ public class FinishedTournamentState extends State { } @Override - protected void handleInput() { } + protected void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } + } @Override public void update(float dt) { Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } diff --git a/frontend/core/src/com/gameware/game/states/LoginState.java b/frontend/core/src/com/gameware/game/states/LoginState.java index fa9804c7766882f1f87db93da343dd5309605f9d..d4721acf8fbed35086a2a77a738598afab5f6ac5 100644 --- a/frontend/core/src/com/gameware/game/states/LoginState.java +++ b/frontend/core/src/com/gameware/game/states/LoginState.java @@ -1,11 +1,9 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; -import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; @@ -22,8 +20,8 @@ public class LoginState extends State { private Table table; - private Label gameNameText = new Label("GameWare", skin, "big"); - private Label stateTitleText = new Label("Log in / Create User", skin, "big"); + private Label stateNameLabel = new Label("GameWare", skin, "big"); + private Label secondStateNameLabel = new Label("Log in / Create User", skin, "big"); private String usernameInputText = "Username"; private TextField usernameInputField; @@ -105,11 +103,12 @@ public class LoginState extends State { table = new Table(); table.setFillParent(true); table.setBackground(background); - gameNameText.setFontScale(titleFontBigScale); - table.add(gameNameText).spaceBottom(spacingOnBottomInputFIeld); + stateNameLabel.setFontScale(titleFontBigScale); + + table.add(stateNameLabel).spaceBottom(spacingOnBottomInputFIeld); table.row(); - table.add(stateTitleText).spaceBottom(spacingOnBottomInputFIeld); + table.add(secondStateNameLabel).spaceBottom(spacingOnBottomInputFIeld); table.row(); table.add(makeUserInputField()).size(inputFieldWidth, inputFieldHeight).spaceBottom(spacingOnBottom); table.row(); diff --git a/frontend/core/src/com/gameware/game/states/MenuState.java b/frontend/core/src/com/gameware/game/states/MenuState.java index 4a53d254c75b98f7acabd8104e18f22dc8c932c2..ea9fa85f47a6b42fb24a39686900101de7dcc9e7 100644 --- a/frontend/core/src/com/gameware/game/states/MenuState.java +++ b/frontend/core/src/com/gameware/game/states/MenuState.java @@ -1,6 +1,7 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.Label; @@ -44,11 +45,10 @@ public class MenuState extends State{ Table innerTable = new Table(); innerTable.add(makeHighScoreBtn()).size(buttonWidth, buttonHeight).spaceBottom(spacingOnBottomInputFIeld).spaceRight(spacingOnBottom); innerTable.add(makeOptionsBtn()).size(buttonWidth, buttonHeight).spaceBottom(spacingOnBottomInputFIeld); - innerTable.row(); - innerTable.add(makeLogOutBtn()).spaceBottom(spacingOnBottom); table.add(innerTable); stage.addActor(table); + stage.addActor(makeLogOutBtn()); } private TextButton makeSinglePlayerBtn(){ @@ -97,15 +97,22 @@ public class MenuState extends State{ @Override public void clicked(InputEvent e, float x, float y){ handleLogOutBtnClick(); } }); + logOutBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return logOutBtn; } @Override - protected void handleInput() { } + protected void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleLogOutBtnClick(); + } + } @Override public void update(float dt) { Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } diff --git a/frontend/core/src/com/gameware/game/states/OptionsState.java b/frontend/core/src/com/gameware/game/states/OptionsState.java index c1f4d76e6e62bfb29a9526fcfee3dce756bd0420..501cded67b1a89fef142dea8ff41c887b8642864 100644 --- a/frontend/core/src/com/gameware/game/states/OptionsState.java +++ b/frontend/core/src/com/gameware/game/states/OptionsState.java @@ -1,6 +1,7 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; @@ -9,6 +10,7 @@ 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.utils.ClickListener; +import com.badlogic.gdx.utils.Scaling; import com.gameware.game.GameWare; import com.gameware.game.models.Game; @@ -17,6 +19,7 @@ public class OptionsState extends State { private Table table; private int spacingOnBottom = Gdx.graphics.getHeight()/25; + private Label stateNameLabel = new Label("Options", skin, "big"); private String backBtnText = "Back"; private String musicToggleLabelText = "Music on/off"; @@ -31,11 +34,16 @@ public class OptionsState extends State { @Override protected void handleInput() { - + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } } @Override public void update(float dt) { + Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } @@ -68,6 +76,11 @@ public class OptionsState extends State { private void makeStage(){ table = new Table(); table.setFillParent(true); + table.setBackground(background); + + stateNameLabel.setFontScale(titleFontBigScale); + table.add(stateNameLabel).spaceBottom(spacingOnBottomInputFIeld); + table.row(); table.row(); table.add(makeLabel(musicToggleLabelText,skin)).spaceBottom(spacingOnBottom); @@ -82,12 +95,12 @@ public class OptionsState extends State { //table.add(makeDarkModeCheckBox(skin)).spaceBottom(spacingOnBottom); table.row(); - table.add(makeBackBtn(skin)); stage.addActor(table); + stage.addActor(makeBackBtn()); } - private TextButton makeBackBtn(Skin skin){ + private TextButton makeBackBtn(){ TextButton backBtn = new TextButton(backBtnText, skin); backBtn.addListener(new ClickListener() { @Override @@ -95,6 +108,7 @@ public class OptionsState extends State { handleBackBtnClick(); } }); + backBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return backBtn; } @@ -105,7 +119,8 @@ public class OptionsState extends State { private CheckBox makeMusicCheckBox(Skin skin){ CheckBox musicToggle = new CheckBox("",skin); - musicToggle.getImage().setScale(2,2); + musicToggle.getImage().setScaling(Scaling.fill); + musicToggle.getImageCell().size(Gdx.graphics.getWidth()/10); if((GameWare.getInstance().getMusicOn() && !musicToggle.isChecked()) || (!GameWare.getInstance().getMusicOn() && musicToggle.isChecked())){ musicToggle.toggle(); } @@ -118,12 +133,15 @@ public class OptionsState extends State { private CheckBox makeSoundEffectCheckBox(Skin skin){ CheckBox soundEffectToggle = new CheckBox("",skin); + soundEffectToggle.getImage().setScaling(Scaling.fill); + soundEffectToggle.getImageCell().size(Gdx.graphics.getWidth()/10); soundEffectToggle.addListener(new ClickListener() { @Override public void clicked(InputEvent e, float x, float y){ GameWare.getInstance().toggleSoundEffects(); } }); - soundEffectToggle.getImage().setScale(2,2); - soundEffectToggle.toggle(); + if((GameWare.getInstance().getSoundEffects() && !soundEffectToggle.isChecked()) || (!GameWare.getInstance().getSoundEffects() && soundEffectToggle.isChecked())){ + soundEffectToggle.toggle(); + } return soundEffectToggle; } diff --git a/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java b/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java index 9bdb537deff383c0d2008fd15c460cb0b2a915d1..83bae43491a5be273acd8d720140af244029f703 100644 --- a/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java +++ b/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java @@ -1,9 +1,11 @@ package com.gameware.game.states; +import com.badlogic.gdx.graphics.Texture; import com.gameware.game.GameWare; import com.gameware.game.QueryIntermediate; import com.gameware.game.models.Round; +import com.gameware.game.models.RoundCheck; import com.gameware.game.models.Tournament; import java.io.IOException; @@ -13,8 +15,9 @@ public abstract class PlayStateTemplate extends State { private int score; private Round round = null; private Tournament tournament = null; - private Round nextRound = null; + private Round updatedRound = null; protected float totalGameTime = 30f; + protected Texture screenshot = null; public PlayStateTemplate(GameStateManager gsm){ super(gsm); @@ -30,24 +33,50 @@ public abstract class PlayStateTemplate extends State { public void gameDone(){ String id = ""; - for (String key : GameWare.getInstance().getGameIdToPlayState().keySet()){ - if ( GameWare.getInstance().getGameIdToPlayState().get(key) instanceof ColorRushState){ - id = key; - break; - } + //Find the id to the game just played + for (String key : GameWare.getInstance().getGameIdToPlayState().keySet()){ + if ( GameWare.getInstance().getGameIdToPlayState().get(key).getClass() == this.getClass()){ + id = key; + break; } + } try { this.postScore(id); }catch(Exception e){ System.out.println(e); } - GameWare.getInstance().updateGameMap(id, new ColorRushState(gsm)); + try { + //Add new instance of the game into the HashMap in GameWare + GameWare.getInstance().updateGameMap(id, this.getClass().getConstructor(GameStateManager.class).newInstance(gsm)); + }catch(Exception e){ + e.printStackTrace(); + } + + RoundCheck rc = null; + try{ + rc = QueryIntermediate.doRoundCheck(tournament.get_id()); + }catch(Exception e){ + e.printStackTrace(); + } if(round == null) { + //Singleplayer gsm.set(new ScoreState(gsm, this.score, new SinglePlayerSelectGameState(gsm))); + } else if(!rc.isActive() || (updatedRound.getTournamentPoints() != 0 && updatedRound.getRoundNr() == tournament.getTotalGames())){ + //Tournament finished + gsm.set(new ScoreState(gsm, this.score, new FinishedTournamentState(gsm, tournament))); } else{ -// TODO: change when backend gives updated round object - gsm.set(new ScoreState(gsm, this.score, new ViewTournamentState(gsm, tournament, nextRound))); -// gsm.set(new ScoreState(gsm, this.score, new CreateJoinTournamentState(gsm))); + //Tournament not finished + if(updatedRound.getTournamentPoints() != 0) { + try { + //Get new round if ready + Round nextRound = QueryIntermediate.getRoundFromTournament(tournament.get_id(), GameWare.getInstance().getPlayer().getId(), updatedRound.getRoundNr()+1); + gsm.set(new ScoreState(gsm, this.score, new ViewTournamentState(gsm, tournament, nextRound))); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + gsm.set(new ScoreState(gsm, this.score, new ViewTournamentState(gsm, tournament, updatedRound))); + } } } @@ -59,7 +88,7 @@ public abstract class PlayStateTemplate extends State { if(round==null) { QueryIntermediate.postHighscore(GameWare.getInstance().getPlayer().getId(), gameId, this.score); } else{ - nextRound = QueryIntermediate.putRoundScore(round.get_id(),tournament.get_id(), this.score); + updatedRound = QueryIntermediate.putRoundScore(round.get_id(),tournament.get_id(), this.score); } } } diff --git a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java index 414bd67f73ccd67a89e0a7ea9285fb891d2fb788..908a6662fa914105d5f9c9e9766ae7d3a8e4bf08 100644 --- a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java +++ b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java @@ -1,30 +1,41 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.gameware.game.GameWare; import com.gameware.game.QueryIntermediate; import com.gameware.game.models.Game; -import com.gameware.game.models.Tournament; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; public class SinglePlayerSelectGameState extends State { private Table table; + private Table innerTable; + private ScrollPane scrollPane; private List<Game> games = new ArrayList<>(); private final String backBtnText = "Back"; + private Label stateNameLabel = new Label("Singleplayer", skin, "big"); + private Label secondStateNameLabel = new Label("Select game", skin, "big"); + protected SinglePlayerSelectGameState(GameStateManager gsm) { super(gsm); try { @@ -33,31 +44,62 @@ public class SinglePlayerSelectGameState extends State { System.out.println(e); } + makeStage(); + } + + + private void makeStage(){ table = new Table(); table.setFillParent(true); + table.setBackground(background); + stateNameLabel.setFontScale(titleFontBigScale); + table.add(stateNameLabel).spaceBottom(spacingOnBottomInputFIeld); table.row(); + table.add(secondStateNameLabel).spaceBottom(spacingOnBottom); + table.row(); + + innerTable = new Table(); + + Pixmap bgPixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + bgPixmap.setColor(Color.SKY); + bgPixmap.fill(); + TextureRegionDrawable textureRegionDrawableBg = new TextureRegionDrawable(new TextureRegion(new Texture(bgPixmap))); + innerTable.setBackground(textureRegionDrawableBg); for (Game g : games){ - TextButton gameBtn = new TextButton(g.getName(), skin); + innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).screenshot)).pad(spacingOnBottom); + Table innerInnerTable = new Table(); + innerInnerTable.add(new Label(g.getName(),skin)).spaceBottom(spacingOnBottom); + innerInnerTable.row(); + TextButton gameBtn = new TextButton("Play!", skin); gameBtn.addListener(new SinglePlayerSelectGameState.MyClickListener(g)); - table.add(gameBtn).spaceBottom(spacingOnBottom); - table.row(); + innerInnerTable.add(gameBtn); + innerTable.add(innerInnerTable); + innerTable.row(); } - table.add(makeBackBtn()).spaceBottom(spacingOnBottom); - stage.addActor(table); + scrollPane = new ScrollPane(innerTable, skin); + table.add(scrollPane).spaceBottom(spacingOnBottom); + table.getCell(scrollPane).size(Gdx.graphics.getWidth()/1.3f, Gdx.graphics.getHeight()/3f); + table.row(); + stage.addActor(table); + stage.addActor(makeBackBtn()); } @Override protected void handleInput() { - + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } } @Override public void update(float dt) { Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(); } @@ -82,9 +124,11 @@ public class SinglePlayerSelectGameState extends State { @Override public void clicked(InputEvent e, float x, float y){ handleBackBtnClick(); } }); + backBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return backBtn; } + private void handleBackBtnClick(){ gsm.set(new MenuState(gsm)); } @@ -105,6 +149,7 @@ public class SinglePlayerSelectGameState extends State { this.game = game; } + @Override public void clicked(InputEvent event, float x, float y) { Map<String, PlayStateTemplate> map = GameWare.getInstance().getGameIdToPlayState(); State s = map.get(game.getId()); diff --git a/frontend/core/src/com/gameware/game/states/State.java b/frontend/core/src/com/gameware/game/states/State.java index 4ac47b3576e71bd5592e6b1376f458852af5f731..f75015d12f4118b228eb2e7ba7974977e0291bae 100644 --- a/frontend/core/src/com/gameware/game/states/State.java +++ b/frontend/core/src/com/gameware/game/states/State.java @@ -24,11 +24,16 @@ public abstract class State { protected static final float spacingOnBottomInputFIeld = Gdx.graphics.getHeight()/15; protected static final int buttonWidth = Gdx.graphics.getWidth()/3; protected static final int buttonHeight = Gdx.graphics.getHeight()/12; + protected static final int backBtnPlacementX = Gdx.graphics.getWidth()/18; + protected static final int backBtnPlacementY = Gdx.graphics.getHeight()/25; + protected TextureRegionDrawable background = new TextureRegionDrawable(new TextureRegion(new Texture("bg1.jpg"))); protected TextureRegionDrawable backgroundLighter = new TextureRegionDrawable(new TextureRegion(new Texture("bg1_lighter.jpg"))); protected TextureRegionDrawable backgroundScore = new TextureRegionDrawable(new TextureRegion(new Texture("bg_score.jpg"))); +// protected TextureRegionDrawable buttonDisabledDrawable = new TextureRegionDrawable(new TextureRegion(new Texture(Gdx.files.internal("glassy/raw/button-disabled.png")))); protected TextureRegionDrawable backgroundFinTourn = new TextureRegionDrawable(new TextureRegion(new Texture("bg1_finTourn.jpg"))); + protected State(GameStateManager gsm){ this.gsm = gsm; cam = new OrthographicCamera(); diff --git a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java index a3332125d0a31faccdd4ffca95bbbdc16330d87d..bdb7ee2bf0f8990bd2b660bbe03abae78dedf60d 100644 --- a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java +++ b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java @@ -1,5 +1,7 @@ package com.gameware.game.states; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; @@ -83,10 +85,9 @@ public class TournamentHighScoreState extends State{ } scrollPane = new ScrollPane(innerTable, skin); table.add(scrollPane).spaceBottom(spacingOnBottomInputFIeld).spaceBottom(spacingOnBottomInputFIeld); - table.row(); - table.add(makeBackBtn()).spaceBottom(spacingOnBottom); stage.addActor(table); + stage.addActor(makeBackBtn()); } private TextButton makeBackBtn(){ @@ -97,6 +98,7 @@ public class TournamentHighScoreState extends State{ handleBackBtnClick(); } }); + backBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return backBtn; } @@ -106,10 +108,17 @@ public class TournamentHighScoreState extends State{ @Override - protected void handleInput() { } + protected void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } + } @Override public void update(float dt) { + Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java b/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java index cf8617a8952cca42b68d9393f167007239dbb6a9..ae36a7bfc04bc0efd431f40b7a6f91498d06cfa5 100644 --- a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java +++ b/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java @@ -1,13 +1,19 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.gameware.game.GameWare; import com.gameware.game.QueryIntermediate; import com.gameware.game.models.Game; @@ -30,10 +36,17 @@ public class ViewHighScoreForGameState extends State { private double playerHS; private static List<Highscore> highscores = new ArrayList<>(); private Boolean isNoHS = true; + private Label gameNameText; + private Label stateNameText; + private ScrollPane scrollPane; private String backBtnText = "Back"; - private String playerLabelText = "You"; + private String playerLabelText = "Your score: "; private String noHSLabelText = ""; + private String globalHighScoresText = "Global High Scores"; + private String colOneText = "Place"; + private String colTwoText = "Name"; + private String colThreeText = "Score"; protected ViewHighScoreForGameState(GameStateManager gsm, Game game) { super(gsm); @@ -51,16 +64,24 @@ public class ViewHighScoreForGameState extends State { isNoHS = true; } + gameNameText = new Label(game.getName(), skin, "big"); + stateNameText = new Label(globalHighScoresText, skin, "big"); + makeStage(); } @Override protected void handleInput() { - + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } } @Override public void update(float dt) { + Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } @@ -87,6 +108,7 @@ public class ViewHighScoreForGameState extends State { handleBackBtnClick(); } }); + backBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return backBtn; } @@ -106,7 +128,25 @@ public class ViewHighScoreForGameState extends State { private void makeStage() { outerTable = new Table(); outerTable.setFillParent(true); + + + outerTable.setBackground(background); + stateNameText.setFontScale(tinierTitleFontBigScale); + gameNameText.setFontScale(tinierTitleFontBigScale); + + outerTable.add(gameNameText); + outerTable.row(); + outerTable.add(stateNameText).spaceBottom(spacingOnBottomInputFIeld); + outerTable.row(); + innerTable = new Table(); + Pixmap bgPixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + bgPixmap.setColor(Color.SKY); + bgPixmap.fill(); + TextureRegionDrawable textureRegionDrawableBg = new TextureRegionDrawable(new TextureRegion(new Texture(bgPixmap))); + innerTable.setBackground(textureRegionDrawableBg); + + innerTable.setFillParent(true); if(isNoHS){ noHSLabelText = "No high scores recorded."; @@ -124,10 +164,23 @@ public class ViewHighScoreForGameState extends State { outerTable.row(); outerTable.add(hsPane).spaceBottom(spacingOnBottomInputFIeld); outerTable.getCell(hsPane).size(Gdx.graphics.getWidth()/1.1f, Gdx.graphics.getWidth()/2.5f); + outerTable.row(); - outerTable.add(makeBackBtn()).spaceBottom(spacingOnBottom); + Table secondInnerTable = new Table(); + Pixmap secondBgPixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + secondBgPixmap.setColor(Color.SKY); + secondBgPixmap.fill(); + TextureRegionDrawable secondTextureRegionDrawableBg = new TextureRegionDrawable(new TextureRegion(new Texture(secondBgPixmap))); + secondInnerTable.setBackground(secondTextureRegionDrawableBg); + + Label playerLabel = new Label(playerLabelText,skin); + Label playerScoreLabel = new Label(String.valueOf(playerHS),skin); + secondInnerTable.add(playerLabel).spaceTop(spacingOnBottom).pad(50); + secondInnerTable.add(playerScoreLabel).spaceTop(spacingOnBottom).pad(50); + outerTable.add(secondInnerTable); stage.addActor(outerTable); + stage.addActor(makeBackBtn()); } private void createHighScoreList() { @@ -139,12 +192,17 @@ public class ViewHighScoreForGameState extends State { e.printStackTrace(); } + innerTable.add(new Label(colOneText, skin)); + innerTable.add(new Label(colTwoText, skin)).spaceRight(spacingOnBottom); + innerTable.add(new Label(colThreeText, skin)); + innerTable.row(); + int length = Math.min(highscores.size(),5); for (int i = 0; i < length; i++){ Highscore hs = highscores.get(i); - Label placementLabel = new Label(String.valueOf(i+1)+". place: ",skin); + Label placementLabel = new Label(String.valueOf(i+1)+". ",skin); Label nameLabel = new Label(hs.getName()+" ",skin); Label scoreLabel = new Label(String.valueOf(hs.getValue()),skin); @@ -153,13 +211,6 @@ public class ViewHighScoreForGameState extends State { innerTable.add(scoreLabel); innerTable.row(); } - - - Label playerLabel = new Label(playerLabelText,skin); - Label playerScoreLabel = new Label(String.valueOf(playerHS),skin); - innerTable.add(playerLabel).spaceTop(spacingOnBottom); - innerTable.add(playerScoreLabel).spaceTop(spacingOnBottom); - innerTable.row(); } } \ No newline at end of file diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java b/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java index 1581ab299d45bd28f4ad0a4df81af07ca4f27c72..05f25908c2670975c6e1b25dbff647062a58d67e 100644 --- a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java +++ b/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java @@ -1,27 +1,38 @@ package com.gameware.game.states; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.InputEvent; import java.util.List; -import com.badlogic.gdx.scenes.scene2d.ui.Skin; + +import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; -import com.gameware.game.QueryIntermediate; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.gameware.game.GameWare; import com.gameware.game.models.Game; import java.io.IOException; - - -import java.io.IOException; - public class ViewHighScoreState extends State { private Table table; + private Table innerTable; + private ScrollPane scrollPane; private List<Game> games; private String backBtnText = "Back"; + private String BtnText = "View High Score!"; + + private Label stateNameLabel = new Label("High Scores", skin, "big"); + private Label secondStateNameLabel = new Label("Select game", skin, "big"); public ViewHighScoreState(GameStateManager gsm) { super(gsm); @@ -33,29 +44,62 @@ public class ViewHighScoreState extends State { e.printStackTrace(); } + makeStage(); + } + + private void makeStage(){ table = new Table(); table.setFillParent(true); + table.setBackground(background); + stateNameLabel.setFontScale(titleFontBigScale); + + table.add(stateNameLabel).spaceBottom(spacingOnBottomInputFIeld); + table.row(); + table.add(secondStateNameLabel).spaceBottom(spacingOnBottom); table.row(); + innerTable = new Table(); + + Pixmap bgPixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + bgPixmap.setColor(Color.SKY); + bgPixmap.fill(); + TextureRegionDrawable textureRegionDrawableBg = new TextureRegionDrawable(new TextureRegion(new Texture(bgPixmap))); + innerTable.setBackground(textureRegionDrawableBg); + for (Game g : games){ - TextButton gameBtn = new TextButton(g.getName(), skin); + innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).screenshot)).pad(spacingOnBottom); + Table innerInnerTable = new Table(); + innerInnerTable.add(new Label(g.getName(),skin)).spaceBottom(spacingOnBottom); + innerInnerTable.row(); + TextButton gameBtn = new TextButton(BtnText, skin); gameBtn.addListener(new ViewHighScoreState.MyClickListener(g)); - table.add(gameBtn).spaceBottom(spacingOnBottom); - table.row(); + innerInnerTable.add(gameBtn); + innerTable.add(innerInnerTable); + innerTable.row(); } - table.add(makeBackBtn()).spaceBottom(spacingOnBottom); + scrollPane = new ScrollPane(innerTable, skin); + table.add(scrollPane).spaceBottom(spacingOnBottom); + table.getCell(scrollPane).size(Gdx.graphics.getWidth()/1.2f, Gdx.graphics.getHeight()/3f); + table.row(); + stage.addActor(table); + stage.addActor(makeBackBtn()); } @Override protected void handleInput() { - + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } } @Override public void update(float dt) { + Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); } @@ -80,6 +124,7 @@ public class ViewHighScoreState extends State { @Override public void clicked(InputEvent e, float x, float y){ handleBackBtnClick(); } }); + backBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return backBtn; } diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java index dd9814c1194909e628f9f701017ce4217a942b31..7921084c889773ffd6a249a2e6da22067ad07713 100644 --- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java +++ b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java @@ -1,9 +1,14 @@ package com.gameware.game.states; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.Dialog; +import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; @@ -27,11 +32,10 @@ public class ViewTournamentState extends State { private String leaveBtnText = "Leave"; private String playBtnText = "Play Round"; private String viewPointsBtnText = "View Points"; - private String nrPlayersText = "Players in tournament"; - private String roundsLeftText = "Rounds left"; + private String nrPlayersText = "Players in tournament:"; + private String roundsLeftText = "Rounds left:"; public class LeaveClickListener extends ClickListener{ - //TODO: if (tournamentpoints != null && currentRoundNr == (tournament.totalGames) -> gå til finished state public void clicked(InputEvent event, float x, float y) { handleLeaveBtnClick(); @@ -55,11 +59,13 @@ public class ViewTournamentState extends State { table.add(stateNameText).spaceBottom(spacingOnBottomInputFIeld); table.row(); - if(round.isPlayed()){ - table.add(new Label("You have aldready played\nWait for others to finish", skin)).spaceBottom(spacingOnBottomInputFIeld); - }else { - table.add(makePlayBtn()).size(buttonWidth*1.4f, buttonHeight*1.2f).spaceBottom(spacingOnBottomInputFIeld); - } + + table.add(makePlayBtn()).size(buttonWidth*1.4f, buttonHeight*1.2f).spaceBottom(spacingOnBottom); + + table.row(); + PlayStateTemplate state = GameWare.getInstance().getGameIdToPlayState().get(round.getGameId()); + table.add(new Image(state.screenshot)).spaceBottom(spacingOnBottomInputFIeld); + table.row(); table.add(new Label(nrPlayersText+" "+tournament.getPlayers().size(), skin)); table.row(); @@ -71,11 +77,10 @@ public class ViewTournamentState extends State { leaveBtn.addListener(new LeaveClickListener()); innerTable.add(leaveBtn).size(buttonWidth, buttonHeight).spaceBottom(spacingOnBottomInputFIeld).spaceRight(spacingOnBottom); innerTable.add(makeViewPointsBtn()).size(buttonWidth, buttonHeight).spaceBottom(spacingOnBottomInputFIeld); - innerTable.row(); - innerTable.add(makeBackBtn()); table.add(innerTable); stage.addActor(table); + stage.addActor(makeBackBtn()); makeDialog(); } @@ -98,7 +103,7 @@ public class ViewTournamentState extends State { } }; - dialog.text("Do you want do leave\n"+tournament.getName()+"?").pad(padding); + dialog.text("Do you want to leave\n"+tournament.getName()+"?").pad(padding); dialog.button("Yes", true).pad(padding); //sends "true" as the result dialog.button("No", false).pad(padding); //sends "false" as the result } @@ -111,19 +116,32 @@ public class ViewTournamentState extends State { handleBackBtnClick(); } }); + backBtn.setPosition(backBtnPlacementX, backBtnPlacementY); return backBtn; } private TextButton makePlayBtn(){ - TextButton playBtn = new TextButton(playBtnText, skin); - playBtn.addListener(new ClickListener() { - @Override - public void clicked(InputEvent e, float x, float y){ - handlePlayBtnClick(); - } - }); + TextButton playBtn; if(round.isPlayed()){ - playBtn.setDisabled(true); + TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle(); + textButtonStyle.up = skin.newDrawable("button", Color.GRAY); + textButtonStyle.down = skin.newDrawable("button", Color.DARK_GRAY); + textButtonStyle.checked = skin.newDrawable("button", Color.DARK_GRAY); + textButtonStyle.over = skin.newDrawable("button", Color.LIGHT_GRAY); + textButtonStyle.font = skin.getFont("font-big"); + textButtonStyle.fontColor = Color.LIGHT_GRAY; + + playBtn = new TextButton(playBtnText, textButtonStyle); + playBtn.setTouchable(Touchable.disabled); + } + else{ + playBtn = new TextButton(playBtnText, skin); + playBtn.addListener(new ClickListener() { + @Override + public void clicked(InputEvent e, float x, float y){ + handlePlayBtnClick(); + } + }); } return playBtn; } @@ -140,11 +158,17 @@ public class ViewTournamentState extends State { } @Override - protected void handleInput() { } + protected void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.BACK)){ + handleBackBtnClick(); + } + } @Override public void update(float dt) { Gdx.input.setInputProcessor(stage); + Gdx.input.setCatchBackKey(true); + handleInput(); stage.act(dt); }