Skip to content

Commit

Permalink
Merge pull request #269 from UQcsse3200/team-2-ahmad
Browse files Browse the repository at this point in the history
Team 2 - merge to team branch
  • Loading branch information
The-AhmadAA authored Oct 16, 2023
2 parents 2c00bc9 + 74ae017 commit f757a9d
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 104 deletions.
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.csse3200.game.components.maingame;

import com.badlogic.gdx.Input;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.ui.*;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.Array;
import com.csse3200.game.GdxGame;
import com.csse3200.game.entities.factories.PauseMenuFactory;
import com.csse3200.game.screens.MainGameScreen;
import com.csse3200.game.screens.TowerType;
import com.csse3200.game.services.ServiceLocator;
import com.csse3200.game.ui.ButtonFactory;
Expand All @@ -27,14 +29,15 @@ public class MainGameDisplay extends UIComponent {
private static final float Z_INDEX = 2f;
private final Table towerTable = new Table();
private final Table buttonTable = new Table();
private String[] sounds = {
private final String[] sounds = {
"sounds/ui/click/click_01.ogg",
"sounds/ui/open_close/open_01.ogg"
};
private Sound click;
private Sound openSound;
private GdxGame game;
private final GdxGame game;
private Array<TowerType> towers = new Array<>();
private final Array<ImageButton> towerButtons = new Array<>();
private ImageButton tower1;
private ImageButton tower2;
private ImageButton tower3;
Expand Down Expand Up @@ -107,10 +110,16 @@ private void addActors() {
ServiceLocator.setTowerTypes(towers);

tower1 = new ImageButton(skin, towers.get(0).getSkinName());
towerButtons.add(tower1);
tower2 = new ImageButton(skin, towers.get(1).getSkinName());
towerButtons.add(tower2);
tower3 = new ImageButton(skin, towers.get(2).getSkinName());
towerButtons.add(tower3);
tower4 = new ImageButton(skin, towers.get(3).getSkinName());
towerButtons.add(tower4);
tower5 = new ImageButton(skin, towers.get(4).getSkinName());
towerButtons.add(tower5);

TextButton pauseBtn = ButtonFactory.createButton("Pause");

// Spawns a pause menu when the button is pressed.
Expand All @@ -121,6 +130,23 @@ public void changed(ChangeEvent changeEvent, Actor actor) {
logger.debug("Pause button clicked");
openSound.play(0.4f);
PauseMenuFactory.createPauseMenu(game);
ServiceLocator.getTimeSource().setPaused(true);
}
});

// Pause menu escape key opening listener
stage.addListener(
new InputListener() {
@Override
public boolean keyUp(InputEvent event, int keycode) {
if ((keycode == Input.Keys.ESCAPE) && !ServiceLocator.getTimeSource().getPaused()) {
game.getScreen().pause();
openSound.play(0.4f);
PauseMenuFactory.createPauseMenu(game);
ServiceLocator.getTimeSource().setPaused(true);
return true;
}
return false;
}
});

Expand All @@ -133,15 +159,14 @@ public void clicked(InputEvent event, float x, float y) {
TowerType selected = ServiceLocator.getCurrencyService().getTower();
if (selected == towers.get(0) ) {
ServiceLocator.getCurrencyService().setTowerType(null);
tower1.setChecked(false);

towerToggle(null);

} else {
ServiceLocator.getCurrencyService().setTowerType(towers.get(0));
tower1.setChecked(true);
tower2.setChecked(false);
tower3.setChecked(false);
tower4.setChecked(false);
tower5.setChecked(false);

towerToggle(tower1);

}
click.play(0.4f);
}
Expand All @@ -158,14 +183,14 @@ public void clicked(InputEvent event, float x, float y) {
TowerType selected = ServiceLocator.getCurrencyService().getTower();
if (selected == towers.get(1) ) {
ServiceLocator.getCurrencyService().setTowerType(null);
tower2.setChecked(false);

towerToggle(null);

} else {
ServiceLocator.getCurrencyService().setTowerType(towers.get(1));
tower1.setChecked(false);
tower2.setChecked(true);
tower3.setChecked(false);
tower4.setChecked(false);
tower5.setChecked(false);

towerToggle(tower2);

}
click.play(0.4f);
}
Expand All @@ -181,17 +206,16 @@ public void clicked(InputEvent event, float x, float y) {
TowerType selected = ServiceLocator.getCurrencyService().getTower();
if (selected == towers.get(2)) {
ServiceLocator.getCurrencyService().setTowerType(null);
tower3.setChecked(false);

towerToggle(null);

} else {
ServiceLocator.getCurrencyService().setTowerType(towers.get(2));
if (ServiceLocator.getCurrencyService().getScrap().getAmount()
>= Integer.parseInt(towers.get(2).getPrice())) {
tower3.setDisabled(false);
tower1.setChecked(false);
tower2.setChecked(false);
tower3.setChecked(true);
tower4.setChecked(false);
tower5.setChecked(false);

towerToggle(tower3);

} else {
tower3.setDisabled(true);
}
Expand All @@ -211,14 +235,14 @@ public void clicked(InputEvent event, float x, float y) {
TowerType selected = ServiceLocator.getCurrencyService().getTower();
if (selected == towers.get(3)) {
ServiceLocator.getCurrencyService().setTowerType(null);
tower4.setChecked(false);

towerToggle(null);

} else {
ServiceLocator.getCurrencyService().setTowerType(towers.get(3));
tower1.setChecked(false);
tower2.setChecked(false);
tower3.setChecked(false);
tower4.setChecked(true);
tower5.setChecked(false);

towerToggle(tower4);

}
click.play(0.4f);
}
Expand All @@ -234,21 +258,22 @@ public void clicked(InputEvent event, float x, float y) {
TowerType selected = ServiceLocator.getCurrencyService().getTower();
if (selected == towers.get(4)) {
ServiceLocator.getCurrencyService().setTowerType(null);
tower5.setChecked(false);

towerToggle(null);

} else {
ServiceLocator.getCurrencyService().setTowerType(towers.get(4));
tower1.setChecked(false);
tower2.setChecked(false);
tower3.setChecked(false);
tower4.setChecked(false);
tower5.setChecked(true);

towerToggle(tower5);

}
click.play(0.4f);
}
});
TextTooltip tower5Tooltip = new TextTooltip(towers.get(4).getDescription(), getSkin());
tower5.addListener(tower5Tooltip);


// Scale all the tower build buttons down
// Add all buttons to their respective tables and position them
towerTable.add(tower1).padRight(10f);
Expand All @@ -270,43 +295,55 @@ public void clicked(InputEvent event, float x, float y) {
@Override
public void draw(SpriteBatch batch) {
// draw is handled by the stage
if (ServiceLocator.getCurrencyService().getTower() == null) {
towerUpdate();
}

tower1.setChecked(false);
tower2.setChecked(false);
tower3.setChecked(false);
tower4.setChecked(false);
tower5.setChecked(false);
}
int balance = ServiceLocator.getCurrencyService().getScrap().getAmount();
if (Integer.parseInt(towers.get(0).getPrice()) > balance) {
tower1.setDisabled(true);
} else {
tower1.setDisabled(false);
}
if (Integer.parseInt(towers.get(1).getPrice()) > balance) {
tower2.setDisabled(true);
} else {
tower2.setDisabled(false);
}
if (Integer.parseInt(towers.get(2).getPrice()) > balance) {
tower3.setDisabled(true);
/**
* Update function for the tower build menu buttons that is called with every draw, updates button states
* depending on button selection and currency balance
*/
private void towerUpdate() {
// no tower selected, set all to off
if (ServiceLocator.getCurrencyService().getTower() == null) {
// toggle all buttons to off
towerToggle(null);
} else {
tower3.setDisabled(false);
// for handling shortcut key selection of tower build buttons
for (int i = 0; i < towerButtons.size; i++) {
if (ServiceLocator.getCurrencyService().getTower() == towers.get(i)) {
towerToggle(towerButtons.get(i));
}
}
}
if (Integer.parseInt(towers.get(3).getPrice()) > balance) {
tower4.setDisabled(true);
} else {
tower4.setDisabled(false);
// update button state based on currency balance
int balance = ServiceLocator.getCurrencyService().getScrap().getAmount();
for (int i = 0; i < towerButtons.size; i++) {
towerButtons.get(i).setDisabled(Integer.parseInt(towers.get(i).getPrice()) > balance);
}
if (Integer.parseInt(towers.get(4).getPrice()) > balance) {
tower5.setDisabled(true);
}

/**
* Helper method for toggling tower build buttons. The expected behaviour is that if one button is pressed,
* all other buttons should be set to off. If a null button value is passed in then all buttons are set to off.
* <p></p>
* @param towerButton the ImageButton which is being set to on, all others will be toggled off. If null, all buttons
* will be set to off
*/
private void towerToggle(ImageButton towerButton) {
if (towerButton == null) {
// set all buttons to off, disable if isDisabled
for (ImageButton button : towerButtons) {
button.setChecked(false);
// button.setDisabled(isDisabled);
}
} else {
tower5.setDisabled(false);
// set the button corresponding to towerButton to on, all others to off
for (ImageButton button : towerButtons) {
button.setChecked(button == towerButton);
// button.setDisabled(isDisabled && button == towerButton);
}

}
}

@Override
public float getZIndex() {
return Z_INDEX;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,12 @@
package com.csse3200.game.components.maingame;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction;
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.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Null;
import com.csse3200.game.screens.TowerType;
import com.csse3200.game.services.ServiceLocator;
import com.csse3200.game.ui.ButtonFactory;
import com.csse3200.game.ui.UIComponent;
Expand All @@ -34,7 +24,6 @@ public class UIElementsDisplay extends UIComponent {
private TextButton remainingMobsButton;
private TextButton timerButton;
private LevelProgressBar progressbar;
private final int timer = 110;

@Override
public void create() {
Expand Down Expand Up @@ -67,7 +56,7 @@ private void addActors() {
}

public void updateLevelProgressBar() {
float totalSecs = (ServiceLocator.getTimeSource().getTime() / 1000);
float totalSecs = ((float) ServiceLocator.getTimeSource().getTime() / 1000);
progressbar.setValue(totalSecs);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
package com.csse3200.game.components.pausemenu;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.Window;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.csse3200.game.GdxGame;
import com.csse3200.game.components.maingame.MainGameDisplay;
import com.csse3200.game.entities.factories.PauseMenuFactory;
import com.csse3200.game.services.ServiceLocator;
import com.csse3200.game.ui.ButtonFactory;
import com.csse3200.game.ui.UIComponent;
Expand Down Expand Up @@ -65,6 +73,7 @@ public void changed(ChangeEvent changeEvent, Actor actor) {
logger.debug("Continue button clicked");
click.play(0.5f);
closeSound.play(0.5f);
ServiceLocator.getTimeSource().setPaused(false);
entity.dispose();
}
});
Expand Down Expand Up @@ -96,7 +105,25 @@ public void changed(ChangeEvent changeEvent, Actor actor) {
}
});

window.setKeepWithinStage(true);
window.addListener(
new InputListener() {

@Override
public boolean keyUp (InputEvent event, int keycode) {
if (keycode == Input.Keys.ESCAPE && ServiceLocator.getTimeSource().getPaused()) {
logger.debug("Closing pause menu with escape key");
click.play(0.5f);
closeSound.play(0.5f);
ServiceLocator.getTimeSource().setPaused(false);
entity.dispose();
return true;
}
return false;
}
}
);

// window.setKeepWithinStage(true);
window.setResizable(true);
window.setModal(true);
window.setTouchable(Touchable.enabled);
Expand All @@ -114,6 +141,7 @@ public void changed(ChangeEvent changeEvent, Actor actor) {
window.setHeight(windowSizeY);
window.setX((ServiceLocator.getRenderService().getStage().getWidth() / 2) - (windowSizeX / 2));
window.setY((ServiceLocator.getRenderService().getStage().getHeight() / 2) - (windowSizeY / 2));
window.addAction(Actions.fadeIn(0.8f, Interpolation.bounceIn));

stage.addActor(window);
}
Expand Down
Loading

0 comments on commit f757a9d

Please sign in to comment.