From b3d5be8a29ab626999472883c65af089ce4c3f2a Mon Sep 17 00:00:00 2001 From: MajorDzaster Date: Mon, 16 Oct 2023 20:42:02 +1000 Subject: [PATCH 1/7] Added missing javadoc comments. --- .../pausemenu/PauseMenuButtonComponent.java | 18 +++++++++++++++++- .../pausemenu/PauseMenuTimeStopComponent.java | 1 - .../popupmenu/PopupMenuInputComponent.java | 12 +++++------- .../tower/TowerUpgraderComponent.java | 8 ++++++-- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java index 0f4dafbee..7dd86513d 100644 --- a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java +++ b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java @@ -24,6 +24,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Implements the visual aspects of the pause menu, including button interactions. + */ public class PauseMenuButtonComponent extends UIComponent { private static final Logger logger = LoggerFactory.getLogger(PauseMenuButtonComponent.class); private static final float Z_INDEX = 2f; @@ -42,6 +45,9 @@ public PauseMenuButtonComponent(GdxGame screenSwitchHandle) { game = screenSwitchHandle; } + /** + * Sets up the buttons and window of the pause menu when it is first made. + */ @Override public void create() { super.create(); @@ -105,7 +111,6 @@ public void changed(ChangeEvent changeEvent, Actor actor) { } }); - window.setResizable(true); window.setModal(true); window.setTouchable(Touchable.enabled); @@ -128,6 +133,10 @@ public void changed(ChangeEvent changeEvent, Actor actor) { stage.addActor(window); } + /** + * Draws the pause menu on the game screen. + * @param batch Batch to render to. + */ @Override protected void draw(SpriteBatch batch) { // handled by stage @@ -143,11 +152,18 @@ public void loadSounds() { closeSound = ServiceLocator.getResourceService().getAsset(sounds[1], Sound.class); } + /** + * Gets the z-index of the pause menu + * @return The z-index of the pause menu + */ @Override public float getZIndex() { return Z_INDEX; } + /** + * Removes the pause menu when the entity is disposed. + */ @Override public void dispose() { click.play(0.5f); diff --git a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponent.java b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponent.java index e581d47d1..f8f50068e 100644 --- a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponent.java +++ b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponent.java @@ -10,7 +10,6 @@ * Handles the pausing/resuming of time when the pause menu is brought up/put away. */ public class PauseMenuTimeStopComponent extends Component { - private Array freezeList; public PauseMenuTimeStopComponent() { } diff --git a/source/core/src/main/com/csse3200/game/components/popupmenu/PopupMenuInputComponent.java b/source/core/src/main/com/csse3200/game/components/popupmenu/PopupMenuInputComponent.java index a12dd12ad..43907be2f 100644 --- a/source/core/src/main/com/csse3200/game/components/popupmenu/PopupMenuInputComponent.java +++ b/source/core/src/main/com/csse3200/game/components/popupmenu/PopupMenuInputComponent.java @@ -7,14 +7,12 @@ * This input handler only uses keyboard input. */ public class PopupMenuInputComponent extends InputComponent{ - /** TO DO: - * This component's end goal is to send a deactivation trigger when the - * user clicks on anything other than the menu entity, and reactivate it - * if the user clicks on a tower, with the new tower's stats as per its - * config file. - * Current implementation step: trigger a generic event whenever - * the mouse is clicked, with no checks for the entity clicked on. + /** + * !!! + * NOTE: THIS CLASS IS OBSOLETE + * !!! */ + public PopupMenuInputComponent() {super(1);} // Note: will need to change constructor's priority when merging with other // branches that add other input components. diff --git a/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java b/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java index e83210b48..577a865e2 100644 --- a/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java +++ b/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java @@ -3,17 +3,21 @@ import com.csse3200.game.components.CombatStatsComponent; import com.csse3200.game.components.Component; -import static com.csse3200.game.screens.TowerType.INCOME; - /** * Listens for an event from the popup menu to upgrade * the turret entity this component is attached to. */ public class TowerUpgraderComponent extends Component { + /** + * Enum for specifying what type of upgrade to implement + */ public enum UPGRADE { ATTACK, MAXHP, FIRERATE, REPAIR, INCOME } + /** + * Creates the component and sets it up to respond to upgrade event triggers. + */ @Override public void create() { super.create(); From b42848345bb827ad7cf87a686bdb8d152da6a904 Mon Sep 17 00:00:00 2001 From: MajorDzaster Date: Mon, 16 Oct 2023 20:57:52 +1000 Subject: [PATCH 2/7] Updated junit testsfor the pause menu factory and time stop component --- .../PauseMenuTimeStopComponentTest.java | 17 +++++++++++++++-- .../factories/PauseMenuFactoryTest.java | 4 ---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/source/core/src/test/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponentTest.java b/source/core/src/test/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponentTest.java index f097b5bb3..3018c6434 100644 --- a/source/core/src/test/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponentTest.java +++ b/source/core/src/test/com/csse3200/game/components/pausemenu/PauseMenuTimeStopComponentTest.java @@ -19,9 +19,9 @@ public class PauseMenuTimeStopComponentTest { void beforeEach() { EntityService entityService = new EntityService(); ServiceLocator.registerEntityService(entityService); - WaveService waveService = new WaveService(); + WaveService waveService = mock(WaveService.class); ServiceLocator.registerWaveService(waveService); - GameTime gameTime = new GameTime(); + GameTime gameTime = mock(GameTime.class); ServiceLocator.registerTimeSource(gameTime); entity = mock(Entity.class); when(entity.getId()).thenReturn(-1); //Ensure it does not coincide with the pause menu's ID @@ -52,4 +52,17 @@ void doesNotPauseNewEntities() { ServiceLocator.getEntityService().register(lateEntity); verify(lateEntity, times(0)).setEnabled(false); } + + @Test + void waveServiceIsPaused() { + ServiceLocator.getEntityService().register(pauseMenu); + verify(ServiceLocator.getWaveService()).toggleGamePause(); + } + + @Test + void waveServiceIsPausedAndUnpaused() { + ServiceLocator.getEntityService().register(pauseMenu); + pauseMenu.dispose(); + verify(ServiceLocator.getWaveService(), times(2)).toggleGamePause(); + } } diff --git a/source/core/src/test/com/csse3200/game/entities/factories/PauseMenuFactoryTest.java b/source/core/src/test/com/csse3200/game/entities/factories/PauseMenuFactoryTest.java index 1feb7101f..ddcb22223 100644 --- a/source/core/src/test/com/csse3200/game/entities/factories/PauseMenuFactoryTest.java +++ b/source/core/src/test/com/csse3200/game/entities/factories/PauseMenuFactoryTest.java @@ -22,9 +22,6 @@ public class PauseMenuFactoryTest { Entity entity; GdxGame game; - String[] texture = { - "images/ui/Sprites/UI_Glass_Toggle_Bar_01a.png" - }; @BeforeEach void beforeEach() { EntityService entityService = new EntityService(); @@ -38,7 +35,6 @@ void beforeEach() { ServiceLocator.registerRenderService(renderService); ResourceService resourceService = new ResourceService(); ServiceLocator.registerResourceService(resourceService); - resourceService.loadTextures(texture); resourceService.loadAll(); game = mock(GdxGame.class); From 8cfe268caa5ac8b6bf240053a202d70c3a53b769 Mon Sep 17 00:00:00 2001 From: Shivam Date: Mon, 16 Oct 2023 21:12:29 +1000 Subject: [PATCH 3/7] Fixed animation for in-game ui buttons and finished start-up animations for in-game ui labels --- .../game/components/gamearea/CurrencyDisplay.java | 12 ++++++++++-- .../components/gamearea/EngineerCountDisplay.java | 8 +++++++- .../game/components/maingame/MainGameDisplay.java | 8 ++++---- .../components/maingame/UIElementsDisplay.java | 15 +++++++++------ 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/source/core/src/main/com/csse3200/game/components/gamearea/CurrencyDisplay.java b/source/core/src/main/com/csse3200/game/components/gamearea/CurrencyDisplay.java index c32cbc0de..84dfcebf0 100644 --- a/source/core/src/main/com/csse3200/game/components/gamearea/CurrencyDisplay.java +++ b/source/core/src/main/com/csse3200/game/components/gamearea/CurrencyDisplay.java @@ -1,5 +1,6 @@ package com.csse3200.game.components.gamearea; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.Texture; @@ -56,11 +57,18 @@ private void addActors() { ServiceLocator.getCurrencyService().getCrystal().getAmount()); table.add(scrapsTb).width(scrapsTb.getWidth() * 0.5f).height(scrapsTb.getHeight() * 0.5f); + table.row(); table.add(crystalsTb).width(crystalsTb.getWidth() * 0.5f).height(crystalsTb.getHeight() * 0.5f); + table.setDebug(true); stage.addActor(table); - scrapsTb.addAction(new SequenceAction(Actions.fadeIn(4f))); - crystalsTb.addAction(new SequenceAction(Actions.fadeIn(8f))); + scrapsTb.setPosition(table.getX() - 200, Gdx.graphics.getHeight() - 205); + scrapsTb.addAction(new SequenceAction(Actions.moveTo(table.getX() + 20, Gdx.graphics.getHeight() - 205, + 1f, Interpolation.fastSlow))); + + crystalsTb.setPosition(table.getX() - 200, Gdx.graphics.getHeight() - 268); + crystalsTb.addAction(new SequenceAction(Actions.moveTo(table.getX() + 20, Gdx.graphics.getHeight() - 268, + 1f, Interpolation.fastSlow))); } private TextButton createButton(String imageFilePath, int value) { diff --git a/source/core/src/main/com/csse3200/game/components/gamearea/EngineerCountDisplay.java b/source/core/src/main/com/csse3200/game/components/gamearea/EngineerCountDisplay.java index 905220f5d..414fce76f 100644 --- a/source/core/src/main/com/csse3200/game/components/gamearea/EngineerCountDisplay.java +++ b/source/core/src/main/com/csse3200/game/components/gamearea/EngineerCountDisplay.java @@ -1,8 +1,10 @@ package com.csse3200.game.components.gamearea; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.actions.Actions; import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction; @@ -34,6 +36,7 @@ private void addActors() { table.top().left(); table.setFillParent(true); table.padTop(80f).padLeft(20f); + table.setDebug(true); Drawable drawable = new TextureRegionDrawable(new TextureRegion( new Texture("images/engineers/engineerBanner.png"))); @@ -54,7 +57,10 @@ private void addActors() { table.add(engineerTb).width(engineerTb.getWidth() * 0.5f).height(engineerTb.getHeight() * 0.5f); stage.addActor(table); - engineerTb.addAction(new SequenceAction(Actions.fadeIn(4f))); + // Animate the engineer count label + engineerTb.setPosition(table.getX() - 200, Gdx.graphics.getHeight() - 145); + engineerTb.addAction(new SequenceAction(Actions.moveTo(table.getX() + 20, Gdx.graphics.getHeight() - 145, + 1f, Interpolation.fastSlow))); } /** diff --git a/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java b/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java index f9d6c4de1..221a316cd 100644 --- a/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java +++ b/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java @@ -86,17 +86,17 @@ private void addActors() { // Create and position the tables that will hold the buttons. // Contains the tower build menu buttons - towerTable.top().padTop(50f); + towerTable.top().padTop(80f); towerTable.setFillParent(true); // Contains other buttons (just pause at this stage) - buttonTable.top().right().padTop(50f).padRight(80f); + buttonTable.top().right().padTop(80f).padRight(80f); buttonTable.setFillParent(true); progressTable.top().center().setWidth(500f); progressTable.setFillParent(true); - levelNameTable.top().left().padLeft(20f).padTop(20f); + levelNameTable.center().top().padLeft(20f).padTop(20f).pad(20f); levelNameTable.setFillParent(true); // Stores tower defaults, in case towers haven't been set in the tower select screen @@ -306,7 +306,7 @@ public void clicked(InputEvent event, float x, float y) { progressbar = new LevelProgressBar(500, 10); levelNameTable.setSkin(getSkin()); - levelNameTable.add(this.level, "title"); + levelNameTable.add(this.level, "default"); // Scale all the tower build buttons down // Add all buttons to their respective tables and position them diff --git a/source/core/src/main/com/csse3200/game/components/maingame/UIElementsDisplay.java b/source/core/src/main/com/csse3200/game/components/maingame/UIElementsDisplay.java index 6b0d93bf1..84aa11902 100644 --- a/source/core/src/main/com/csse3200/game/components/maingame/UIElementsDisplay.java +++ b/source/core/src/main/com/csse3200/game/components/maingame/UIElementsDisplay.java @@ -26,6 +26,7 @@ public class UIElementsDisplay extends UIComponent { private static final Logger logger = LoggerFactory.getLogger(UIElementsDisplay.class); private static final float Z_INDEX = 2f; private final Table buttonTable = new Table(); + private final Table timerTable = new Table(); private TextButton remainingMobsButton; private TextButton timerButton; @@ -44,15 +45,14 @@ private void addActors() { + ServiceLocator.getWaveService().getEnemyCount()); remainingMobsButton.setPosition(Gdx.graphics.getWidth(), Gdx.graphics.getHeight() - 230); - remainingMobsButton.addAction(new SequenceAction(Actions.moveTo(Gdx.graphics.getWidth() - 218, + remainingMobsButton.addAction(new SequenceAction(Actions.moveTo(Gdx.graphics.getWidth() - 217, Gdx.graphics.getHeight() - 230, 1f, Interpolation.fastSlow))); - buttonTable.top().right().padTop(130f).padRight(80f); + buttonTable.top().right().padTop(160f).padRight(80f); buttonTable.setFillParent(true); buttonTable.add(remainingMobsButton).right(); - buttonTable.row(); - buttonTable.add(timerButton); + stage.addActor(buttonTable); @@ -82,10 +82,11 @@ public void createTimerButton() { timerButton = ButtonFactory.createButton("Next wave in:" + (ServiceLocator.getWaveService().getNextWaveTime() / 1000)); timerButton.setPosition(Gdx.graphics.getWidth(), Gdx.graphics.getHeight() - 300); - timerButton.addAction(new SequenceAction(Actions.moveTo(Gdx.graphics.getWidth() - 445, + timerButton.addAction(new SequenceAction(Actions.moveTo(Gdx.graphics.getWidth() - 435, Gdx.graphics.getHeight() - 300, 1f, Interpolation.fastSlow))); + timerButton.setDisabled(true); buttonTable.row(); - buttonTable.add(timerButton).padRight(10f); + buttonTable.add(timerButton); } /** @@ -106,10 +107,12 @@ public void updateTimerButton() { String finalTime = String.format("%02d:%02d", minutes, seconds); if (ServiceLocator.getTimeSource().getTime() < ServiceLocator.getWaveService().getNextWaveTime()) { if (!findActor(timerButton)) { + remainingMobsButton.setDisabled(false); createTimerButton(); } timerButton.setText("Next wave in: " + finalTime); } else { + remainingMobsButton.setDisabled(true); timerButton.addAction(new SequenceAction(Actions.fadeOut(1f), Actions.removeActor())); stage.act(); stage.draw(); From 9b5f3926eccd193715e4f2fe349aa4de65fe58b9 Mon Sep 17 00:00:00 2001 From: MajorDzaster Date: Mon, 16 Oct 2023 21:13:59 +1000 Subject: [PATCH 4/7] Fixed code smells in PauseMenuButtonComponent and TowerUpgraderComponent --- .../components/pausemenu/PauseMenuButtonComponent.java | 6 ------ .../game/components/tower/TowerUpgraderComponent.java | 10 +++++----- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java index 7dd86513d..ecf7904d7 100644 --- a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java +++ b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java @@ -1,23 +1,17 @@ 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; diff --git a/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java b/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java index 577a865e2..4394d6309 100644 --- a/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java +++ b/source/core/src/main/com/csse3200/game/components/tower/TowerUpgraderComponent.java @@ -33,11 +33,11 @@ public void create() { */ public void upgradeTower(UPGRADE upgradeType, int value) { switch (upgradeType) { - case INCOME -> {getEntity().getEvents().trigger("addIncome", value);} - case ATTACK -> {upgradeTowerAttack(value);} - case MAXHP -> {upgradeTowerMaxHealth( value);} - case FIRERATE -> {getEntity().getEvents().trigger("addFireRate", value);} - case REPAIR -> {repairTower();} + case INCOME -> getEntity().getEvents().trigger("addIncome", value); + case ATTACK -> upgradeTowerAttack(value); + case MAXHP -> upgradeTowerMaxHealth( value); + case FIRERATE -> getEntity().getEvents().trigger("addFireRate", value); + case REPAIR -> repairTower(); } } From 57739fe3d06d481463b039db9ab5ec11a1b9f7bb Mon Sep 17 00:00:00 2001 From: Shivam Date: Mon, 16 Oct 2023 21:15:23 +1000 Subject: [PATCH 5/7] fixed floating integer in the middle of the screen --- .../com/csse3200/game/components/maingame/MainGameDisplay.java | 1 - 1 file changed, 1 deletion(-) diff --git a/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java b/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java index a96d09a7f..e17398437 100644 --- a/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java +++ b/source/core/src/main/com/csse3200/game/components/maingame/MainGameDisplay.java @@ -315,7 +315,6 @@ public void clicked(InputEvent event, float x, float y) { towerTable.add(tower3).padRight(10f); towerTable.add(tower4).padRight(10f); towerTable.add(tower5).padRight(10f); - towerTable.stack(new Label(String.format("%s", towers.get(0).getPrice()), getSkin())); towerTable.row(); towerTable.add("1", "small"); towerTable.add("2", "small"); From 955e1fd28321b93c3381248641a3264421ae7b7c Mon Sep 17 00:00:00 2001 From: AlasdairS4698737 <140377359+AlasdairS4698737@users.noreply.github.com> Date: Mon, 16 Oct 2023 21:26:11 +1000 Subject: [PATCH 6/7] Update PauseMenuButtonComponent.java --- .../game/components/pausemenu/PauseMenuButtonComponent.java | 1 + 1 file changed, 1 insertion(+) diff --git a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java index ecf7904d7..65d7b070e 100644 --- a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java +++ b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java @@ -7,6 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.actions.Actions; +import com.badlogic.gdx.scenes.scene2d.actions.SequenceActions; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.Window; From cda15de15ff07971e2be4041b6f95383fa57967c Mon Sep 17 00:00:00 2001 From: AlasdairS4698737 <140377359+AlasdairS4698737@users.noreply.github.com> Date: Mon, 16 Oct 2023 21:26:39 +1000 Subject: [PATCH 7/7] Update PauseMenuButtonComponent.java --- .../game/components/pausemenu/PauseMenuButtonComponent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java index 65d7b070e..c82e4e9c8 100644 --- a/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java +++ b/source/core/src/main/com/csse3200/game/components/pausemenu/PauseMenuButtonComponent.java @@ -7,7 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.actions.Actions; -import com.badlogic.gdx.scenes.scene2d.actions.SequenceActions; +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;