From 54ac755456eebf789b7ac56d155e2426430b7daa Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Fri, 21 Apr 2023 14:49:09 +0200 Subject: [PATCH 01/23] render hero --- core/src/com/mygdx/game/Board.java | 4 ---- core/src/com/mygdx/game/states/PlayState.java | 21 +++++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/core/src/com/mygdx/game/Board.java b/core/src/com/mygdx/game/Board.java index ba45fd3..96983a8 100644 --- a/core/src/com/mygdx/game/Board.java +++ b/core/src/com/mygdx/game/Board.java @@ -314,10 +314,6 @@ public class Board extends Actor { Entity hero = HeroFactory.createHero(getChosenHeroType(), placementPosition); engine.addEntity(hero); System.out.println("Created new hero entity and added to game engine"); - System.out.println("all heroes: :)"); - for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class).get())) { - System.out.println(e.getComponent(HeroComponent.class).getHeroType()); - } } } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index beb617e..31c8767 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -1,7 +1,9 @@ package com.mygdx.game.states; +import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.Family; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.Gdx; @@ -22,6 +24,10 @@ import com.badlogic.gdx.utils.viewport.ScreenViewport; import com.mygdx.game.Board; import com.mygdx.game.MoneySystem; import com.mygdx.game.SoundManager; +import com.mygdx.game.components.AttackComponent; +import com.mygdx.game.components.HeroComponent; +import com.mygdx.game.components.PositionComponent; +import com.mygdx.game.components.SpriteComponent; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.systems.HeroSystem; @@ -43,6 +49,9 @@ public class PlayState extends State{ private static Engine engine; private Board board; private TextButton counterText1; + private List<Image> heroImages = new ArrayList<>(); + private List<Image> heroProjectiles = new ArrayList<>(); + private List<Image> monsterImages = new ArrayList<>(); public PlayState() { //super(gsm); @@ -123,6 +132,18 @@ public class PlayState extends State{ board.getRightTable().row(); } + public void renderHeroes() { + for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class, AttackComponent.class).get())) { + Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); + Vector2 position = e.getComponent(PositionComponent.class).getPosition(); + + Image heroImage = new Image(sprite); + batch.begin(); + batch.draw(heroImage, e); + heroImages.add(heroImage); + } + } + @Override public void render(SpriteBatch batch) { -- GitLab From 17c6080ac054e1b56f679c9a40c359c6ddcb61c4 Mon Sep 17 00:00:00 2001 From: sindrimt <sindrimt@gmail.com> Date: Fri, 21 Apr 2023 14:59:59 +0200 Subject: [PATCH 02/23] merged money and dev --- core/src/com/mygdx/game/Board.java | 73 ++++++++++++++++--- .../mygdx/game/utils/DisplayHeroButton.java | 13 ++++ 2 files changed, 75 insertions(+), 11 deletions(-) diff --git a/core/src/com/mygdx/game/Board.java b/core/src/com/mygdx/game/Board.java index ba45fd3..9d139a0 100644 --- a/core/src/com/mygdx/game/Board.java +++ b/core/src/com/mygdx/game/Board.java @@ -9,6 +9,7 @@ import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; @@ -20,6 +21,7 @@ import com.badlogic.gdx.scenes.scene2d.InputEvent; 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.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; @@ -48,9 +50,9 @@ public class Board extends Actor { private int cellHeight; private SpriteBatch batch; - private int xOffset = 315; // Add xOffset for moving textures right private int yOffset = 0; // Add yOffset for moving textures up or down - private int dashOffset = 315; // Add dashOffset for moving dashed lines right + private int xOffset = 225; // Add xOffset for moving textures right (previously 315) + private int dashOffset = 225; // Add dashOffset for moving dashed lines right (previously 315) private Texture[] buttonTextures; private Texture[] displayTextures; @@ -77,6 +79,8 @@ public class Board extends Actor { private boolean gridDrawn; private boolean isInputProcessorAdded; private Engine engine; + private MoneySystem moneySystem = new MoneySystem(8000); + public Board(int rows, int cols, Engine engine) { @@ -111,6 +115,24 @@ public class Board extends Actor { Gdx.input.setInputProcessor(multiplexer); } + private void drawCounter() { + float iconSize = Gdx.graphics.getHeight() / 15; + float iconX = screenWidth - iconSize * 2 - 160; // Move 200 pixels to the left + float iconY = screenHeight - iconSize - 50; + + BitmapFont font = new BitmapFont(); + font.getData().setScale(3.5f); + font.getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); + Texture counterIcon = new Texture("coin.png"); + + this.batch.begin(); + font.draw(batch, String.valueOf(moneySystem.getMoney()), iconX + iconSize * 1.5f, iconY + iconSize * 0.75f); + + batch.draw(counterIcon, iconX, iconY, iconSize, iconSize); + this.batch.end(); + } + + public int getRows() { return rows; } @@ -161,6 +183,9 @@ public class Board extends Actor { drawDisplayHeroButtons(); this.stage.act(); this.stage.draw(); + drawCounter(); + + } @@ -194,6 +219,10 @@ public class Board extends Actor { //Creates new hero entity and sets its position to the middle of the clicked cell getChosenHeroType(); placeHero(heroPlacement); + + System.out.println("Cell clicked: row " + row + ", col " + col); + moneySystem.removeMoney(450); + } @@ -261,24 +290,30 @@ public class Board extends Actor { public void drawDisplayHeroButtons() { float circleRadius = Gdx.graphics.getHeight() / 15; - int diameter = (int) (circleRadius * 2); + int diameter = (int) ((circleRadius * 2) + 5); Texture circleTexture = createWhiteCircle(circleRadius); + BitmapFont font = new BitmapFont(); // Create a BitmapFont instance + font.getData().setScale(2); // Increase the font size + Label.LabelStyle labelStyle = new Label.LabelStyle(font, Color.WHITE); // Set the font and color (white) for the label style + + for (final DisplayHeroButton button : displayHeroButtons) { - //Group for the DisplayHero-button Group buttonGroup = new Group(); - //Button background + // Group for the DisplayHero-button + + // Button background Image circle = new Image(circleTexture); circle.setPosition(button.getPosition().x - button.getPosition().x / 2, button.getPosition().y); circle.setSize(diameter, diameter); buttonGroup.addActor(circle); - //Button with hero-texture + // Button with hero-texture final Button buttonClickable = new Button(new TextureRegionDrawable(new TextureRegion(button.getTexture()))); buttonClickable.setPosition(button.getPosition().x, button.getPosition().y); - buttonClickable.setSize(button.getWidth(), button.getHeight()); + buttonClickable.setSize(button.getWidth() - 30, button.getHeight() - 40); - //Event listener + // Event listener buttonClickable.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { @@ -286,11 +321,24 @@ public class Board extends Actor { setChosenHeroType(button.getHeroType()); } }); + buttonGroup.addActor(buttonClickable); - stage.addActor(buttonGroup); + + // Create the label for the button number + Label buttonNumber = new Label(Integer.toString(button.getPrice()), labelStyle); + + // Adjust the label's position to be centered horizontally and vertically below the button + float labelX = button.getPosition().x + (button.getWidth() / 2) - (buttonNumber.getWidth() / 2); + float labelY = button.getPosition().y - (buttonNumber.getHeight() * 1.5f); + buttonNumber.setPosition(labelX, labelY); + + buttonGroup.addActor(buttonNumber); // Add the label to the buttonGroup + stage.addActor(buttonGroup); // Add the buttonGroup to the stage + } } + /* Tegner heroesene og den hvite sirkelen bak. for (DisplayHeroButton button : displayHeroButtons) { //draw circles @@ -340,13 +388,16 @@ public class Board extends Actor { shapeRenderer.setColor(leftRightPaneColor); shapeRenderer.rect(0, 0, Gdx.graphics.getWidth() / 8, Gdx.graphics.getHeight()); - // Draw right pane background + // Draw right pane background with increased padding + float padding = 80; + float rightPaneWidth = Gdx.graphics.getWidth() / 8; shapeRenderer.setColor(leftRightPaneColor); - shapeRenderer.rect(Gdx.graphics.getWidth() * 7 / 8, 0, Gdx.graphics.getWidth() / 8, Gdx.graphics.getHeight()); + shapeRenderer.rect(Gdx.graphics.getWidth() - rightPaneWidth - padding, 0, rightPaneWidth + padding, Gdx.graphics.getHeight()); shapeRenderer.end(); } + public Table getRightTable() { return rightTable; } diff --git a/core/src/com/mygdx/game/utils/DisplayHeroButton.java b/core/src/com/mygdx/game/utils/DisplayHeroButton.java index 9aeaeeb..1132c8a 100644 --- a/core/src/com/mygdx/game/utils/DisplayHeroButton.java +++ b/core/src/com/mygdx/game/utils/DisplayHeroButton.java @@ -12,6 +12,17 @@ public class DisplayHeroButton { float height; Texture texture; HeroType heroType; + int price; + + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + public float getWidth() { return width; @@ -43,6 +54,7 @@ public class DisplayHeroButton { this.heroType = displayHero.getHeroComponent().getHeroType(); this.height = displayHero.getSpriteComponent().getSprite().getHeight() * 4; this.width = displayHero.getSpriteComponent().getSprite().getWidth() * 4; + this.price = displayHero.getPriceComponent().getPrice(); } public Vector2 getPosition() { @@ -61,3 +73,4 @@ public class DisplayHeroButton { this.texture = texture; } } + -- GitLab From d00ea56e03fa0879bf8adff67188bf89a03712ec Mon Sep 17 00:00:00 2001 From: Johannes Finne Reinseth <johannes.reinseth@aboveit.no> Date: Fri, 21 Apr 2023 15:14:21 +0200 Subject: [PATCH 03/23] feat: leave game from settings in singleplayer --- .../{sprites => ds/buttons}/CircleButton.java | 3 +- .../game/ds/buttons/RectangleButton.java | 51 +++++++++++ .../src/com/mygdx/game/states/DummyState.java | 3 +- .../com/mygdx/game/states/GameMenuState.java | 3 +- .../mygdx/game/states/GameStateManager.java | 3 + core/src/com/mygdx/game/states/PlayState.java | 21 ++++- .../com/mygdx/game/states/SettingsState.java | 91 ++++++++++++------- .../src/com/mygdx/game/states/StartState.java | 5 +- core/src/com/mygdx/game/utils/Enums.java | 19 ++++ core/src/com/mygdx/game/utils/Slider.java | 26 ++---- 10 files changed, 163 insertions(+), 62 deletions(-) rename core/src/com/mygdx/game/{sprites => ds/buttons}/CircleButton.java (96%) create mode 100644 core/src/com/mygdx/game/ds/buttons/RectangleButton.java create mode 100644 core/src/com/mygdx/game/utils/Enums.java diff --git a/core/src/com/mygdx/game/sprites/CircleButton.java b/core/src/com/mygdx/game/ds/buttons/CircleButton.java similarity index 96% rename from core/src/com/mygdx/game/sprites/CircleButton.java rename to core/src/com/mygdx/game/ds/buttons/CircleButton.java index 4ea6a44..edb8196 100644 --- a/core/src/com/mygdx/game/sprites/CircleButton.java +++ b/core/src/com/mygdx/game/ds/buttons/CircleButton.java @@ -1,4 +1,4 @@ -package com.mygdx.game.sprites; +package com.mygdx.game.ds.buttons; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; @@ -13,7 +13,6 @@ public class CircleButton { private int radius; private Texture img; - public CircleButton(int radius, int xStart, int yStart, String internalPath) { this.radius = radius; this.position = new Vector2(xStart, yStart); diff --git a/core/src/com/mygdx/game/ds/buttons/RectangleButton.java b/core/src/com/mygdx/game/ds/buttons/RectangleButton.java new file mode 100644 index 0000000..7e692d7 --- /dev/null +++ b/core/src/com/mygdx/game/ds/buttons/RectangleButton.java @@ -0,0 +1,51 @@ +package com.mygdx.game.ds.buttons; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; + +public class RectangleButton { + + private final Vector2 position; + private final Rectangle bounds; + private final ShapeRenderer shape; + private final Texture img; + private final int width; + private final int height; + private final float scale; + + public RectangleButton(float scale, int xStart, int yStart, String internalPath) { + this.scale = scale; + this.img = new Texture(internalPath); + this.width = (int) (img.getWidth() * scale); + this.height = (int ) (img.getHeight() * scale); + this.position = new Vector2(xStart, yStart); + this.bounds = new Rectangle(xStart, yStart, width, height); + this.shape = new ShapeRenderer(); + } + + public Vector2 getPosition() { + return position; + } + + public Rectangle getBounds() { + return bounds; + } + + public ShapeRenderer getShape() { + return shape; + } + + public int getWidth() {return this.width;} + + public int getHeight() {return this.height;} + + public Texture getImg() { + return img; + } + + public float getScale() { + return scale; + } +} diff --git a/core/src/com/mygdx/game/states/DummyState.java b/core/src/com/mygdx/game/states/DummyState.java index 5f861d2..323f8b0 100644 --- a/core/src/com/mygdx/game/states/DummyState.java +++ b/core/src/com/mygdx/game/states/DummyState.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.utils.ScreenUtils; +import com.mygdx.game.utils.Enums; import java.util.ArrayList; import java.util.Arrays; @@ -34,7 +35,7 @@ public class DummyState extends State { if (Gdx.input.isKeyPressed(Input.Keys.ENTER)) { bg.set(2, 0f); bg.set(1, 1f); - gsm.push(new SettingsState(SettingsState.SettingsBackground.CITY)); + gsm.push(new SettingsState(Enums.SettingsBackground.CITY, Enums.GameType.MENU)); } } diff --git a/core/src/com/mygdx/game/states/GameMenuState.java b/core/src/com/mygdx/game/states/GameMenuState.java index db97537..c40bc54 100644 --- a/core/src/com/mygdx/game/states/GameMenuState.java +++ b/core/src/com/mygdx/game/states/GameMenuState.java @@ -8,6 +8,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.utils.ScreenUtils; import com.mygdx.game.FireBaseInterface; import com.mygdx.game.SoundManager; +import com.mygdx.game.utils.Enums; public class GameMenuState extends State { private GameStateManager gsm; @@ -137,7 +138,7 @@ public class GameMenuState extends State { gsm.push(new IntroCutsceneState()); } if (isLobbyButtonClicked(x, y)) { - gsm.push(new SettingsState(SettingsState.SettingsBackground.CITY)); + gsm.push(new SettingsState(Enums.SettingsBackground.CITY, Enums.GameType.MENU)); } if (isMenuButtonClicked(x, y)) { gsm.push(new StartState()); diff --git a/core/src/com/mygdx/game/states/GameStateManager.java b/core/src/com/mygdx/game/states/GameStateManager.java index f72bcc6..319c9e5 100644 --- a/core/src/com/mygdx/game/states/GameStateManager.java +++ b/core/src/com/mygdx/game/states/GameStateManager.java @@ -19,6 +19,9 @@ public class GameStateManager { public void push(State state) { states.push(state); } + public Stack<State> getStates() { + return states; + } public void pop() { states.pop(); diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index 26337b3..9fa7d87 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -24,7 +24,9 @@ import com.mygdx.game.MoneySystem; import com.mygdx.game.SoundManager; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; +import com.mygdx.game.ds.buttons.RectangleButton; import com.mygdx.game.types.HeroType; +import com.mygdx.game.utils.Enums; import java.util.ArrayList; import java.util.List; @@ -44,9 +46,13 @@ public class PlayState extends State{ private MoneySystem moneySystem; private boolean isPlacementAllowed = false; + private final RectangleButton menuButton; + private final GameStateManager gsm; public PlayState() { //super(gsm); + menuButton = new RectangleButton(0.5f, Gdx.graphics.getWidth() - 137, Gdx.graphics.getHeight() - 100, "Lobby-button.png"); + gsm = GameStateManager.getGsm(); init(); } @@ -247,6 +253,7 @@ public class PlayState extends State{ @Override public void update(float dt) { stage.draw(); + handleInput(); } @Override @@ -257,13 +264,25 @@ public class PlayState extends State{ drawPaneBackgrounds(); drawLaneDividers(); + sb.begin(); + sb.draw(menuButton.getImg(), menuButton.getPosition().x - menuButton.getWidth() / 2f, menuButton.getPosition().y, menuButton.getWidth(), menuButton.getHeight()); + sb.end(); stage.act(Gdx.graphics.getDeltaTime()); stage.draw(); } @Override - public void handleInput() {} + public void handleInput() { + if (Gdx.input.isTouched()) { + float touchX = Gdx.input.getX(); + float touchY = Gdx.graphics.getHeight() - Gdx.input.getY(); + if (menuButton.getBounds().contains(touchX, touchY)) { + //Implement Game.pause(); + gsm.push(new SettingsState(Enums.SettingsBackground.CITY, Enums.GameType.SINGLEPLAYER)); + } + } + } private void drawPaneBackgrounds() { shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); diff --git a/core/src/com/mygdx/game/states/SettingsState.java b/core/src/com/mygdx/game/states/SettingsState.java index 726f414..9f008f7 100644 --- a/core/src/com/mygdx/game/states/SettingsState.java +++ b/core/src/com/mygdx/game/states/SettingsState.java @@ -1,40 +1,37 @@ package com.mygdx.game.states; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.scenes.scene2d.ui.Skin; -import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.ScreenUtils; -import com.mygdx.game.sprites.CircleButton; +import com.mygdx.game.ds.buttons.CircleButton; +import com.mygdx.game.ds.buttons.RectangleButton; +import com.mygdx.game.utils.Enums; import com.mygdx.game.utils.SettingsData; import com.mygdx.game.utils.Slider; -import java.io.File; import java.util.ArrayList; import java.util.Arrays; public class SettingsState extends State { - private GameStateManager gsm; - private BitmapFont font; - public enum SettingsBackground { - MENU, - CITY, - } + private final GameStateManager gsm; + private final BitmapFont font; private ArrayList<Float> bgColor; private Boolean isBlack; private final CircleButton exitButton; + private final RectangleButton leaveGameButton; private final Slider audioBar; private final Slider sfxBar; private Texture bgImage; + private final Enums.GameType gameType; - public SettingsState(SettingsBackground bg) { + public SettingsState(Enums.SettingsBackground bg, Enums.GameType type) { gsm = GameStateManager.getGsm(); font = new BitmapFont(); + gameType = type; switch (bg) { case MENU: @@ -49,9 +46,22 @@ public class SettingsState extends State { break; } + switch (type) { + //Replace with leave game button when implemented + case SINGLEPLAYER: + leaveGameButton = new RectangleButton(0.7f, Gdx.graphics.getWidth() / 2, 30, "Lobby-button.png"); + break; + case MULTIPLAYER: + leaveGameButton = new RectangleButton(0.7f, Gdx.graphics.getWidth() / 2, 30, "Lobby-button.png"); + break; + default: + //For testing + leaveGameButton = new RectangleButton(0.7f, Gdx.graphics.getWidth() / 2, 30, "Lobby-button.png"); + } + exitButton = new CircleButton(70, Gdx.graphics.getWidth() - 200, Gdx.graphics.getHeight() - 140, "redExitCross.png"); - audioBar = new Slider(Slider.SliderType.AUDIO, 800, 30, 100); - sfxBar = new Slider(Slider.SliderType.SFX, 800, 30, -100); + audioBar = new Slider(Enums.SliderType.AUDIO, 800, 30, 100); + sfxBar = new Slider(Enums.SliderType.SFX, 800, 30, -100); if (isBlack) { font.setColor(Color.BLACK); } else { @@ -59,6 +69,36 @@ public class SettingsState extends State { } } + private void renderText(SpriteBatch sb) { + font.getData().setScale(8f); + GlyphLayout glyphLayout = new GlyphLayout(); + glyphLayout.setText(font, "Settings"); + font.draw(sb, "Settings", Gdx.graphics.getWidth() / 2f - glyphLayout.width / 2, Gdx.graphics.getHeight() - 80); + font.getData().setScale(3f); + font.draw(sb, "Audio", Gdx.graphics.getWidth() / 2f - 400, Gdx.graphics.getHeight() / 2f + 170); + font.draw(sb, "SFX", Gdx.graphics.getWidth() / 2f - 400, Gdx.graphics.getHeight() / 2f -30); + } + + private void renderExitButton(SpriteBatch sb) { + sb.draw(exitButton.getImg(), exitButton.getPosition().x - 40, exitButton.getPosition().y - 40, 80, 80); + } + private void renderAudioBar() { + audioBar.render(); + } + private void renderSfxBar() { + sfxBar.render(); + } + private void renderLeaveGame(SpriteBatch sb) { + switch (gameType) { + case SINGLEPLAYER: + case MULTIPLAYER: + sb.draw(leaveGameButton.getImg(), leaveGameButton.getPosition().x - leaveGameButton.getWidth() / 2f, leaveGameButton.getPosition().y, leaveGameButton.getWidth(), leaveGameButton.getHeight()); + break; + default: + break; + } + } + @Override public void update(float dt) { handleInput(); @@ -69,8 +109,9 @@ public class SettingsState extends State { ScreenUtils.clear(bgColor.get(0), bgColor.get(1), bgColor.get(2), bgColor.get(3)); sb.begin(); sb.draw(bgImage, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - renderHeader(sb); + renderText(sb); renderExitButton(sb); + renderLeaveGame(sb); sb.end(); renderAudioBar(); renderSfxBar(); @@ -84,6 +125,8 @@ public class SettingsState extends State { if (exitButton.getBounds().contains(touchX, touchY)) { //dispose(); gsm.pop(); + } else if(leaveGameButton.getBounds().contains(touchX, touchY)) { + gsm.set(new GameMenuState()); } else { SettingsData settingsData = SettingsData.loadSettings(); settingsData.saveSettings(); @@ -98,23 +141,5 @@ public class SettingsState extends State { font.dispose(); } - private void renderHeader(SpriteBatch sb) { - font.getData().setScale(8f); - GlyphLayout glyphLayout = new GlyphLayout(); - glyphLayout.setText(font, "Settings"); - font.draw(sb, "Settings", Gdx.graphics.getWidth() / 2 - glyphLayout.width / 2, Gdx.graphics.getHeight() - 80); - } - - private void renderExitButton(SpriteBatch sb) { - sb.draw(exitButton.getImg(), exitButton.getPosition().x - 40, exitButton.getPosition().y - 40, 80, 80); - } - - private void renderAudioBar() { - audioBar.render(); - } - - private void renderSfxBar() { - sfxBar.render(); - } } diff --git a/core/src/com/mygdx/game/states/StartState.java b/core/src/com/mygdx/game/states/StartState.java index 8d6fa75..8e29ed9 100644 --- a/core/src/com/mygdx/game/states/StartState.java +++ b/core/src/com/mygdx/game/states/StartState.java @@ -51,12 +51,9 @@ public class StartState extends State implements InputProcessor { board.setTexture(4, 3, texture1); board.setTexture(5, 3, texture1); - board.setTexture(4, 5, texture1); - - - } + @Override public void update(float dt) { diff --git a/core/src/com/mygdx/game/utils/Enums.java b/core/src/com/mygdx/game/utils/Enums.java new file mode 100644 index 0000000..573fc69 --- /dev/null +++ b/core/src/com/mygdx/game/utils/Enums.java @@ -0,0 +1,19 @@ +package com.mygdx.game.utils; + +public class Enums { + public enum GameType { + SINGLEPLAYER, + MULTIPLAYER, + MENU + } + + public enum SettingsBackground { + MENU, + CITY, + } + + public enum SliderType { + AUDIO, + SFX + } +} diff --git a/core/src/com/mygdx/game/utils/Slider.java b/core/src/com/mygdx/game/utils/Slider.java index 25c40ad..867a25a 100644 --- a/core/src/com/mygdx/game/utils/Slider.java +++ b/core/src/com/mygdx/game/utils/Slider.java @@ -1,29 +1,15 @@ package com.mygdx.game.utils; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.utils.Json; -import com.badlogic.gdx.utils.JsonReader; -import com.badlogic.gdx.utils.JsonValue; import com.mygdx.game.HeroesVsMonsters; -import java.awt.SystemTray; -import java.io.File; - public class Slider { - public enum SliderType { - AUDIO, - SFX - } private final ShapeRenderer shapeRenderer; private final SpriteBatch sb; - private final float SCREEN_WIDTH; - private final float SCREEN_HEIGHT; - - private final SliderType type; + private final Enums.SliderType sliderType; private final float width; private final float height; private float sliderValue; @@ -35,12 +21,12 @@ public class Slider { private float isTouched; private final SettingsData settingsData; - public Slider(SliderType type, float barWidth, float barHeight, float yPos) { + public Slider(Enums.SliderType type, float barWidth, float barHeight, float yPos) { //General variables sb = HeroesVsMonsters.getSb(); shapeRenderer = new ShapeRenderer(); - SCREEN_WIDTH = Gdx.graphics.getWidth(); - SCREEN_HEIGHT = Gdx.graphics.getHeight(); + float SCREEN_WIDTH = Gdx.graphics.getWidth(); + float SCREEN_HEIGHT = Gdx.graphics.getHeight(); settingsData = SettingsData.loadSettings(); @@ -56,7 +42,7 @@ public class Slider { } //Local variables - this.type = type; + this.sliderType = type; this.width = barWidth; this.height = barHeight; this.yPos = yPos; @@ -116,7 +102,7 @@ public class Slider { if (isTouched < 0.1f && isTouched >= 0) { isTouched += Gdx.graphics.getDeltaTime(); } else if (isTouched >= 0){ - switch (type) { + switch (sliderType) { case AUDIO: settingsData.AUDIO = ((int) (sliderValue * 100)); break; -- GitLab From a6a06dadc4c3dd8a87efa8914c9c254e7b6cd666 Mon Sep 17 00:00:00 2001 From: Anh <qapham@stud.ntnu.no> Date: Fri, 21 Apr 2023 15:36:48 +0200 Subject: [PATCH 04/23] Add back button to board and change start button to play button. And some styling --- assets/backButton.png | Bin 0 -> 3337 bytes assets/playButton.png | Bin 0 -> 4704 bytes core/src/com/mygdx/game/Board.java | 25 ++++++++++++++++++ .../com/mygdx/game/states/GameMenuState.java | 10 ++++--- 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 assets/backButton.png create mode 100644 assets/playButton.png diff --git a/assets/backButton.png b/assets/backButton.png new file mode 100644 index 0000000000000000000000000000000000000000..ff020072d4122e935bc2644734bb3b320e540782 GIT binary patch literal 3337 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 YDI05ca{^qze;bsO!+!fBJJ#9X08P@#I{*Lx literal 0 HcmV?d00001 diff --git a/assets/playButton.png b/assets/playButton.png new file mode 100644 index 0000000000000000000000000000000000000000..addcff5a203d9c1ec00756d28e86bb48660d87e3 GIT binary patch literal 4704 zcmeHLX;hO}8YU5hV54kG4FQowQxvp{W7tZJKoT|qk)<NwfQNwA1P~O9KosKwrVw_k zKv+bUBDhdNHi<PwQ9@-^QBoMNY=WQ$5t#S;!Vi1S%%3@@b7tv}8}jkp`@YY8-sdh) z&bc_#@X7>bIXO8zgKpy{Cx<1%_d=zm@Tpl~@CyE5!rf?8x$?)v-{j=f2n?GY?#Fz` zE?1TtdaBx9GgPc1nrDjjR(s!@SJcmnUlXShix)5?T8@3<FV*#J<lZQ%G<p5iARm{M zs6%jmJKQzv-WBE(Q5rH<)3JBXuKu+ZckaDpHfL`0p+HeuoV<Z92al_bnHsLcKRaHP zZik;u&*S#@L^iKTM_*zwcpAn-<btQsI!3**YDtZAN=)*2(QmO%1(Ms<jlA_396c8Y zz0?J~s$vP*{;?&FPQj{?Q{uS&ju*9J(zyXUT@Nvkp%g5E_kBY7f5o_^dFoFl9yWZO zo``RlYks|ah=0#-Va(H@*9V<mcT(ePzxm(Tp4yM>ALbNwv57BS)eUul41aZ)rBnPd zPb~s(sa{VWP>jLV0vq{vPcq4bvw;a}NkDC`M5>BeC~%Wfr7W^?#b;<OF!(dv{_Y<s z!qCL;z0qzHsd2Gx!4)g#8HF5r6$#=~u=SD&yr`1JVUc;ETOEMdIQeLyq(MT8US>*E z@Z#D7{Yh~wa<njXbZ@SNeE-o#6!QfB45WIAg^H#N(CB?y%U`mIv#XfDi=@SC0tl{g z2d<*nrCi~5qNrYhzzcZZ!benrdC8V?^CyhOYz_a_MvIubC3u=>A*yRr{Y;kM8Z=>2 z;}`P2wb7x{aPxUT`v4Z%lz8TSiw*kjHU@(i+3JOmO|ajrM*q{z2gT@ln-VoSRf%Zk zLkwUdc_V?BK-p`D&a(=5yG>sOBXf=Q(ZqYz#B3jf1Q;n!PevtcjAN2b__o4ORpvuP ziAjy=@({E+PjXx7<^iM{bbkk^Q9@uF+eiNC7L<t!Lj=xs82QJ*IsG{=c7Ei$Gk2!f z4|cVkn3`(1rpQv8ndw?XGhbWgW<{e|>8xlvKYi&}$H7}cdD6P@X5YG)DWf+IlgW9k zE{d>nA%nB=NQn80Bj-OJ?``+3*6L!W{#yH0ua#c&d%DoI8;YXg&vCgf&fRG5q;1h; z)Ug$d=i@fGyi5KhW-wX#jzB_c#0mlhJG@heId)PLhVxk3ol28UZKR)~PSkvBqjtfR zcv>4N?mr6Gxt*wR%qBm0)~E4!2&oNHCs9Ex3e;xmsq3U|5u-|_?yX9u^mSzvZ%~>} z8}sQ`nibgud(&Uo8U_C>st1IinO>}FRVXXsA^;S=K(wrzy3v%B;I>=DtFV8YNI4bQ zq@3Ep*635caAhnUGg2(D(Z|zvC_|oAN`}ku5AxdEEA@d+eX(v<1@^$UKcRlg>eqzj zZxXKMM9<vaFU^UWY?Jt?cj1ywJ8NHdZ!NAF3CY"MWlwVC8ur9@c_&d;n^AU}V1 z)bB(rIU{rB^wczgC%kxzK6>nkn^n>9l~u+4wZ+-HBbpB%8O>^W_NAxL)#VZB!%HCM z(bji_mmFqp)6pJsdV8tFAu>OpHSh(mn!r05Lf~P`T$rN#lwq?y+iw!!QOdj1RylOi z;727WZ(uuU?=;my2gN1m0MRraeSU#wrD;%YdzG87o6pUc+o17u@>Ric=MMZ2TzIVS z2MpD^&BjzH`f6yOVgM;kXdeXt3XH?5B@)ulS78Y#pN_ONN6_yqg%uI^`nHz#w<h$k z1UTz<*ny%vNH_c27yw=CYdkzgi+W#mhwtF;jSnF!Z-G`p6=;9wTr%X|D-L0jmHRBl z?L^tj_|Ns+VM(}xo>wZ5$#~*=>=e4ny$s!M{>~?9V3hzUNc<0>fS<1(GBb&6L-y(( z#o0L0mQBUqKQJUT8x=mS8-ZDVSe)q!!>G+FE%AFwhT3Zj4jW}KZ6fuzZ7O!~O0Ibl z26X?lNcov9vK=7sho5Er3`$c&-j|n3NUxxwq^AztrEEsB?VjS-6#L|<_FRCNCi`uN zogYH=HM$n7|3J2uQ*P<W`X!gSmGs^z=jP{LTdcneUvbG@N3X);&W{|1uY{em3*7Do zedAXaTNoo+^jWL|Nw$GFcAjsM^}B9g9QnEi>QKK}hn)<a&*Zo6Pa8IaNg)Iz_tGJz znn%I-O&<_M=%OG5j<T)Qd&B=5QTNyy4=izW(+S_vKV0<*BQ<lzm7)lxys601tZ2<E zj~u)T!_EckTE)Kacz@=JUqjT}7i|N=bF5`C()l23qH!7A4aaLNS9F?>1ecjVepWg3 z79UM8`^LA)C=Ha6gj9XoXK(#~NchWzJ)$U!ceV8#!t&p}yd0T(&gO|%#HAktTE`96 zR>UG&NCqvG?tgW2iIc&_`z8Ig+TTX5$8qMuL668W;)UN?q|MZ8Gxg9O8tcAc!B85_ zfpp9Q5M#*a=3^A~b5|;d$t+QJFN5m8fYcg}6pV*Z9ISYeZYqN^>a2#H9fFlWfb+A0 zz;(6|+vLe+5p<NV(rpc56T?Xu*RlD?Q_eayr+|*o7d)#wDe;Z-$cAT!sEjLkvfMP8 zDWk0CvVr`&R!}=~D#E<~EmITO5(-<+TkmQxnYg*6&UrA{0M;D;d27SGlx?1s(Qfs8 zqJQ#L_l+qvY}Y{jv6)}l0#@u)m$14xC({~vN3q_uOZgyKsqSDHkV;Lf(2HQ0L`|eb zG4^c%1}|r*++OD?tbFVZEyQO4Y9ha`jJ}WWpz|@%*Da&vS!K|Wp?rCB2fHl1lU;U$ zplJpL;NUj6Weo5YtpS1|$f+j^$2kal%E%>XW%q3nw*8yVw;NUu+}$;37}1Q>*q7RO z(FZRw4}w-2nheycX8sB1k77qBh}_v`d11O}3}+RN*c{6>m^Xdv_a*0Ku8)|D`hcx# zZ+)Wqb+lTEM0dIc@iG(9aOoa71pC0ss2-IsKCDXM2AnWUOhvEgN7cpbGS*pcz~zqq zlugzon;gwyE#8#Z2L^H(e+-v=ucBg!S5TpZRI$Y!xx&lCg*_q-(F3e$57gphQs7ox zejS3Oaq}A=xF9A%9n5Lx9z<HOth`Wf;tv*9RPz9ad%!B(uoFS=s0$f95tZ5tUHws? z!@(hVjSiAKy<v@)p?+*LCypDi?*J%l1D?i7Lp{?v6@Xq^_OF9mq;ga$WCi-7T+;hu z<jv>rS-P%$cd)V`7_TS@Do6d#C^ExS$_qt`c-oTWL$0U=dI6@W&3}g}5pQ$d7Bx;{ z_Q$i}5+|3fMIDivlF9_0CU^W+0gGI6FEImUycdXx+&vIGoiAbP@{MH{5ytE?idlwQ zA_~?UjOEX7{7S~Pc!rKk8K`r*52R=%OyzWbl5S#`(LCcP76*k$*L7&zPV}C4=r|#) zjBnPJIk`;WEg<w`iv5z%Mbzn#KYjCoQ_;fYzp*0FUVRYzlH^A0N%*}%bua2!<+HQE z17=~0tg|!Ij=b)aVV_kwHaEEEVUDI*N#oW1FR8z<iThSgp{V;DK^I$t4@<oXJiKkC zArg2A_`ky@HQfF|tVK3}<g9~4PVweXuW<WGX8#N09Jdk|mR7eKSW-D(UV@*D<QTTj KHsw_RlYa;KL;)NC literal 0 HcmV?d00001 diff --git a/core/src/com/mygdx/game/Board.java b/core/src/com/mygdx/game/Board.java index ba45fd3..95898ad 100644 --- a/core/src/com/mygdx/game/Board.java +++ b/core/src/com/mygdx/game/Board.java @@ -28,6 +28,9 @@ import com.badlogic.gdx.utils.Array; import com.mygdx.game.components.HeroComponent; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; +import com.mygdx.game.states.GameMenuState; +import com.mygdx.game.states.GameStateManager; +import com.mygdx.game.states.PlayState; import com.mygdx.game.types.HeroType; import com.mygdx.game.utils.DisplayHeroButton; @@ -46,6 +49,7 @@ public class Board extends Actor { private int textureHeight; private int cellWidth; private int cellHeight; + private GameStateManager gsm; private SpriteBatch batch; private int xOffset = 315; // Add xOffset for moving textures right @@ -80,6 +84,7 @@ public class Board extends Actor { public Board(int rows, int cols, Engine engine) { + gsm = GameStateManager.getGsm(); this.engine = engine; this.rows = rows; this.cols = cols; @@ -155,6 +160,7 @@ public class Board extends Actor { //drawDisplayPanel(batch); this.batch.begin(); + drawBackButton(); drawHeroes(); this.batch.end(); @@ -164,6 +170,25 @@ public class Board extends Actor { } + private void drawBackButton() { + Texture backButton = new Texture("backButton.png"); + float buttonWidth = screenWidth / 10; + float buttonHeight = buttonWidth * ((float) backButton.getHeight() / backButton.getWidth()); + float buttonX = 10; + float buttonY = 10; + batch.draw(backButton, buttonX, buttonY, buttonWidth, buttonHeight); + + if (Gdx.input.isTouched()) { + int x = Gdx.input.getX(); + int y = Gdx.input.getY(); + if (Gdx.input.justTouched() && buttonX <= x && x <= buttonX + buttonWidth && + buttonY <= Gdx.graphics.getHeight() - y && Gdx.graphics.getHeight() - y <= buttonY + buttonHeight) { + gsm.push(new GameMenuState()); + } + } + + } + private void setupInputProcessor() { multiplexer.addProcessor(new InputAdapter() { @Override diff --git a/core/src/com/mygdx/game/states/GameMenuState.java b/core/src/com/mygdx/game/states/GameMenuState.java index db97537..4c0a03e 100644 --- a/core/src/com/mygdx/game/states/GameMenuState.java +++ b/core/src/com/mygdx/game/states/GameMenuState.java @@ -31,7 +31,7 @@ public class GameMenuState extends State { sb = new SpriteBatch(); width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); - startButton = new Texture("Start-button.png"); + startButton = new Texture("playButton.png"); lobbyButton = new Texture("Lobby-button.png"); menuButton = new Texture("Menu-button.png"); logo = new Texture("HvsMstor.png"); @@ -69,12 +69,14 @@ public class GameMenuState extends State { // Calculate the button positions and sizes float buttonWidth = width / 7f; - float startButtonHeight = buttonWidth * ((float) startButton.getHeight() / startButton.getWidth()); + float playButtonWidth = width / 5f; + float startButtonHeight = playButtonWidth * ((float) startButton.getHeight() / startButton.getWidth()); float lobbyButtonHeight = buttonWidth * ((float) lobbyButton.getHeight() / lobbyButton.getWidth()); float menuButtonHeight = buttonWidth * ((float) menuButton.getHeight() / menuButton.getWidth()); float buttonX = (width - buttonWidth) / 2f; + float playButtonX = (width - playButtonWidth) /2f; float startButtonY = height * 0.3f - startButtonHeight / 2f; float lobbyButtonY = height * 0.12f - lobbyButtonHeight / 2f; float menuButtonY = height * 0.21f - menuButtonHeight / 2f; @@ -85,7 +87,7 @@ public class GameMenuState extends State { batch.draw(menuBackground, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); batch.draw(logo, logoX, logoY, logoWidth, logoHeight); - batch.draw(startButton, buttonX, startButtonY, buttonWidth, startButtonHeight); + batch.draw(startButton, playButtonX, startButtonY, playButtonWidth, startButtonHeight); batch.draw(lobbyButton, buttonX, lobbyButtonY, buttonWidth, lobbyButtonHeight); batch.draw(menuButton, buttonX, menuButtonY, buttonWidth, menuButtonHeight); @@ -98,7 +100,7 @@ public class GameMenuState extends State { } private boolean isStartButtonClicked(int x, int y) { - float buttonWidth = width / 7f; + float buttonWidth = width / 5f; float startButtonHeight = buttonWidth * ((float) startButton.getHeight() / startButton.getWidth()); float buttonX = (width - buttonWidth) / 2f; float startButtonY = height * 0.3f - startButtonHeight / 2f; -- GitLab From 0ca357d8baea387bf5e821e7a9e2bb176d5e6fbf Mon Sep 17 00:00:00 2001 From: Anh <qapham@stud.ntnu.no> Date: Fri, 21 Apr 2023 16:42:09 +0200 Subject: [PATCH 05/23] Add 8 bit coin --- assets/coin2.png | Bin 0 -> 3031 bytes core/src/com/mygdx/game/Board.java | 3 ++- core/src/com/mygdx/game/states/PlayState.java | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 assets/coin2.png diff --git a/assets/coin2.png b/assets/coin2.png new file mode 100644 index 0000000000000000000000000000000000000000..261107351c3fa03167a58d8fd13c472e8aeebbff GIT binary patch literal 3031 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 literal 0 HcmV?d00001 diff --git a/core/src/com/mygdx/game/Board.java b/core/src/com/mygdx/game/Board.java index 9a39cfe..9f48457 100644 --- a/core/src/com/mygdx/game/Board.java +++ b/core/src/com/mygdx/game/Board.java @@ -128,7 +128,7 @@ public class Board extends Actor { BitmapFont font = new BitmapFont(); font.getData().setScale(3.5f); font.getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); - Texture counterIcon = new Texture("coin.png"); + Texture counterIcon = new Texture("coin2.png"); this.batch.begin(); font.draw(batch, String.valueOf(moneySystem.getMoney()), iconX + iconSize * 1.5f, iconY + iconSize * 0.75f); @@ -491,6 +491,7 @@ public class Board extends Actor { for (Texture buttonTexture : buttonTextures) { buttonTexture.dispose(); } + batch.dispose(); } } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index 453de02..2737908 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -110,7 +110,7 @@ public class PlayState extends State{ counterText1.setHeight(iconSize / 2); board.getRightTable().add(counterText1); - Texture counterIconTexture1 = new Texture("coin.png"); + Texture counterIconTexture1 = new Texture("coin2.png"); Image counterIcon1 = new Image(counterIconTexture1); board.getRightTable().add(counterIcon1).size(iconSize, iconSize).pad(5); board.getRightTable().row(); @@ -122,7 +122,7 @@ public class PlayState extends State{ counterText2.setHeight(iconSize / 2); board.getRightTable().add(counterText2); - Texture counterIconTexture2 = new Texture("coin.png"); + Texture counterIconTexture2 = new Texture("coin2.png"); Image counterIcon2 = new Image(counterIconTexture2); board.getRightTable().add(counterIcon2).size(iconSize, iconSize).pad(5); board.getRightTable().row(); -- GitLab From a37bdff9469923d24cab34e09c45e90f7954cf8c Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Fri, 21 Apr 2023 16:59:32 +0200 Subject: [PATCH 06/23] #54 display heroes and projectiles on screen --- core/src/com/mygdx/game/Board.java | 15 ++++++++---- .../game/entities/ProjectileFactory.java | 22 ++++++++---------- core/src/com/mygdx/game/states/PlayState.java | 23 ++++++++++++------- .../com/mygdx/game/systems/HeroSystem.java | 4 ++-- .../systems/ProjectileMovementSystem.java | 2 +- 5 files changed, 39 insertions(+), 27 deletions(-) diff --git a/core/src/com/mygdx/game/Board.java b/core/src/com/mygdx/game/Board.java index 96983a8..376a73f 100644 --- a/core/src/com/mygdx/game/Board.java +++ b/core/src/com/mygdx/game/Board.java @@ -48,9 +48,9 @@ public class Board extends Actor { private int cellHeight; private SpriteBatch batch; - private int xOffset = 315; // Add xOffset for moving textures right + private int xOffset = Gdx.graphics.getWidth()/8; // Add xOffset for moving textures right private int yOffset = 0; // Add yOffset for moving textures up or down - private int dashOffset = 315; // Add dashOffset for moving dashed lines right + private int dashOffset = Gdx.graphics.getWidth()/8; // Add dashOffset for moving dashed lines right private Texture[] buttonTextures; private Texture[] displayTextures; @@ -186,8 +186,8 @@ public class Board extends Actor { // Add your logic here for when a cell is clicked System.out.println("Cell clicked: row " + row + ", col " + col); int displayPanelWidth = Gdx.graphics.getWidth() / 8; - int middleOfCellX = (int) (((col + 0.5) * cellWidth)) + displayPanelWidth ; - int middleOfCellY = (int) ((row + 0.5) * cellHeight); + int middleOfCellX = (int) (((col) * cellWidth)) + displayPanelWidth ; + int middleOfCellY = (int) ((row) * cellHeight); System.out.print(" x: " + middleOfCellX + " y: " + middleOfCellY); Vector2 heroPlacement = new Vector2(middleOfCellX, middleOfCellY); @@ -355,6 +355,13 @@ public class Board extends Actor { } } + public int getTextureWidth() { + return textureWidth; + } + + public int getTextureHeight() { + return textureHeight; + } public void drawLaneDividers() { int dashLength = 10; diff --git a/core/src/com/mygdx/game/entities/ProjectileFactory.java b/core/src/com/mygdx/game/entities/ProjectileFactory.java index d0c32e3..981bc94 100644 --- a/core/src/com/mygdx/game/entities/ProjectileFactory.java +++ b/core/src/com/mygdx/game/entities/ProjectileFactory.java @@ -28,15 +28,15 @@ public class ProjectileFactory { Texture texture = null; switch (heroType) { case IRONMAN: - return new Texture(Gdx.files.internal("characterIcon3.png")); + return new Texture(Gdx.files.internal("ironManShoots.png")); case HULK: - return new Texture(Gdx.files.internal("characterIcon3.png")); + return new Texture(Gdx.files.internal("rock.png")); case SPIDERMAN: - return new Texture(Gdx.files.internal("characterIcon3.png")); + return new Texture(Gdx.files.internal("web.png")); case THOR: - return new Texture(Gdx.files.internal("characterIcon3.png")); + return new Texture(Gdx.files.internal("lightning.png")); case CAPTAIN_AMERICA: - return new Texture(Gdx.files.internal("characterIcon3.png")); + return new Texture(Gdx.files.internal("shield.png")); default: return null; } @@ -45,19 +45,17 @@ public class ProjectileFactory { private static float getProjectileSpeed(HeroType heroType) { switch (heroType) { case IRONMAN: - return 5f; + return 30f; case HULK: - return 2f; + return 15f; case SPIDERMAN: - return 4f; + return 40f; case THOR: - return 3f; + return 20; case CAPTAIN_AMERICA: - return 8f; + return 25f; default: return 7f; } } - - } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index 31c8767..d989288 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -27,6 +27,7 @@ import com.mygdx.game.SoundManager; import com.mygdx.game.components.AttackComponent; import com.mygdx.game.components.HeroComponent; import com.mygdx.game.components.PositionComponent; +import com.mygdx.game.components.ProjectileComponent; import com.mygdx.game.components.SpriteComponent; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; @@ -49,9 +50,6 @@ public class PlayState extends State{ private static Engine engine; private Board board; private TextButton counterText1; - private List<Image> heroImages = new ArrayList<>(); - private List<Image> heroProjectiles = new ArrayList<>(); - private List<Image> monsterImages = new ArrayList<>(); public PlayState() { //super(gsm); @@ -132,15 +130,21 @@ public class PlayState extends State{ board.getRightTable().row(); } - public void renderHeroes() { + public void renderHeroes(SpriteBatch batch) { for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class, AttackComponent.class).get())) { Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - Image heroImage = new Image(sprite); - batch.begin(); - batch.draw(heroImage, e); - heroImages.add(heroImage); + batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); + } + } + + public void renderProjectiles(SpriteBatch batch) { + for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { + Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); + Vector2 position = e.getComponent(PositionComponent.class).getPosition(); + + batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); } } @@ -153,8 +157,11 @@ public class PlayState extends State{ batch.begin(); board.render(batch); + renderHeroes(batch); + renderProjectiles(batch); batch.end(); + stage.act(Gdx.graphics.getDeltaTime()); stage.draw(); } diff --git a/core/src/com/mygdx/game/systems/HeroSystem.java b/core/src/com/mygdx/game/systems/HeroSystem.java index e1bf98f..3970489 100644 --- a/core/src/com/mygdx/game/systems/HeroSystem.java +++ b/core/src/com/mygdx/game/systems/HeroSystem.java @@ -50,7 +50,7 @@ public class HeroSystem extends IteratingSystem { boolean projectileExists = false; for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { if (e.getComponent(ProjectileComponent.class).getSourceEntity() == entity) { - System.out.println(e.getComponent(PositionComponent.class).getPosition()); + //System.out.println(e.getComponent(PositionComponent.class).getPosition()); projectileExists = true; break; } @@ -71,7 +71,7 @@ public class HeroSystem extends IteratingSystem { for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { if (e.getComponent(ProjectileComponent.class).getSourceEntity() == entity) { - System.out.println(e.getComponent(PositionComponent.class).getPosition()); + //System.out.println(e.getComponent(PositionComponent.class).getPosition()); } } } diff --git a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java index 72116a9..ea6c298 100644 --- a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java +++ b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java @@ -34,7 +34,7 @@ public class ProjectileMovementSystem extends IteratingSystem { PositionComponent positionComponent = positionMapper.get(entity); //If a projectile is out of bounds, remove it from the engine - if (positionComponent.getPosition().x > Gdx.graphics.getWidth()) { + if (positionComponent.getPosition().x > Gdx.graphics.getWidth() - Gdx.graphics.getWidth()/8f) { engine.removeEntity(entity); System.out.println("Projectile out of bounds. Removed projectile."); } -- GitLab From c0bf578ed3c596427a3d8afcbd76967179421b93 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Fri, 21 Apr 2023 17:33:55 +0200 Subject: [PATCH 07/23] componentmapper --- core/src/com/mygdx/game/systems/HeroSystem.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/com/mygdx/game/systems/HeroSystem.java b/core/src/com/mygdx/game/systems/HeroSystem.java index 3970489..e389c8b 100644 --- a/core/src/com/mygdx/game/systems/HeroSystem.java +++ b/core/src/com/mygdx/game/systems/HeroSystem.java @@ -21,6 +21,7 @@ public class HeroSystem extends IteratingSystem { private ComponentMapper<PositionComponent> positionMapper; private ComponentMapper<SpriteComponent> spriteMapper; private ComponentMapper<HeroComponent> heroTypeMapper; + private ComponentMapper<ProjectileComponent> projectileMapper; private Engine engine; //This system is only responsible for handling the creation of projectiles for all the heroes @@ -32,6 +33,7 @@ public class HeroSystem extends IteratingSystem { positionMapper = ComponentMapper.getFor(PositionComponent.class); spriteMapper = ComponentMapper.getFor(SpriteComponent.class); heroTypeMapper = ComponentMapper.getFor(HeroComponent.class); + projectileMapper = ComponentMapper.getFor(ProjectileComponent.class); this.engine = engine; } @@ -48,8 +50,9 @@ public class HeroSystem extends IteratingSystem { //Check if a hero has an active projectile boolean projectileExists = false; - for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { - if (e.getComponent(ProjectileComponent.class).getSourceEntity() == entity) { + for (Entity projectile : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { + ProjectileComponent projectileComponent = projectileMapper.get(projectile); + if (projectileComponent.getSourceEntity() == entity) { //System.out.println(e.getComponent(PositionComponent.class).getPosition()); projectileExists = true; break; -- GitLab From d662f6be6d8183f5dede827d54d81c1768dbcc3a Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Fri, 21 Apr 2023 18:09:30 +0200 Subject: [PATCH 08/23] check if hero exists in cell --- core/src/com/mygdx/game/Board.java | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/core/src/com/mygdx/game/Board.java b/core/src/com/mygdx/game/Board.java index 376a73f..59f660b 100644 --- a/core/src/com/mygdx/game/Board.java +++ b/core/src/com/mygdx/game/Board.java @@ -1,5 +1,6 @@ package com.mygdx.game; +import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; @@ -25,7 +26,9 @@ 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.badlogic.gdx.utils.Array; +import com.mygdx.game.components.AttackComponent; import com.mygdx.game.components.HeroComponent; +import com.mygdx.game.components.PositionComponent; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.types.HeroType; @@ -311,9 +314,26 @@ public class Board extends Actor { private void placeHero(Vector2 placementPosition) { if (chosenHeroType != null) { - Entity hero = HeroFactory.createHero(getChosenHeroType(), placementPosition); - engine.addEntity(hero); - System.out.println("Created new hero entity and added to game engine"); + //Check if hero is already placed in the cell + boolean cellHasHero = false; + float epsilon = 0.0001f; + ComponentMapper<PositionComponent> positionMapper; + positionMapper = ComponentMapper.getFor(PositionComponent.class); + for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class, AttackComponent.class).get())) { + PositionComponent position = positionMapper.get(e); + Vector2 heroPos = position.getPosition(); + if (heroPos.epsilonEquals(placementPosition, epsilon)) { + System.out.println("There is already a hero in this cell"); + cellHasHero = true; + break; + } + } + //Place a new hero entity at the given position if the cell is empty + if (!cellHasHero) { + Entity hero = HeroFactory.createHero(getChosenHeroType(), placementPosition); + engine.addEntity(hero); + System.out.println("Created new hero entity and added to game engine"); + } } } -- GitLab From 67c0e32ffbcbfda5bb799401f03f995c0b55c080 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Fri, 21 Apr 2023 18:39:18 +0200 Subject: [PATCH 09/23] heroes attack based on timer --- .../mygdx/game/components/HeroComponent.java | 11 +++++++ .../com/mygdx/game/entities/HeroFactory.java | 19 ++++++++++-- .../com/mygdx/game/systems/HeroSystem.java | 31 +++++++++---------- .../systems/ProjectileMovementSystem.java | 1 - 4 files changed, 42 insertions(+), 20 deletions(-) diff --git a/core/src/com/mygdx/game/components/HeroComponent.java b/core/src/com/mygdx/game/components/HeroComponent.java index ab4fa24..7642550 100644 --- a/core/src/com/mygdx/game/components/HeroComponent.java +++ b/core/src/com/mygdx/game/components/HeroComponent.java @@ -5,9 +5,20 @@ import com.mygdx.game.types.HeroType; public class HeroComponent implements Component { private HeroType heroType; + private boolean projectileActive; + + public boolean isProjectileActive() { + return projectileActive; + } + + public void setProjectileActive(boolean projectileActive) { + this.projectileActive = projectileActive; + } + public HeroComponent(HeroType heroType) { this.heroType = heroType; + this.projectileActive = false; } public HeroType getHeroType() { diff --git a/core/src/com/mygdx/game/entities/HeroFactory.java b/core/src/com/mygdx/game/entities/HeroFactory.java index 0c34988..8bc6f01 100644 --- a/core/src/com/mygdx/game/entities/HeroFactory.java +++ b/core/src/com/mygdx/game/entities/HeroFactory.java @@ -18,7 +18,7 @@ public class HeroFactory { Entity hero = new Entity(); hero.add(new SpriteComponent(getHeroSprite(heroType))); hero.add(new PositionComponent(boardPosition)); - hero.add(new AttackComponent(getHeroAttackDamage(heroType), getHeroAttackTimer(), getHeroAttackTimeElapsed())); + hero.add(new AttackComponent(getHeroAttackDamage(heroType), getHeroAttackTimer(heroType), getHeroAttackTimeElapsed())); hero.add(new HealthComponent(getHeroHealth())); hero.add(new HeroComponent(heroType)); return hero; @@ -111,8 +111,21 @@ public class HeroFactory { } } - private static float getHeroAttackTimer() { - return 10.0f; + private static float getHeroAttackTimer(HeroType heroType) { + switch (heroType) { + case IRONMAN: + return 6f; + case HULK: + return 8f; + case SPIDERMAN: + return 5.5f; + case THOR: + return 6.5f; + case CAPTAIN_AMERICA: + return 7f; + default: + return 0; + } } private static float getHeroAttackTimeElapsed() { diff --git a/core/src/com/mygdx/game/systems/HeroSystem.java b/core/src/com/mygdx/game/systems/HeroSystem.java index e389c8b..f3633bd 100644 --- a/core/src/com/mygdx/game/systems/HeroSystem.java +++ b/core/src/com/mygdx/game/systems/HeroSystem.java @@ -45,11 +45,20 @@ public class HeroSystem extends IteratingSystem { SpriteComponent sprite = spriteMapper.get(entity); HeroComponent heroComponent = heroTypeMapper.get(entity); - //Increase the time elapsed field in the attack component on every update - attack.setAttackTimeElapsed(attack.getAttackTimeElapsed() + deltaTime); + //If the time elapsed is greater than the given interval, create a new projectile + if (attack.getAttackTimeElapsed() >= attack.getAttackInterval() || !heroComponent.isProjectileActive()) { + attack.setAttackTimeElapsed(0); + float posX = position.getPosition().x; + float posY = position.getPosition().y; + Entity projectile = ProjectileFactory.createProjectile(heroComponent.getHeroType(), new Vector2(posX, posY), entity); + engine.addEntity(projectile); + heroComponent.setProjectileActive(true); + } + //Increase the time elapsed field in the attack component on every update + attack.setAttackTimeElapsed(attack.getAttackTimeElapsed() + deltaTime*10); //Check if a hero has an active projectile - boolean projectileExists = false; + /*boolean projectileExists = false; for (Entity projectile : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { ProjectileComponent projectileComponent = projectileMapper.get(projectile); if (projectileComponent.getSourceEntity() == entity) { @@ -57,25 +66,15 @@ public class HeroSystem extends IteratingSystem { projectileExists = true; break; } - } + }*/ //If a hero does not have an active projectile, it is created and added to the engine - if (!projectileExists) { + /*if (!projectileExists) { float posX = position.getPosition().x; float posY = position.getPosition().y; Entity projectile = ProjectileFactory.createProjectile(heroComponent.getHeroType(), new Vector2(posX, posY), entity); engine.addEntity(projectile); - } + }*/ - //If the time elapsed is greater than the given interval, create a new projectile - if (attack.getAttackTimeElapsed() > attack.getAttackInterval()) { - attack.setAttackTimeElapsed(0); - } - - for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { - if (e.getComponent(ProjectileComponent.class).getSourceEntity() == entity) { - //System.out.println(e.getComponent(PositionComponent.class).getPosition()); - } - } } } \ No newline at end of file diff --git a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java index ea6c298..643a4e3 100644 --- a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java +++ b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java @@ -36,7 +36,6 @@ public class ProjectileMovementSystem extends IteratingSystem { //If a projectile is out of bounds, remove it from the engine if (positionComponent.getPosition().x > Gdx.graphics.getWidth() - Gdx.graphics.getWidth()/8f) { engine.removeEntity(entity); - System.out.println("Projectile out of bounds. Removed projectile."); } //Increment the horizontal position of the projectile based on its velocity -- GitLab From 400758e219da9e44fe6445ab3fea9e33af064a1b Mon Sep 17 00:00:00 2001 From: Johannes Finne Reinseth <johannes.reinseth@aboveit.no> Date: Sat, 22 Apr 2023 11:02:47 +0200 Subject: [PATCH 10/23] fix: merge with dev --- core/src/com/mygdx/game/{ => ds}/Board.java | 74 ++++--------------- .../mygdx/game/ds/buttons/CircleButton.java | 35 +++++++-- core/src/com/mygdx/game/states/PlayState.java | 46 +----------- .../src/com/mygdx/game/states/StartState.java | 2 +- 4 files changed, 47 insertions(+), 110 deletions(-) rename core/src/com/mygdx/game/{ => ds}/Board.java (85%) diff --git a/core/src/com/mygdx/game/Board.java b/core/src/com/mygdx/game/ds/Board.java similarity index 85% rename from core/src/com/mygdx/game/Board.java rename to core/src/com/mygdx/game/ds/Board.java index ee1b043..1939911 100644 --- a/core/src/com/mygdx/game/Board.java +++ b/core/src/com/mygdx/game/ds/Board.java @@ -1,6 +1,5 @@ -package com.mygdx.game; +package com.mygdx.game.ds; -import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; @@ -28,14 +27,10 @@ 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.badlogic.gdx.utils.Array; -import com.mygdx.game.components.AttackComponent; +import com.mygdx.game.MoneySystem; import com.mygdx.game.components.HeroComponent; -import com.mygdx.game.components.PositionComponent; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; -import com.mygdx.game.states.GameMenuState; -import com.mygdx.game.states.GameStateManager; -import com.mygdx.game.states.PlayState; import com.mygdx.game.types.HeroType; import com.mygdx.game.utils.DisplayHeroButton; @@ -54,12 +49,11 @@ public class Board extends Actor { private int textureHeight; private int cellWidth; private int cellHeight; - private GameStateManager gsm; private SpriteBatch batch; - private int xOffset = Gdx.graphics.getWidth()/8; // Add xOffset for moving textures right private int yOffset = 0; // Add yOffset for moving textures up or down - private int dashOffset = Gdx.graphics.getWidth()/8; // Add dashOffset for moving dashed lines right + private int xOffset = 225; // Add xOffset for moving textures right (previously 315) + private int dashOffset = 225; // Add dashOffset for moving dashed lines right (previously 315) private Texture[] buttonTextures; private Texture[] displayTextures; @@ -91,7 +85,6 @@ public class Board extends Actor { public Board(int rows, int cols, Engine engine) { - gsm = GameStateManager.getGsm(); this.engine = engine; this.rows = rows; this.cols = cols; @@ -131,7 +124,7 @@ public class Board extends Actor { BitmapFont font = new BitmapFont(); font.getData().setScale(3.5f); font.getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); - Texture counterIcon = new Texture("coin2.png"); + Texture counterIcon = new Texture("coin.png"); this.batch.begin(); font.draw(batch, String.valueOf(moneySystem.getMoney()), iconX + iconSize * 1.5f, iconY + iconSize * 0.75f); @@ -185,7 +178,6 @@ public class Board extends Actor { //drawDisplayPanel(batch); this.batch.begin(); - drawBackButton(); drawHeroes(); this.batch.end(); @@ -196,25 +188,6 @@ public class Board extends Actor { - } - - private void drawBackButton() { - Texture backButton = new Texture("backButton.png"); - float buttonWidth = screenWidth / 10; - float buttonHeight = buttonWidth * ((float) backButton.getHeight() / backButton.getWidth()); - float buttonX = 10; - float buttonY = 10; - batch.draw(backButton, buttonX, buttonY, buttonWidth, buttonHeight); - - if (Gdx.input.isTouched()) { - int x = Gdx.input.getX(); - int y = Gdx.input.getY(); - if (Gdx.input.justTouched() && buttonX <= x && x <= buttonX + buttonWidth && - buttonY <= Gdx.graphics.getHeight() - y && Gdx.graphics.getHeight() - y <= buttonY + buttonHeight) { - gsm.push(new GameMenuState()); - } - } - } private void setupInputProcessor() { @@ -239,8 +212,8 @@ public class Board extends Actor { // Add your logic here for when a cell is clicked System.out.println("Cell clicked: row " + row + ", col " + col); int displayPanelWidth = Gdx.graphics.getWidth() / 8; - int middleOfCellX = (int) (((col) * cellWidth)) + displayPanelWidth ; - int middleOfCellY = (int) ((row) * cellHeight); + int middleOfCellX = (int) (((col + 0.5) * cellWidth)) + displayPanelWidth ; + int middleOfCellY = (int) ((row + 0.5) * cellHeight); System.out.print(" x: " + middleOfCellX + " y: " + middleOfCellY); Vector2 heroPlacement = new Vector2(middleOfCellX, middleOfCellY); @@ -387,25 +360,12 @@ public class Board extends Actor { private void placeHero(Vector2 placementPosition) { if (chosenHeroType != null) { - //Check if hero is already placed in the cell - boolean cellHasHero = false; - float epsilon = 0.0001f; - ComponentMapper<PositionComponent> positionMapper; - positionMapper = ComponentMapper.getFor(PositionComponent.class); - for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class, AttackComponent.class).get())) { - PositionComponent position = positionMapper.get(e); - Vector2 heroPos = position.getPosition(); - if (heroPos.epsilonEquals(placementPosition, epsilon)) { - System.out.println("There is already a hero in this cell"); - cellHasHero = true; - break; - } - } - //Place a new hero entity at the given position if the cell is empty - if (!cellHasHero) { - Entity hero = HeroFactory.createHero(getChosenHeroType(), placementPosition); - engine.addEntity(hero); - System.out.println("Created new hero entity and added to game engine"); + Entity hero = HeroFactory.createHero(getChosenHeroType(), placementPosition); + engine.addEntity(hero); + System.out.println("Created new hero entity and added to game engine"); + System.out.println("all heroes: :)"); + for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class).get())) { + System.out.println(e.getComponent(HeroComponent.class).getHeroType()); } } } @@ -451,13 +411,6 @@ public class Board extends Actor { } } - public int getTextureWidth() { - return textureWidth; - } - - public int getTextureHeight() { - return textureHeight; - } public void drawLaneDividers() { int dashLength = 10; @@ -514,7 +467,6 @@ public class Board extends Actor { for (Texture buttonTexture : buttonTextures) { buttonTexture.dispose(); } - batch.dispose(); } } diff --git a/core/src/com/mygdx/game/ds/buttons/CircleButton.java b/core/src/com/mygdx/game/ds/buttons/CircleButton.java index edb8196..d713d3f 100644 --- a/core/src/com/mygdx/game/ds/buttons/CircleButton.java +++ b/core/src/com/mygdx/game/ds/buttons/CircleButton.java @@ -1,5 +1,6 @@ package com.mygdx.game.ds.buttons; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Circle; @@ -7,11 +8,35 @@ import com.badlogic.gdx.math.Vector2; public class CircleButton { - private Vector2 position; - private Circle bounds; - private ShapeRenderer shape; - private int radius; - private Texture img; + private final Vector2 position; + private final Circle bounds; + private final ShapeRenderer shape; + private final int radius; + private final Texture img; + + public CircleButton(float scale, String internalpath) { + this.img = new Texture(internalpath); + this.radius = (int) ((this.img.getWidth() / 2) / scale); + this.position = new Vector2(Gdx.graphics.getWidth() / 2f - this.img.getWidth() / 2f, Gdx.graphics.getHeight() / 2f - this.img.getHeight() / 2f); + this.bounds = new Circle(this.position.x, this.position.y, this.radius); + this.shape = new ShapeRenderer(); + } + + public CircleButton(float scale, boolean middle, int ystart, String internalpath) { + this.img = new Texture(internalpath); + this.radius = (int) ((this.img.getWidth() / 2) / scale); + this.position = new Vector2(Gdx.graphics.getWidth() / 2f - this.img.getWidth() / 2f, ystart); + this.bounds = new Circle(this.position.x, this.position.y, this.radius); + this.shape = new ShapeRenderer(); + } + + public CircleButton(float scale, int xStart, boolean middle, String internalpath) { + this.img = new Texture(internalpath); + this.radius = (int) ((this.img.getWidth() / 2) / scale); + this.position = new Vector2(xStart, Gdx.graphics.getHeight() / 2f - this.img.getHeight() / 2f); + this.bounds = new Circle(this.position.x, this.position.y, this.radius); + this.shape = new ShapeRenderer(); + } public CircleButton(int radius, int xStart, int yStart, String internalPath) { this.radius = radius; diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index 75d030f..d2769cf 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -1,45 +1,26 @@ package com.mygdx.game.states; -import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Engine; -import com.badlogic.ashley.core.Entity; -import com.badlogic.ashley.core.Family; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Image; -import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.utils.viewport.ScreenViewport; -import com.mygdx.game.Board; +import com.mygdx.game.ds.Board; import com.mygdx.game.MoneySystem; import com.mygdx.game.SoundManager; -import com.mygdx.game.components.AttackComponent; -import com.mygdx.game.components.HeroComponent; -import com.mygdx.game.components.PositionComponent; -import com.mygdx.game.components.ProjectileComponent; -import com.mygdx.game.components.SpriteComponent; -import com.mygdx.game.entities.DisplayHero; -import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.ds.buttons.RectangleButton; import com.mygdx.game.systems.HeroSystem; import com.mygdx.game.systems.ProjectileMovementSystem; -import com.mygdx.game.types.HeroType; import com.mygdx.game.utils.Enums; -import java.util.ArrayList; -import java.util.List; - public class PlayState extends State{ private SpriteBatch batch; private BitmapFont font; @@ -117,7 +98,7 @@ public class PlayState extends State{ counterText1.setHeight(iconSize / 2); board.getRightTable().add(counterText1); - Texture counterIconTexture1 = new Texture("coin2.png"); + Texture counterIconTexture1 = new Texture("coin.png"); Image counterIcon1 = new Image(counterIconTexture1); board.getRightTable().add(counterIcon1).size(iconSize, iconSize).pad(5); board.getRightTable().row(); @@ -129,30 +110,12 @@ public class PlayState extends State{ counterText2.setHeight(iconSize / 2); board.getRightTable().add(counterText2); - Texture counterIconTexture2 = new Texture("coin2.png"); + Texture counterIconTexture2 = new Texture("coin.png"); Image counterIcon2 = new Image(counterIconTexture2); board.getRightTable().add(counterIcon2).size(iconSize, iconSize).pad(5); board.getRightTable().row(); } - public void renderHeroes(SpriteBatch batch) { - for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class, AttackComponent.class).get())) { - Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); - Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - - batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); - } - } - - public void renderProjectiles(SpriteBatch batch) { - for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { - Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); - Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - - batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); - } - } - @Override public void render(SpriteBatch batch) { Gdx.gl.glClearColor(0.5f, 0.5f, 0.5f, 1); @@ -161,12 +124,9 @@ public class PlayState extends State{ batch.begin(); board.render(batch); - renderHeroes(batch); - renderProjectiles(batch); batch.draw(menuButton.getImg(), menuButton.getPosition().x - menuButton.getWidth() / 2f, menuButton.getPosition().y, menuButton.getWidth(), menuButton.getHeight()); batch.end(); - stage.act(Gdx.graphics.getDeltaTime()); stage.draw(); } diff --git a/core/src/com/mygdx/game/states/StartState.java b/core/src/com/mygdx/game/states/StartState.java index d4c0be5..cc0b0ef 100644 --- a/core/src/com/mygdx/game/states/StartState.java +++ b/core/src/com/mygdx/game/states/StartState.java @@ -5,7 +5,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.utils.ScreenUtils; -import com.mygdx.game.Board; +import com.mygdx.game.ds.Board; public class StartState extends State implements InputProcessor { SpriteBatch batch; -- GitLab From 0b63b86850c830f5a8f28ad91c1f535c6c4a5974 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Sat, 22 Apr 2023 11:43:41 +0200 Subject: [PATCH 11/23] minor changes --- .../com/mygdx/game/systems/HeroSystem.java | 21 +------------------ .../systems/ProjectileMovementSystem.java | 1 + 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/core/src/com/mygdx/game/systems/HeroSystem.java b/core/src/com/mygdx/game/systems/HeroSystem.java index f3633bd..4600df1 100644 --- a/core/src/com/mygdx/game/systems/HeroSystem.java +++ b/core/src/com/mygdx/game/systems/HeroSystem.java @@ -56,25 +56,6 @@ public class HeroSystem extends IteratingSystem { } //Increase the time elapsed field in the attack component on every update - attack.setAttackTimeElapsed(attack.getAttackTimeElapsed() + deltaTime*10); - //Check if a hero has an active projectile - /*boolean projectileExists = false; - for (Entity projectile : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { - ProjectileComponent projectileComponent = projectileMapper.get(projectile); - if (projectileComponent.getSourceEntity() == entity) { - //System.out.println(e.getComponent(PositionComponent.class).getPosition()); - projectileExists = true; - break; - } - }*/ - - //If a hero does not have an active projectile, it is created and added to the engine - /*if (!projectileExists) { - float posX = position.getPosition().x; - float posY = position.getPosition().y; - Entity projectile = ProjectileFactory.createProjectile(heroComponent.getHeroType(), new Vector2(posX, posY), entity); - engine.addEntity(projectile); - }*/ - + attack.setAttackTimeElapsed(attack.getAttackTimeElapsed() + deltaTime * 5); } } \ No newline at end of file diff --git a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java index 643a4e3..ed54ac1 100644 --- a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java +++ b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java @@ -35,6 +35,7 @@ public class ProjectileMovementSystem extends IteratingSystem { //If a projectile is out of bounds, remove it from the engine if (positionComponent.getPosition().x > Gdx.graphics.getWidth() - Gdx.graphics.getWidth()/8f) { + entity.removeAll(); engine.removeEntity(entity); } -- GitLab From 77bb4fb05275dfcf409e97bbe4b4eb8c6ccc5524 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Sat, 22 Apr 2023 11:45:11 +0200 Subject: [PATCH 12/23] minor change --- core/src/com/mygdx/game/entities/HeroFactory.java | 2 -- core/src/com/mygdx/game/entities/ProjectileFactory.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/core/src/com/mygdx/game/entities/HeroFactory.java b/core/src/com/mygdx/game/entities/HeroFactory.java index 8bc6f01..e370840 100644 --- a/core/src/com/mygdx/game/entities/HeroFactory.java +++ b/core/src/com/mygdx/game/entities/HeroFactory.java @@ -35,8 +35,6 @@ public class HeroFactory { } private static Texture getHeroSprite(HeroType heroType) { - //TODO endre path her - Texture texture = null; switch (heroType) { case IRONMAN: return new Texture(Gdx.files.internal("characterIcon3.png")); diff --git a/core/src/com/mygdx/game/entities/ProjectileFactory.java b/core/src/com/mygdx/game/entities/ProjectileFactory.java index 981bc94..c38918f 100644 --- a/core/src/com/mygdx/game/entities/ProjectileFactory.java +++ b/core/src/com/mygdx/game/entities/ProjectileFactory.java @@ -24,8 +24,6 @@ public class ProjectileFactory { } private static Texture getProjectileSprite(HeroType heroType) { - //TODO endre path til en projectile - Texture texture = null; switch (heroType) { case IRONMAN: return new Texture(Gdx.files.internal("ironManShoots.png")); -- GitLab From 0dfe40f4bcf0a8b4fc38d1fc995531d54e5c4c04 Mon Sep 17 00:00:00 2001 From: Johannes Finne Reinseth <johannes.reinseth@aboveit.no> Date: Sat, 22 Apr 2023 14:00:40 +0200 Subject: [PATCH 13/23] feat: rework GameMenuState --- assets/settings-button.png | Bin 0 -> 6667 bytes core/src/com/mygdx/game/HeroesVsMonsters.java | 7 -- core/src/com/mygdx/game/ds/Board.java | 48 ++++---- .../com/mygdx/game/{utils => ds}/Slider.java | 4 +- .../mygdx/game/ds/buttons/CircleButton.java | 47 ++++---- .../game/ds/buttons/RectangleButton.java | 44 +++++-- .../src/com/mygdx/game/states/DummyState.java | 46 ------- .../com/mygdx/game/states/GameMenuState.java | 113 +++--------------- core/src/com/mygdx/game/states/PlayState.java | 24 ++-- .../com/mygdx/game/states/SettingsState.java | 2 +- 10 files changed, 107 insertions(+), 228 deletions(-) create mode 100644 assets/settings-button.png rename core/src/com/mygdx/game/{utils => ds}/Slider.java (97%) delete mode 100644 core/src/com/mygdx/game/states/DummyState.java diff --git a/assets/settings-button.png b/assets/settings-button.png new file mode 100644 index 0000000000000000000000000000000000000000..ca952b499edaaf516dadaf3d552d0869b67fc6c3 GIT binary patch literal 6667 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 V5@A^}^-cf)002ovPDHLkV1h0n0&)NV literal 0 HcmV?d00001 diff --git a/core/src/com/mygdx/game/HeroesVsMonsters.java b/core/src/com/mygdx/game/HeroesVsMonsters.java index af8f2ed..7e210c2 100644 --- a/core/src/com/mygdx/game/HeroesVsMonsters.java +++ b/core/src/com/mygdx/game/HeroesVsMonsters.java @@ -3,17 +3,10 @@ package com.mygdx.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.utils.ScreenUtils; -import com.mygdx.game.states.DummyState; import com.mygdx.game.states.GameMenuState; import com.mygdx.game.states.GameStateManager; -import com.mygdx.game.states.GameStateManager; -import com.mygdx.game.states.PlayState; -import com.mygdx.game.states.SettingsState; public class HeroesVsMonsters extends ApplicationAdapter { private GameStateManager gsm; diff --git a/core/src/com/mygdx/game/ds/Board.java b/core/src/com/mygdx/game/ds/Board.java index 1939911..933a1f4 100644 --- a/core/src/com/mygdx/game/ds/Board.java +++ b/core/src/com/mygdx/game/ds/Board.java @@ -38,49 +38,41 @@ import java.util.ArrayList; import java.util.List; public class Board extends Actor { - private int screenHeight = Gdx.graphics.getHeight(); - private int screenWidth = Gdx.graphics.getWidth(); - private int rows; - private int cols; - private int[][] cells; + private final int screenHeight = Gdx.graphics.getHeight(); + private final int screenWidth = Gdx.graphics.getWidth(); + private final int rows; + private final int cols; + private final int[][] cells; private Texture[][] textures; - private ShapeRenderer shapeRenderer; - private int textureWidth; - private int textureHeight; + private final ShapeRenderer shapeRenderer; + private final int textureWidth; + private final int textureHeight; private int cellWidth; private int cellHeight; - private SpriteBatch batch; + private final SpriteBatch batch; - private int yOffset = 0; // Add yOffset for moving textures up or down - private int xOffset = 225; // Add xOffset for moving textures right (previously 315) - private int dashOffset = 225; // Add dashOffset for moving dashed lines right (previously 315) + private final int yOffset = 0; // Add yOffset for moving textures up or down + private final int xOffset = 225; // Add xOffset for moving textures right (previously 315) + private final int dashOffset = 225; // Add dashOffset for moving dashed lines right (previously 315) private Texture[] buttonTextures; private Texture[] displayTextures; private int displayTexturesCount = 5; private Vector2[] displayTexturePositions; - private int draggingTextureIndex = -1; - private Vector2 draggingTextureOffset = new Vector2(); - private Stage stage; - - private Table leftTable; - private Table rightTable; - private Table boardTable; - private TextButton counterText1; - private boolean isGridTableVisible = true; - private boolean isPlacementAllowed = false; + private final Stage stage; + private Array<DisplayHero> displayHeroes; private Array<DisplayHeroButton> displayHeroButtons; private boolean placeHero = false; private HeroType chosenHeroType; - private InputMultiplexer multiplexer; - private int gridWidth, gridHeight, startX, startY; + private final InputMultiplexer multiplexer; + private final int gridWidth, gridHeight, startX, startY; private boolean gridDrawn; private boolean isInputProcessorAdded; - private Engine engine; - private MoneySystem moneySystem = new MoneySystem(8000); + private final Engine engine; + private final MoneySystem moneySystem = new MoneySystem(8000); @@ -107,7 +99,6 @@ public class Board extends Actor { loadDisplayTextures(); setDisplayHeroes(); initButtonTextures(); - //setupInputProcessor(); displayHeroButtons = new Array<>(); createDisplayHeroButtons(displayHeroes); multiplexer = new InputMultiplexer(); @@ -117,7 +108,7 @@ public class Board extends Actor { } private void drawCounter() { - float iconSize = Gdx.graphics.getHeight() / 15; + float iconSize = Gdx.graphics.getHeight() / 15f; float iconX = screenWidth - iconSize * 2 - 160; // Move 200 pixels to the left float iconY = screenHeight - iconSize - 50; @@ -400,6 +391,7 @@ public class Board extends Actor { public Table getRightTable() { + Table rightTable = new Table(); return rightTable; } diff --git a/core/src/com/mygdx/game/utils/Slider.java b/core/src/com/mygdx/game/ds/Slider.java similarity index 97% rename from core/src/com/mygdx/game/utils/Slider.java rename to core/src/com/mygdx/game/ds/Slider.java index 867a25a..aa56b3b 100644 --- a/core/src/com/mygdx/game/utils/Slider.java +++ b/core/src/com/mygdx/game/ds/Slider.java @@ -1,10 +1,12 @@ -package com.mygdx.game.utils; +package com.mygdx.game.ds; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.MathUtils; import com.mygdx.game.HeroesVsMonsters; +import com.mygdx.game.utils.Enums; +import com.mygdx.game.utils.SettingsData; public class Slider { private final ShapeRenderer shapeRenderer; diff --git a/core/src/com/mygdx/game/ds/buttons/CircleButton.java b/core/src/com/mygdx/game/ds/buttons/CircleButton.java index d713d3f..eb33322 100644 --- a/core/src/com/mygdx/game/ds/buttons/CircleButton.java +++ b/core/src/com/mygdx/game/ds/buttons/CircleButton.java @@ -2,9 +2,11 @@ package com.mygdx.game.ds.buttons; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Circle; import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Null; public class CircleButton { @@ -14,33 +16,22 @@ public class CircleButton { private final int radius; private final Texture img; - public CircleButton(float scale, String internalpath) { - this.img = new Texture(internalpath); - this.radius = (int) ((this.img.getWidth() / 2) / scale); - this.position = new Vector2(Gdx.graphics.getWidth() / 2f - this.img.getWidth() / 2f, Gdx.graphics.getHeight() / 2f - this.img.getHeight() / 2f); - this.bounds = new Circle(this.position.x, this.position.y, this.radius); - this.shape = new ShapeRenderer(); - } - - public CircleButton(float scale, boolean middle, int ystart, String internalpath) { - this.img = new Texture(internalpath); - this.radius = (int) ((this.img.getWidth() / 2) / scale); - this.position = new Vector2(Gdx.graphics.getWidth() / 2f - this.img.getWidth() / 2f, ystart); - this.bounds = new Circle(this.position.x, this.position.y, this.radius); - this.shape = new ShapeRenderer(); - } - - public CircleButton(float scale, int xStart, boolean middle, String internalpath) { - this.img = new Texture(internalpath); - this.radius = (int) ((this.img.getWidth() / 2) / scale); - this.position = new Vector2(xStart, Gdx.graphics.getHeight() / 2f - this.img.getHeight() / 2f); - this.bounds = new Circle(this.position.x, this.position.y, this.radius); - this.shape = new ShapeRenderer(); - } - - public CircleButton(int radius, int xStart, int yStart, String internalPath) { + public CircleButton(int radius, @Null Integer xStart, @Null Integer yStart, String internalPath) { + float startPosX; + float startPosY; this.radius = radius; - this.position = new Vector2(xStart, yStart); + if (xStart == null) { + startPosX = Gdx.graphics.getWidth() / 2f - radius; + } else { + startPosX = xStart; + } + + if (yStart == null) { + startPosY = Gdx.graphics.getHeight() / 2f - radius; + } else { + startPosY = yStart; + } + this.position = new Vector2(startPosX, startPosY); this.bounds = new Circle(this.position.x, this.position.y, this.radius); this.shape = new ShapeRenderer(); this.img = new Texture(internalPath); @@ -65,4 +56,8 @@ public class CircleButton { public Texture getImg() { return img; } + + public void render(SpriteBatch sb) { + sb.draw(img, position.x, position.y, radius * 2, radius * 2); + } } diff --git a/core/src/com/mygdx/game/ds/buttons/RectangleButton.java b/core/src/com/mygdx/game/ds/buttons/RectangleButton.java index 7e692d7..79eea37 100644 --- a/core/src/com/mygdx/game/ds/buttons/RectangleButton.java +++ b/core/src/com/mygdx/game/ds/buttons/RectangleButton.java @@ -1,9 +1,12 @@ package com.mygdx.game.ds.buttons; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Null; public class RectangleButton { @@ -11,17 +14,32 @@ public class RectangleButton { private final Rectangle bounds; private final ShapeRenderer shape; private final Texture img; - private final int width; - private final int height; + private final float width; + private final float height; private final float scale; - public RectangleButton(float scale, int xStart, int yStart, String internalPath) { + public RectangleButton(float scale, @Null Integer xStart,@Null Integer yStart, String internalPath) { + float startPosX; + float startPosY; this.scale = scale; this.img = new Texture(internalPath); - this.width = (int) (img.getWidth() * scale); - this.height = (int ) (img.getHeight() * scale); - this.position = new Vector2(xStart, yStart); - this.bounds = new Rectangle(xStart, yStart, width, height); + this.width = img.getWidth() * scale; + this.height = img.getHeight() * scale; + + if (xStart == null) { + startPosX = Gdx.graphics.getWidth() / 2f - width / 2f; + } else { + startPosX = xStart; + } + + if (yStart == null) { + startPosY = Gdx.graphics.getHeight() / 2f - height / 2f; + } else { + startPosY = yStart; + } + + this.position = new Vector2(startPosX, startPosY); + this.bounds = new Rectangle(startPosX, startPosY, this.width, this.height); this.shape = new ShapeRenderer(); } @@ -37,9 +55,9 @@ public class RectangleButton { return shape; } - public int getWidth() {return this.width;} + public float getWidth() {return this.width;} - public int getHeight() {return this.height;} + public float getHeight() {return this.height;} public Texture getImg() { return img; @@ -48,4 +66,12 @@ public class RectangleButton { public float getScale() { return scale; } + + public void render(SpriteBatch sb) { + sb.draw(img, position.x, position.y, width, height); + } + + public void dispose() { + + } } diff --git a/core/src/com/mygdx/game/states/DummyState.java b/core/src/com/mygdx/game/states/DummyState.java deleted file mode 100644 index 323f8b0..0000000 --- a/core/src/com/mygdx/game/states/DummyState.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.mygdx.game.states; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.utils.ScreenUtils; -import com.mygdx.game.utils.Enums; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Set; - -public class DummyState extends State { - //Dummy class for GSM - - private GameStateManager gsm = GameStateManager.getGsm(); - - private ArrayList<Float> bg = new ArrayList<>(Arrays.asList(0f,0f,1f,1f)); - - @Override - public void update(float dt) { - handleInput(); - } - - @Override - public void render(SpriteBatch sb) { - ScreenUtils.clear(Color.CORAL); - sb.begin(); - sb.end(); - } - - @Override - public void handleInput() { - if (Gdx.input.isKeyPressed(Input.Keys.ENTER)) { - bg.set(2, 0f); - bg.set(1, 1f); - gsm.push(new SettingsState(Enums.SettingsBackground.CITY, Enums.GameType.MENU)); - } - } - - @Override - public void dispose() { - - } -} diff --git a/core/src/com/mygdx/game/states/GameMenuState.java b/core/src/com/mygdx/game/states/GameMenuState.java index 6486e59..0705436 100644 --- a/core/src/com/mygdx/game/states/GameMenuState.java +++ b/core/src/com/mygdx/game/states/GameMenuState.java @@ -1,26 +1,23 @@ package com.mygdx.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.utils.ScreenUtils; import com.mygdx.game.FireBaseInterface; import com.mygdx.game.SoundManager; +import com.mygdx.game.ds.buttons.RectangleButton; import com.mygdx.game.utils.Enums; public class GameMenuState extends State { - private GameStateManager gsm; + private final GameStateManager gsm; SoundManager soundManager = SoundManager.getInstance(); SpriteBatch sb; - Texture startButton; - Texture lobbyButton; - Texture menuButton; - private Texture menuBackground; - - Texture logo; - Texture img; + private final RectangleButton playButton; + private final Texture menuBackground; + private final RectangleButton logo; + private final RectangleButton settingsButton; int width; int height; @@ -32,12 +29,10 @@ public class GameMenuState extends State { sb = new SpriteBatch(); width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); - startButton = new Texture("playButton.png"); - lobbyButton = new Texture("Lobby-button.png"); - menuButton = new Texture("Menu-button.png"); - logo = new Texture("HvsMstor.png"); + logo = new RectangleButton(0.3f, null, (int) (Gdx.graphics.getHeight() / 2.5), "HvsMstor.png"); + playButton = new RectangleButton(1f, null, 200, "playButton.png"); + settingsButton = new RectangleButton(0.4f, Gdx.graphics.getWidth() - 200, Gdx.graphics.getHeight() - 200, "settings-button.png"); menuBackground = new Texture("menuBackground.png"); - } public void create() { @@ -50,101 +45,29 @@ public class GameMenuState extends State { @Override public void update(float dt) { handleInput(); - } @Override public void render(SpriteBatch batch) { ScreenUtils.clear(Color.BLACK); - float centerX = Gdx.graphics.getWidth() / 2f; - float centerY = Gdx.graphics.getHeight() / 2f; - - - - // Calculate the logo position and size - float logoWidth = width / 2.5f; - float logoHeight = logoWidth * ((float) logo.getHeight() / logo.getWidth()); - float logoX = (width - logoWidth) / 2f; - float logoY = ((height - logoHeight) / 2f) + height / 5f; - - - // Calculate the button positions and sizes - float buttonWidth = width / 7f; - float playButtonWidth = width / 5f; - float startButtonHeight = playButtonWidth * ((float) startButton.getHeight() / startButton.getWidth()); - float lobbyButtonHeight = buttonWidth * ((float) lobbyButton.getHeight() / lobbyButton.getWidth()); - float menuButtonHeight = buttonWidth * ((float) menuButton.getHeight() / menuButton.getWidth()); - - - float buttonX = (width - buttonWidth) / 2f; - float playButtonX = (width - playButtonWidth) /2f; - float startButtonY = height * 0.3f - startButtonHeight / 2f; - float lobbyButtonY = height * 0.12f - lobbyButtonHeight / 2f; - float menuButtonY = height * 0.21f - menuButtonHeight / 2f; - - - batch.begin(); batch.draw(menuBackground, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - - batch.draw(logo, logoX, logoY, logoWidth, logoHeight); - batch.draw(startButton, playButtonX, startButtonY, playButtonWidth, startButtonHeight); - batch.draw(lobbyButton, buttonX, lobbyButtonY, buttonWidth, lobbyButtonHeight); - batch.draw(menuButton, buttonX, menuButtonY, buttonWidth, menuButtonHeight); - - + logo.render(batch); + playButton.render(batch); + settingsButton.render(batch); batch.end(); - - - - - } - - private boolean isStartButtonClicked(int x, int y) { - float buttonWidth = width / 5f; - float startButtonHeight = buttonWidth * ((float) startButton.getHeight() / startButton.getWidth()); - float buttonX = (width - buttonWidth) / 2f; - float startButtonY = height * 0.3f - startButtonHeight / 2f; - - return Gdx.input.justTouched() && buttonX <= x && x <= buttonX + buttonWidth && - startButtonY <= Gdx.graphics.getHeight() - y && Gdx.graphics.getHeight() - y <= startButtonY + startButtonHeight; - } - - private boolean isLobbyButtonClicked(int x, int y) { - float buttonWidth = width / 7f; - float lobbyButtonHeight = buttonWidth * ((float) lobbyButton.getHeight() / lobbyButton.getWidth()); - float buttonX = (width - buttonWidth) / 2f; - float lobbyButtonY = height * 0.12f - lobbyButtonHeight / 2f; - - return Gdx.input.justTouched() && buttonX <= x && x <= buttonX + buttonWidth && - lobbyButtonY <= Gdx.graphics.getHeight() - y && Gdx.graphics.getHeight() - y <= lobbyButtonY + lobbyButtonHeight; - } - - private boolean isMenuButtonClicked(int x, int y) { - float buttonWidth = width / 7f; - float menuButtonHeight = buttonWidth * ((float) menuButton.getHeight() / menuButton.getWidth()); - float buttonX = (width - buttonWidth) / 2f; - float menuButtonY = height * 0.21f - menuButtonHeight / 2f; - - return Gdx.input.justTouched() && buttonX <= x && x <= buttonX + buttonWidth && - menuButtonY <= Gdx.graphics.getHeight() - y && Gdx.graphics.getHeight() - y <= menuButtonY + menuButtonHeight; } @Override public void handleInput() { if (Gdx.input.isTouched()) { int x = Gdx.input.getX(); - int y = Gdx.input.getY(); - if (isStartButtonClicked(x, y)) { - soundManager.playSound("menuNavigate"); - gsm.push(new IntroCutsceneState()); - } - if (isLobbyButtonClicked(x, y)) { + int y = Gdx.graphics.getHeight() - Gdx.input.getY(); + if (playButton.getBounds().contains(x, y)) { + gsm.push(new PlayState()); + } else if (settingsButton.getBounds().contains(x,y)) { gsm.push(new SettingsState(Enums.SettingsBackground.CITY, Enums.GameType.MENU)); } - if (isMenuButtonClicked(x, y)) { - gsm.push(new StartState()); - } } } @@ -152,9 +75,7 @@ public class GameMenuState extends State { @Override public void dispose() { - startButton.dispose(); - lobbyButton.dispose(); - menuButton.dispose(); + playButton.dispose(); System.out.print("Menu State Disposed"); } } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index d2769cf..84dd611 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -21,14 +21,15 @@ import com.mygdx.game.systems.HeroSystem; import com.mygdx.game.systems.ProjectileMovementSystem; import com.mygdx.game.utils.Enums; -public class PlayState extends State{ +public class PlayState extends State { private SpriteBatch batch; private BitmapFont font; private Stage stage; private ShapeRenderer shapeRenderer; - private SoundManager soundManager = SoundManager.getInstance(); - private MoneySystem moneySystem; - private boolean isPlacementAllowed = false; + private final MoneySystem moneySystem; + private final boolean isPlacementAllowed = false; + private final SoundManager soundManager = SoundManager.getInstance(); + private static Engine engine; private Board board; private TextButton counterText1; @@ -36,20 +37,15 @@ public class PlayState extends State{ private final GameStateManager gsm; public PlayState() { - //super(gsm); menuButton = new RectangleButton(0.5f, Gdx.graphics.getWidth() - 137, Gdx.graphics.getHeight() - 100, "Lobby-button.png"); gsm = GameStateManager.getGsm(); - initialize(); - } - - private void initialize() { - initializeGameEngine(); batch = new SpriteBatch(); moneySystem = new MoneySystem(4000); + soundManager.playSequence(); + + initializeGameEngine(); initFontStageAndRenderer(); createBoard(); - soundManager.playSequence(); - //Game engine & systems } private void initializeGameEngine() { @@ -83,12 +79,12 @@ public class PlayState extends State{ @Override public void update(float dt) { - stage.draw(); engine.update(dt); + handleInput(); } public void calculateMoney() { - float iconSize = Gdx.graphics.getWidth() / 30; + float iconSize = Gdx.graphics.getWidth() / 30f; BitmapFont counterFont = new BitmapFont(); counterFont.getData().setScale(4); // First counter diff --git a/core/src/com/mygdx/game/states/SettingsState.java b/core/src/com/mygdx/game/states/SettingsState.java index 9f008f7..7fd5a67 100644 --- a/core/src/com/mygdx/game/states/SettingsState.java +++ b/core/src/com/mygdx/game/states/SettingsState.java @@ -11,7 +11,7 @@ import com.mygdx.game.ds.buttons.CircleButton; import com.mygdx.game.ds.buttons.RectangleButton; import com.mygdx.game.utils.Enums; import com.mygdx.game.utils.SettingsData; -import com.mygdx.game.utils.Slider; +import com.mygdx.game.ds.Slider; import java.util.ArrayList; import java.util.Arrays; -- GitLab From 4b144d8caa14495ca9c4c826b8ffd76ebc325c75 Mon Sep 17 00:00:00 2001 From: Johannes Finne Reinseth <johannes.reinseth@aboveit.no> Date: Sat, 22 Apr 2023 14:04:49 +0200 Subject: [PATCH 14/23] fix: music to introcutscene --- core/src/com/mygdx/game/states/GameMenuState.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/src/com/mygdx/game/states/GameMenuState.java b/core/src/com/mygdx/game/states/GameMenuState.java index 0705436..a840039 100644 --- a/core/src/com/mygdx/game/states/GameMenuState.java +++ b/core/src/com/mygdx/game/states/GameMenuState.java @@ -12,8 +12,7 @@ import com.mygdx.game.utils.Enums; public class GameMenuState extends State { private final GameStateManager gsm; - SoundManager soundManager = SoundManager.getInstance(); - SpriteBatch sb; + private SoundManager soundManager = SoundManager.getInstance(); private final RectangleButton playButton; private final Texture menuBackground; private final RectangleButton logo; @@ -26,7 +25,6 @@ public class GameMenuState extends State { public GameMenuState() { super(); gsm = GameStateManager.getGsm(); - sb = new SpriteBatch(); width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); logo = new RectangleButton(0.3f, null, (int) (Gdx.graphics.getHeight() / 2.5), "HvsMstor.png"); @@ -64,7 +62,8 @@ public class GameMenuState extends State { int x = Gdx.input.getX(); int y = Gdx.graphics.getHeight() - Gdx.input.getY(); if (playButton.getBounds().contains(x, y)) { - gsm.push(new PlayState()); + soundManager.playSound("menuNavigate"); + gsm.push(new IntroCutsceneState()); } else if (settingsButton.getBounds().contains(x,y)) { gsm.push(new SettingsState(Enums.SettingsBackground.CITY, Enums.GameType.MENU)); } -- GitLab From 600cf882943fa677aac4c59178d7d3450a98f329 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Sat, 22 Apr 2023 14:59:12 +0200 Subject: [PATCH 15/23] projectile movement handling --- .../mygdx/game/components/WaveComponent.java | 2 ++ .../game/systems/MonsterMovementSystem.java | 28 +++++++++++++++++++ .../com/mygdx/game/systems/MonsterSystem.java | 4 --- .../systems/ProjectileMovementSystem.java | 5 +--- 4 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 core/src/com/mygdx/game/components/WaveComponent.java create mode 100644 core/src/com/mygdx/game/systems/MonsterMovementSystem.java delete mode 100644 core/src/com/mygdx/game/systems/MonsterSystem.java diff --git a/core/src/com/mygdx/game/components/WaveComponent.java b/core/src/com/mygdx/game/components/WaveComponent.java new file mode 100644 index 0000000..516c607 --- /dev/null +++ b/core/src/com/mygdx/game/components/WaveComponent.java @@ -0,0 +1,2 @@ +package com.mygdx.game.components;public class WaveComponent { +} diff --git a/core/src/com/mygdx/game/systems/MonsterMovementSystem.java b/core/src/com/mygdx/game/systems/MonsterMovementSystem.java new file mode 100644 index 0000000..1112e6e --- /dev/null +++ b/core/src/com/mygdx/game/systems/MonsterMovementSystem.java @@ -0,0 +1,28 @@ +package com.mygdx.game.systems; + +import com.badlogic.ashley.core.ComponentMapper; +import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.Family; +import com.badlogic.ashley.systems.IteratingSystem; +import com.mygdx.game.components.AttackComponent; +import com.mygdx.game.components.MonsterComponent; + +public class MonsterSystem extends IteratingSystem { + private ComponentMapper<MonsterComponent> monsterMapper; + private ComponentMapper<AttackComponent> attackMapper; + private Engine engine; + public MonsterSystem(Engine engine) { + super(Family.all(MonsterComponent.class, AttackComponent.class).get()); + monsterMapper = ComponentMapper.getFor(MonsterComponent.class); + attackMapper = ComponentMapper.getFor(AttackComponent.class); + this.engine = engine; + + } + + @Override + protected void processEntity(Entity entity, float deltaTime) { + MonsterComponent monster = monsterMapper.get(entity); + AttackComponent attack = attackMapper.get + } +} diff --git a/core/src/com/mygdx/game/systems/MonsterSystem.java b/core/src/com/mygdx/game/systems/MonsterSystem.java deleted file mode 100644 index 8746a39..0000000 --- a/core/src/com/mygdx/game/systems/MonsterSystem.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.systems; - -public class MonsterSystem { -} diff --git a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java index ed54ac1..5a4f779 100644 --- a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java +++ b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java @@ -40,10 +40,7 @@ public class ProjectileMovementSystem extends IteratingSystem { } //Increment the horizontal position of the projectile based on its velocity - float posY = positionComponent.getPosition().y; - float posX = positionComponent.getPosition().x; float speed = projectileComponent.getVelocity(); - float newPosX = posX + speed; - positionComponent.setPosition(new Vector2(newPosX, posY)); + positionComponent.setPosition(positionComponent.getPosition().add(speed, 0)); } } -- GitLab From 8e076a35dcb2f22d996bba42538dff571a4a34ea Mon Sep 17 00:00:00 2001 From: Anh <qapham@stud.ntnu.no> Date: Sat, 22 Apr 2023 14:59:32 +0200 Subject: [PATCH 16/23] Add 8 bit trophy image --- assets/trophy.png | Bin 0 -> 4612 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/trophy.png diff --git a/assets/trophy.png b/assets/trophy.png new file mode 100644 index 0000000000000000000000000000000000000000..fee237700cfd8571ea0bcae06d9fb8dff46342b8 GIT binary patch literal 4612 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 literal 0 HcmV?d00001 -- GitLab From 4f14ca6c7161b579555c20229dd3893b53762417 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Sat, 22 Apr 2023 15:01:33 +0200 Subject: [PATCH 17/23] wave system --- .../mygdx/game/components/WaveComponent.java | 71 ++++++++++++++++++- core/src/com/mygdx/game/states/PlayState.java | 3 + .../com/mygdx/game/systems/WaveSystem.java | 49 ++++++++++++- 3 files changed, 120 insertions(+), 3 deletions(-) diff --git a/core/src/com/mygdx/game/components/WaveComponent.java b/core/src/com/mygdx/game/components/WaveComponent.java index 516c607..2cfeb27 100644 --- a/core/src/com/mygdx/game/components/WaveComponent.java +++ b/core/src/com/mygdx/game/components/WaveComponent.java @@ -1,2 +1,71 @@ -package com.mygdx.game.components;public class WaveComponent { +package com.mygdx.game.components; + +import com.badlogic.ashley.core.Component; +import com.badlogic.gdx.utils.Array; +import com.mygdx.game.types.MonsterType; + +public class WaveComponent implements Component { + private float timeSinceLastSpawn; + private int numberOfMonsters; + private boolean isActive; + private int waveNumber; + private float spawnTimer; + private float waveTimeElapsed; + + public WaveComponent(int numberOfMonsters, int waveNumber) { + this.numberOfMonsters = numberOfMonsters; + this.waveNumber = waveNumber; + this.timeSinceLastSpawn = 0f; + this.isActive = false; + this.spawnTimer = 5f; + this.waveTimeElapsed = 0f; + } + + public float getSpawnTimer() { + return spawnTimer; + } + + public void setSpawnTimer(float spawnTimer) { + this.spawnTimer = spawnTimer; + } + + public int getNumberOfMonsters() { + return numberOfMonsters; + } + + public void setNumberOfMonsters(int numberOfMonsters) { + this.numberOfMonsters = numberOfMonsters; + } + + public boolean isActive() { + return isActive; + } + + public void setActive(boolean active) { + isActive = active; + } + + public int getWaveNumber() { + return waveNumber; + } + + public void setWaveNumber(int waveNumber) { + this.waveNumber = waveNumber; + } + + public float getTimeSinceLastSpawn() { + return timeSinceLastSpawn; + } + + public void setTimeSinceLastSpawn(float timeSinceLastSpawn) { + this.timeSinceLastSpawn = timeSinceLastSpawn; + } + + public float getWaveTimeElapsed() { + return waveTimeElapsed; + } + + public void setWaveTimeElapsed(float waveTimeElapsed) { + this.waveTimeElapsed = waveTimeElapsed; + } } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index 75d030f..55d574d 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -34,6 +34,7 @@ import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.ds.buttons.RectangleButton; import com.mygdx.game.systems.HeroSystem; import com.mygdx.game.systems.ProjectileMovementSystem; +import com.mygdx.game.systems.WaveSystem; import com.mygdx.game.types.HeroType; import com.mygdx.game.utils.Enums; @@ -78,9 +79,11 @@ public class PlayState extends State{ //Systems for game logic HeroSystem heroSystem = new HeroSystem(engine); ProjectileMovementSystem projectileMovementSystem = new ProjectileMovementSystem(engine); + WaveSystem waveSystem = new WaveSystem(engine); engine.addSystem(heroSystem); engine.addSystem(projectileMovementSystem); + engine.addSystem(waveSystem); /*Entity spiderman = HeroFactory.createHero(HeroType.SPIDERMAN, new Vector2(50, 50)); Entity captain = HeroFactory.createHero(HeroType.CAPTAIN_AMERICA, new Vector2(50, 50)); diff --git a/core/src/com/mygdx/game/systems/WaveSystem.java b/core/src/com/mygdx/game/systems/WaveSystem.java index ac9271b..ee1ce37 100644 --- a/core/src/com/mygdx/game/systems/WaveSystem.java +++ b/core/src/com/mygdx/game/systems/WaveSystem.java @@ -1,9 +1,54 @@ package com.mygdx.game.systems; +import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.Family; +import com.badlogic.ashley.systems.IteratingSystem; +import com.badlogic.gdx.utils.Array; +import com.mygdx.game.components.WaveComponent; +import com.mygdx.game.entities.MonsterFactory; -public class WaveSystem { +public class WaveSystem extends IteratingSystem { + private ComponentMapper<WaveComponent> waveMapper; + private Engine engine; - public WaveSystem(Engine engine, float dt) { + public WaveSystem(Engine engine) { + super(Family.all(WaveComponent.class).get()); + waveMapper = ComponentMapper.getFor(WaveComponent.class); + this.engine = engine; + initializeWaveSystem(); + System.out.println("Wave 1 is starting in 5 seconds"); + } + + private void initializeWaveSystem() { + //Initializes the first wave + Entity waveEntity = new Entity(); + WaveComponent waveComponent = new WaveComponent(1, 1); + waveEntity.add(waveComponent); + engine.addEntity(waveEntity); + } + + @Override + protected void processEntity(Entity entity, float deltaTime) { + WaveComponent wave = waveMapper.get(entity); + + //Wave duration is incremented + wave.setWaveTimeElapsed(wave.getWaveTimeElapsed() + deltaTime); + + //Activate the current wave + if (wave.getWaveTimeElapsed() >= 5f && !wave.isActive()) { + wave.setActive(true); + System.out.println("Beginning wave " + wave.getWaveNumber()); + } + + //Begin a new wave after the given time + if (wave.getWaveTimeElapsed() >= 10f) { + System.out.println("Ending wave " + wave.getWaveNumber()); + wave.setActive(false); + wave.setWaveNumber(wave.getWaveNumber() + 1); + wave.setWaveTimeElapsed(0f); + wave.setNumberOfMonsters(wave.getWaveNumber() + 2); + } } } -- GitLab From fc5e99bb855f1f24bf4c0c1b3e5103af022d8d58 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Sat, 22 Apr 2023 15:02:35 +0200 Subject: [PATCH 18/23] monster movement system --- .../game/components/MonsterComponent.java | 12 +++++++-- .../mygdx/game/entities/MonsterFactory.java | 4 +-- .../game/systems/MonsterMovementSystem.java | 27 ++++++++++++++----- .../com/mygdx/game/systems/WaveSystem.java | 4 +-- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/core/src/com/mygdx/game/components/MonsterComponent.java b/core/src/com/mygdx/game/components/MonsterComponent.java index 5e0c3d6..dee19a1 100644 --- a/core/src/com/mygdx/game/components/MonsterComponent.java +++ b/core/src/com/mygdx/game/components/MonsterComponent.java @@ -4,7 +4,9 @@ import com.badlogic.ashley.core.Component; import com.mygdx.game.types.MonsterType; public class MonsterComponent implements Component { - public MonsterComponent(MonsterType monsterType) { + private MonsterType monsterType; + private float movementSpeed; + public MonsterComponent(MonsterType monsterType, float movementSpeed) { this.monsterType = monsterType; } @@ -16,5 +18,11 @@ public class MonsterComponent implements Component { this.monsterType = monsterType; } - private MonsterType monsterType; + public float getMovementSpeed() { + return movementSpeed; + } + + public void setMovementSpeed(float movementSpeed) { + this.movementSpeed = movementSpeed; + } } diff --git a/core/src/com/mygdx/game/entities/MonsterFactory.java b/core/src/com/mygdx/game/entities/MonsterFactory.java index 6f15b12..f6ba04d 100644 --- a/core/src/com/mygdx/game/entities/MonsterFactory.java +++ b/core/src/com/mygdx/game/entities/MonsterFactory.java @@ -4,6 +4,7 @@ import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.Vector2; +import com.mygdx.game.components.AttackComponent; import com.mygdx.game.components.MonsterComponent; import com.mygdx.game.components.MovementSpeedComponent; import com.mygdx.game.components.PositionComponent; @@ -16,8 +17,7 @@ public class MonsterFactory { Entity monster = new Entity(); monster.add(new SpriteComponent(getMonsterSprite(monsterType))); monster.add(new PositionComponent(boardPosition)); - monster.add(new MovementSpeedComponent(getMonsterMovementSpeed(monsterType))); - monster.add(new MonsterComponent(monsterType)); + monster.add(new MonsterComponent(monsterType, getMonsterMovementSpeed(monsterType))); return monster; } diff --git a/core/src/com/mygdx/game/systems/MonsterMovementSystem.java b/core/src/com/mygdx/game/systems/MonsterMovementSystem.java index 1112e6e..b454734 100644 --- a/core/src/com/mygdx/game/systems/MonsterMovementSystem.java +++ b/core/src/com/mygdx/game/systems/MonsterMovementSystem.java @@ -5,17 +5,19 @@ import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; import com.badlogic.ashley.systems.IteratingSystem; -import com.mygdx.game.components.AttackComponent; +import com.badlogic.gdx.Gdx; import com.mygdx.game.components.MonsterComponent; +import com.mygdx.game.components.PositionComponent; -public class MonsterSystem extends IteratingSystem { +public class MonsterMovementSystem extends IteratingSystem { private ComponentMapper<MonsterComponent> monsterMapper; - private ComponentMapper<AttackComponent> attackMapper; + private ComponentMapper<PositionComponent> positionMapper; private Engine engine; - public MonsterSystem(Engine engine) { - super(Family.all(MonsterComponent.class, AttackComponent.class).get()); + + public MonsterMovementSystem(Engine engine) { + super(Family.all(MonsterComponent.class, PositionComponent.class).get()); monsterMapper = ComponentMapper.getFor(MonsterComponent.class); - attackMapper = ComponentMapper.getFor(AttackComponent.class); + positionMapper = ComponentMapper.getFor(PositionComponent.class); this.engine = engine; } @@ -23,6 +25,17 @@ public class MonsterSystem extends IteratingSystem { @Override protected void processEntity(Entity entity, float deltaTime) { MonsterComponent monster = monsterMapper.get(entity); - AttackComponent attack = attackMapper.get + PositionComponent monsterPos = positionMapper.get(entity); + + //Make the monster move to the left + monsterPos.setPosition(monsterPos.getPosition().add(monster.getMovementSpeed() * -1, 0)); + + //Remove monsters that are out of bounds + if (monsterPos.getPosition().x <= 0 + Gdx.graphics.getWidth() / 8) { + entity.removeAll(); + engine.removeEntity(entity); + } + + } } diff --git a/core/src/com/mygdx/game/systems/WaveSystem.java b/core/src/com/mygdx/game/systems/WaveSystem.java index ee1ce37..d90174d 100644 --- a/core/src/com/mygdx/game/systems/WaveSystem.java +++ b/core/src/com/mygdx/game/systems/WaveSystem.java @@ -39,12 +39,12 @@ public class WaveSystem extends IteratingSystem { //Activate the current wave if (wave.getWaveTimeElapsed() >= 5f && !wave.isActive()) { wave.setActive(true); - System.out.println("Beginning wave " + wave.getWaveNumber()); + //System.out.println("Beginning wave " + wave.getWaveNumber()); } //Begin a new wave after the given time if (wave.getWaveTimeElapsed() >= 10f) { - System.out.println("Ending wave " + wave.getWaveNumber()); + //System.out.println("Ending wave " + wave.getWaveNumber()); wave.setActive(false); wave.setWaveNumber(wave.getWaveNumber() + 1); wave.setWaveTimeElapsed(0f); -- GitLab From 16e272fd25f57e4de0d785e9ff0e8b2bfb8b1ace Mon Sep 17 00:00:00 2001 From: Johannes Finne Reinseth <johannes.reinseth@aboveit.no> Date: Sat, 22 Apr 2023 15:38:15 +0200 Subject: [PATCH 19/23] feat: rework codebase --- assets/highscore.png | Bin 0 -> 7295 bytes core/src/com/mygdx/game/SoundManager.java | 10 +- core/src/com/mygdx/game/ds/Board.java | 6 +- .../buttons}/DisplayHeroButton.java | 2 +- .../com/mygdx/game/states/GameMenuState.java | 9 +- core/src/com/mygdx/game/states/GridState.java | 38 ------ .../mygdx/game/states/IntroCutsceneState.java | 45 +++--- .../mygdx/game/states/LeaderBoardState.java | 25 ++++ .../src/com/mygdx/game/states/StartState.java | 128 ------------------ 9 files changed, 58 insertions(+), 205 deletions(-) create mode 100644 assets/highscore.png rename core/src/com/mygdx/game/{utils => ds/buttons}/DisplayHeroButton.java (98%) delete mode 100644 core/src/com/mygdx/game/states/GridState.java create mode 100644 core/src/com/mygdx/game/states/LeaderBoardState.java delete mode 100644 core/src/com/mygdx/game/states/StartState.java diff --git a/assets/highscore.png b/assets/highscore.png new file mode 100644 index 0000000000000000000000000000000000000000..4d199bbfa7c2ad59fd7ac19d447704698dffb4c7 GIT binary patch literal 7295 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 literal 0 HcmV?d00001 diff --git a/core/src/com/mygdx/game/SoundManager.java b/core/src/com/mygdx/game/SoundManager.java index 09563a9..9eff5ad 100644 --- a/core/src/com/mygdx/game/SoundManager.java +++ b/core/src/com/mygdx/game/SoundManager.java @@ -4,15 +4,17 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.utils.Disposable; +import com.mygdx.game.utils.SettingsData; import java.util.HashMap; import java.util.Map; public class SoundManager implements Disposable { private static SoundManager instance; - private Map<String, Sound> soundMap; - private Map<String, Music> musicMap; + private final Map<String, Sound> soundMap; + private final Map<String, Music> musicMap; private Music currentMusic; + private final SettingsData settingsData = SettingsData.loadSettings(); public SoundManager() { soundMap = new HashMap<>(); @@ -52,7 +54,7 @@ public class SoundManager implements Disposable { public void playSound(String soundName) { if (soundMap.containsKey(soundName)) { - soundMap.get(soundName).play(1.0f); + soundMap.get(soundName).play(settingsData.SFX / 100f); } } @@ -115,7 +117,7 @@ public class SoundManager implements Disposable { } currentMusic = musicMap.get(musicName); currentMusic.setLooping(loop); - currentMusic.setVolume(0.6f); + currentMusic.setVolume(settingsData.AUDIO / 100f); currentMusic.play(); } } diff --git a/core/src/com/mygdx/game/ds/Board.java b/core/src/com/mygdx/game/ds/Board.java index 933a1f4..733fd13 100644 --- a/core/src/com/mygdx/game/ds/Board.java +++ b/core/src/com/mygdx/game/ds/Board.java @@ -23,7 +23,6 @@ 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.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.badlogic.gdx.utils.Array; @@ -32,10 +31,7 @@ import com.mygdx.game.components.HeroComponent; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.types.HeroType; -import com.mygdx.game.utils.DisplayHeroButton; - -import java.util.ArrayList; -import java.util.List; +import com.mygdx.game.ds.buttons.DisplayHeroButton; public class Board extends Actor { private final int screenHeight = Gdx.graphics.getHeight(); diff --git a/core/src/com/mygdx/game/utils/DisplayHeroButton.java b/core/src/com/mygdx/game/ds/buttons/DisplayHeroButton.java similarity index 98% rename from core/src/com/mygdx/game/utils/DisplayHeroButton.java rename to core/src/com/mygdx/game/ds/buttons/DisplayHeroButton.java index 1132c8a..2b7e1b4 100644 --- a/core/src/com/mygdx/game/utils/DisplayHeroButton.java +++ b/core/src/com/mygdx/game/ds/buttons/DisplayHeroButton.java @@ -1,4 +1,4 @@ -package com.mygdx.game.utils; +package com.mygdx.game.ds.buttons; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.Vector2; diff --git a/core/src/com/mygdx/game/states/GameMenuState.java b/core/src/com/mygdx/game/states/GameMenuState.java index a840039..a363120 100644 --- a/core/src/com/mygdx/game/states/GameMenuState.java +++ b/core/src/com/mygdx/game/states/GameMenuState.java @@ -17,6 +17,7 @@ public class GameMenuState extends State { private final Texture menuBackground; private final RectangleButton logo; private final RectangleButton settingsButton; + private final RectangleButton trophyButton; int width; int height; @@ -28,8 +29,9 @@ public class GameMenuState extends State { width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); logo = new RectangleButton(0.3f, null, (int) (Gdx.graphics.getHeight() / 2.5), "HvsMstor.png"); - playButton = new RectangleButton(1f, null, 200, "playButton.png"); + playButton = new RectangleButton(1f, null, 150, "playButton.png"); settingsButton = new RectangleButton(0.4f, Gdx.graphics.getWidth() - 200, Gdx.graphics.getHeight() - 200, "settings-button.png"); + trophyButton = new RectangleButton(0.5f, 80, Gdx.graphics.getHeight() - 210, "trophy.png"); menuBackground = new Texture("menuBackground.png"); } @@ -53,6 +55,7 @@ public class GameMenuState extends State { logo.render(batch); playButton.render(batch); settingsButton.render(batch); + trophyButton.render(batch); batch.end(); } @@ -66,12 +69,12 @@ public class GameMenuState extends State { gsm.push(new IntroCutsceneState()); } else if (settingsButton.getBounds().contains(x,y)) { gsm.push(new SettingsState(Enums.SettingsBackground.CITY, Enums.GameType.MENU)); + } else if (trophyButton.getBounds().contains(x,y)) { + gsm.push(new LeaderBoardState()); } } } - - @Override public void dispose() { playButton.dispose(); diff --git a/core/src/com/mygdx/game/states/GridState.java b/core/src/com/mygdx/game/states/GridState.java deleted file mode 100644 index aa101cc..0000000 --- a/core/src/com/mygdx/game/states/GridState.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.mygdx.game.states; - -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.utils.ScreenUtils; - -public class GridState extends State { - private GameStateManager gsm; - - public GridState() { - super(); - gsm = GameStateManager.getGsm(); - } - - public void create() { - - } - - @Override - public void update(float dt) { - - } - - @Override - public void render(SpriteBatch batch) { - ScreenUtils.clear(Color.PINK); - } - - @Override - public void handleInput() { - - } - - @Override - public void dispose() { - - } -} diff --git a/core/src/com/mygdx/game/states/IntroCutsceneState.java b/core/src/com/mygdx/game/states/IntroCutsceneState.java index 679b225..200ffa2 100644 --- a/core/src/com/mygdx/game/states/IntroCutsceneState.java +++ b/core/src/com/mygdx/game/states/IntroCutsceneState.java @@ -7,19 +7,19 @@ import com.badlogic.gdx.utils.ScreenUtils; import com.mygdx.game.SoundManager; public class IntroCutsceneState extends State { - private GameStateManager gsm; - private Texture cityBackground; - private Texture explosionsBackground; - private Texture nick; - private Texture speech_1; - private Texture speech_2; - private Texture speech_3; - private SoundManager soundmanager = SoundManager.getInstance(); + private final GameStateManager gsm; + private final Texture cityBackground; + private final Texture explosionsBackground; + private final Texture nick; + private final Texture speech_1; + private final Texture speech_2; + private final Texture speech_3; + private final SoundManager soundmanager = SoundManager.getInstance(); private float nickPositionX; - private float nickWidth; - private float nickHeight; - private float slidingSpeed; + private final float nickWidth; + private final float nickHeight; + private final float slidingSpeed; private float elapsedTime; private int phase; @@ -45,21 +45,15 @@ public class IntroCutsceneState extends State { @Override public void update(float dt) { elapsedTime += dt; - Boolean musicOn = false; handleInput(); switch (phase) { case 0: nickPositionX -= slidingSpeed * dt; if (nickPositionX <= Gdx.graphics.getWidth() - nickWidth) { nickPositionX = Gdx.graphics.getWidth() - nickWidth; - soundmanager.playMusic("avengersHype", false); - - phase = 1; elapsedTime = 0; - - } break; case 1: @@ -86,9 +80,8 @@ public class IntroCutsceneState extends State { break; case 4: if (elapsedTime >= 3.0f) { - //System.out.println("Cutscene finished!"); - goNext(); - + soundmanager.stopMusic("avengersHype"); + gsm.push(new PlayState()); } break; } @@ -120,15 +113,15 @@ public class IntroCutsceneState extends State { @Override public void handleInput() { if (Gdx.input.isTouched()) { - goNext(); + if (phase < 4) { + phase += 1; + } else { + soundmanager.stopMusic("avengersHype"); + gsm.push(new PlayState()); + } } - } - public void goNext() { - soundmanager.stopMusic("avengersHype"); - gsm.push(new PlayState()); - } @Override public void dispose() { cityBackground.dispose(); diff --git a/core/src/com/mygdx/game/states/LeaderBoardState.java b/core/src/com/mygdx/game/states/LeaderBoardState.java new file mode 100644 index 0000000..4521e97 --- /dev/null +++ b/core/src/com/mygdx/game/states/LeaderBoardState.java @@ -0,0 +1,25 @@ +package com.mygdx.game.states; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; + +public class LeaderBoardState extends State { + @Override + public void update(float dt) { + + } + + @Override + public void render(SpriteBatch batch) { + + } + + @Override + public void handleInput() { + + } + + @Override + public void dispose() { + + } +} diff --git a/core/src/com/mygdx/game/states/StartState.java b/core/src/com/mygdx/game/states/StartState.java deleted file mode 100644 index cc0b0ef..0000000 --- a/core/src/com/mygdx/game/states/StartState.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.mygdx.game.states; - -import com.badlogic.gdx.InputProcessor; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.utils.ScreenUtils; -import com.mygdx.game.ds.Board; - -public class StartState extends State implements InputProcessor { - SpriteBatch batch; - Board board; - - - public StartState() { - initialize(); - } - - public void initialize() { - batch = new SpriteBatch(); - //board = new Board(6, 9, engine); - - Texture texture = new Texture("characterIcon1.png"); - Texture texture1 = new Texture("characterIcon2.png"); - - board.setTexture(0, 0, texture); - board.setTexture(0, 1, texture); - board.setTexture(0, 2, texture); - board.setTexture(0, 3, texture); - board.setTexture(0, 4, texture); - board.setTexture(0, 5, texture); - board.setTexture(0, 6, texture); - board.setTexture(0, 7, texture); - board.setTexture(0, 8, texture); - - board.setTexture(1, 2, texture); - board.setTexture(2, 2, texture); - board.setTexture(3, 2, texture); - board.setTexture(4, 2, texture); - board.setTexture(5, 2, texture); - - board.setTexture(1, 3, texture1); - board.setTexture(2, 3, texture1); - board.setTexture(3, 3, texture1); - board.setTexture(4, 3, texture1); - board.setTexture(5, 3, texture1); - - board.setTexture(4, 5, texture1); - } - - @Override - public void update(float dt) { - - } - - @Override - public void render(SpriteBatch batch) { - ScreenUtils.clear(Color.DARK_GRAY); - batch.begin(); - - int rows = board.getRows(); - int cols = board.getCols(); - - // Retrieve the textures array from the board - Texture[][] textures = board.getTextures(); - - //Render board - board.render(batch); - - - batch.end(); - - } - - @Override - public void handleInput() { - - } - - @Override - public void dispose() { - - } - - /* - * Methods for movement-functionality - */ - - @Override - public boolean keyDown(int keycode) { - return false; - } - - @Override - public boolean keyUp(int keycode) { - return false; - } - - @Override - public boolean keyTyped(char character) { - return false; - } - - @Override - public boolean touchDown(int screenX, int screenY, int pointer, int button) { - return false; - } - - @Override - public boolean touchUp(int screenX, int screenY, int pointer, int button) { - return false; - } - - @Override - public boolean touchDragged(int screenX, int screenY, int pointer) { - return false; - } - - @Override - public boolean mouseMoved(int screenX, int screenY) { - return false; - } - - @Override - public boolean scrolled(float amountX, float amountY) { - return false; - } -} -- GitLab From d21e7a4fb955d1dd08f1bdc71ba0aa05cbedb871 Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Sat, 22 Apr 2023 16:17:46 +0200 Subject: [PATCH 20/23] monster movement system and render --- .../game/components/MonsterComponent.java | 1 + .../mygdx/game/entities/MonsterFactory.java | 23 +++++++------- core/src/com/mygdx/game/states/PlayState.java | 22 +++++++++++--- .../com/mygdx/game/systems/WaveSystem.java | 30 ++++++++++++++++--- 4 files changed, 56 insertions(+), 20 deletions(-) diff --git a/core/src/com/mygdx/game/components/MonsterComponent.java b/core/src/com/mygdx/game/components/MonsterComponent.java index dee19a1..45f2644 100644 --- a/core/src/com/mygdx/game/components/MonsterComponent.java +++ b/core/src/com/mygdx/game/components/MonsterComponent.java @@ -8,6 +8,7 @@ public class MonsterComponent implements Component { private float movementSpeed; public MonsterComponent(MonsterType monsterType, float movementSpeed) { this.monsterType = monsterType; + this.movementSpeed = movementSpeed; } public MonsterType getMonsterType() { diff --git a/core/src/com/mygdx/game/entities/MonsterFactory.java b/core/src/com/mygdx/game/entities/MonsterFactory.java index f6ba04d..646c258 100644 --- a/core/src/com/mygdx/game/entities/MonsterFactory.java +++ b/core/src/com/mygdx/game/entities/MonsterFactory.java @@ -22,13 +22,12 @@ public class MonsterFactory { } private static Texture getMonsterSprite(MonsterType monsterType) { - //TODO endre path her - Texture texture = null; + //TODO legg til riktig bilde switch (monsterType) { case MAGNETO: - return new Texture(Gdx.files.internal("characterIcon3.png")); + return new Texture(Gdx.files.internal("Monster_3.png")); case JUGGERNAUT: - return new Texture(Gdx.files.internal("characterIcon1.png")); + return new Texture(Gdx.files.internal("Monster_3.png")); case VENOM: return new Texture(Gdx.files.internal("Monster_3.png")); case HOBGOBLIN: @@ -36,7 +35,7 @@ public class MonsterFactory { case GOBLIN_GLIDER: return new Texture(Gdx.files.internal("Monster_1.png")); case MYSTIQUE: - return new Texture(Gdx.files.internal("characterIcon6.png")); + return new Texture(Gdx.files.internal("Monster_3.png")); default: return null; } @@ -45,19 +44,19 @@ public class MonsterFactory { private static float getMonsterMovementSpeed(MonsterType monsterType) { switch (monsterType) { case MAGNETO: - return 2f; + return 20f; case JUGGERNAUT: - return 4f; + return 30f; case VENOM: - return 1f; + return 30f; case HOBGOBLIN: - return 2.5f; + return 20f; case GOBLIN_GLIDER: - return 1.5f; + return 10f; case MYSTIQUE: - return 5f; + return 15f; default: - return 0; + return 30f; } } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index 55d574d..ce61a99 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -26,6 +26,7 @@ import com.mygdx.game.MoneySystem; import com.mygdx.game.SoundManager; import com.mygdx.game.components.AttackComponent; import com.mygdx.game.components.HeroComponent; +import com.mygdx.game.components.MonsterComponent; import com.mygdx.game.components.PositionComponent; import com.mygdx.game.components.ProjectileComponent; import com.mygdx.game.components.SpriteComponent; @@ -33,6 +34,7 @@ import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.ds.buttons.RectangleButton; import com.mygdx.game.systems.HeroSystem; +import com.mygdx.game.systems.MonsterMovementSystem; import com.mygdx.game.systems.ProjectileMovementSystem; import com.mygdx.game.systems.WaveSystem; import com.mygdx.game.types.HeroType; @@ -80,10 +82,12 @@ public class PlayState extends State{ HeroSystem heroSystem = new HeroSystem(engine); ProjectileMovementSystem projectileMovementSystem = new ProjectileMovementSystem(engine); WaveSystem waveSystem = new WaveSystem(engine); + MonsterMovementSystem monsterMovementSystem = new MonsterMovementSystem(engine); engine.addSystem(heroSystem); engine.addSystem(projectileMovementSystem); engine.addSystem(waveSystem); + engine.addSystem(monsterMovementSystem); /*Entity spiderman = HeroFactory.createHero(HeroType.SPIDERMAN, new Vector2(50, 50)); Entity captain = HeroFactory.createHero(HeroType.CAPTAIN_AMERICA, new Vector2(50, 50)); @@ -140,19 +144,28 @@ public class PlayState extends State{ public void renderHeroes(SpriteBatch batch) { for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class, AttackComponent.class).get())) { - Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); + Texture texture = e.getComponent(SpriteComponent.class).getSprite(); Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); + batch.draw(texture, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); } } public void renderProjectiles(SpriteBatch batch) { for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { - Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); + Texture texture = e.getComponent(SpriteComponent.class).getSprite(); Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); + batch.draw(texture, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); + } + } + + public void renderMonsters(SpriteBatch batch) { + for (Entity e : engine.getEntitiesFor(Family.all(MonsterComponent.class, PositionComponent.class).get())) { + Texture texture = e.getComponent(SpriteComponent.class).getSprite(); + Vector2 position = e.getComponent(PositionComponent.class).getPosition(); + + batch.draw(texture, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); } } @@ -166,6 +179,7 @@ public class PlayState extends State{ board.render(batch); renderHeroes(batch); renderProjectiles(batch); + renderMonsters(batch); batch.draw(menuButton.getImg(), menuButton.getPosition().x - menuButton.getWidth() / 2f, menuButton.getPosition().y, menuButton.getWidth(), menuButton.getHeight()); batch.end(); diff --git a/core/src/com/mygdx/game/systems/WaveSystem.java b/core/src/com/mygdx/game/systems/WaveSystem.java index d90174d..b525e64 100644 --- a/core/src/com/mygdx/game/systems/WaveSystem.java +++ b/core/src/com/mygdx/game/systems/WaveSystem.java @@ -5,12 +5,16 @@ import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; import com.badlogic.ashley.systems.IteratingSystem; -import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.math.Vector2; import com.mygdx.game.components.WaveComponent; import com.mygdx.game.entities.MonsterFactory; +import com.mygdx.game.types.MonsterType; + +import java.util.Random; public class WaveSystem extends IteratingSystem { private ComponentMapper<WaveComponent> waveMapper; + private MonsterType[] monsterTypes; private Engine engine; public WaveSystem(Engine engine) { @@ -18,6 +22,7 @@ public class WaveSystem extends IteratingSystem { waveMapper = ComponentMapper.getFor(WaveComponent.class); this.engine = engine; initializeWaveSystem(); + monsterTypes = MonsterType.values(); System.out.println("Wave 1 is starting in 5 seconds"); } @@ -39,16 +44,33 @@ public class WaveSystem extends IteratingSystem { //Activate the current wave if (wave.getWaveTimeElapsed() >= 5f && !wave.isActive()) { wave.setActive(true); - //System.out.println("Beginning wave " + wave.getWaveNumber()); + System.out.println("Beginning wave " + wave.getWaveNumber()); + spawnMonster(wave); } //Begin a new wave after the given time - if (wave.getWaveTimeElapsed() >= 10f) { + if (wave.getWaveTimeElapsed() >= 100f) { //System.out.println("Ending wave " + wave.getWaveNumber()); - wave.setActive(false); + //wave.setActive(false); wave.setWaveNumber(wave.getWaveNumber() + 1); wave.setWaveTimeElapsed(0f); wave.setNumberOfMonsters(wave.getWaveNumber() + 2); } + + //Spawn monsters every 25 seconds + if (wave.getTimeSinceLastSpawn() >= 25f && wave.isActive()) { + spawnMonster(wave); + } + } + + private MonsterType getRandomType() { + Random rand = new Random(); + return monsterTypes[rand.nextInt(monsterTypes.length)]; + } + + private void spawnMonster(WaveComponent wave) { + wave.setTimeSinceLastSpawn(0f); + Entity monster = MonsterFactory.createMonster(getRandomType(), new Vector2(1000f, 300f)); + engine.addEntity(monster); } } -- GitLab From 97ddab3e54a34dca0b32b4d858176e945fd40cef Mon Sep 17 00:00:00 2001 From: Marcus Stephan Nordal <marcusn1301@gmail.com> Date: Sat, 22 Apr 2023 17:59:54 +0200 Subject: [PATCH 21/23] collision system --- core/src/com/mygdx/game/entities/HeroFactory.java | 10 +++++----- .../src/com/mygdx/game/entities/MonsterFactory.java | 13 ++++++++----- .../com/mygdx/game/entities/ProjectileFactory.java | 2 +- core/src/com/mygdx/game/states/PlayState.java | 3 +++ .../src/com/mygdx/game/systems/CollisionSystem.java | 13 +++++++------ core/src/com/mygdx/game/systems/HeroSystem.java | 2 +- .../mygdx/game/systems/MonsterMovementSystem.java | 5 +++++ .../game/systems/ProjectileMovementSystem.java | 2 ++ core/src/com/mygdx/game/systems/WaveSystem.java | 10 +++++++--- 9 files changed, 39 insertions(+), 21 deletions(-) diff --git a/core/src/com/mygdx/game/entities/HeroFactory.java b/core/src/com/mygdx/game/entities/HeroFactory.java index e370840..60544d9 100644 --- a/core/src/com/mygdx/game/entities/HeroFactory.java +++ b/core/src/com/mygdx/game/entities/HeroFactory.java @@ -18,7 +18,7 @@ public class HeroFactory { Entity hero = new Entity(); hero.add(new SpriteComponent(getHeroSprite(heroType))); hero.add(new PositionComponent(boardPosition)); - hero.add(new AttackComponent(getHeroAttackDamage(heroType), getHeroAttackTimer(heroType), getHeroAttackTimeElapsed())); + hero.add(new AttackComponent(getHeroAttackTimer(heroType), getHeroAttackTimeElapsed(), getHeroAttackDamage(heroType))); hero.add(new HealthComponent(getHeroHealth())); hero.add(new HeroComponent(heroType)); return hero; @@ -112,13 +112,13 @@ public class HeroFactory { private static float getHeroAttackTimer(HeroType heroType) { switch (heroType) { case IRONMAN: - return 6f; + return 6.5f; case HULK: - return 8f; + return 9f; case SPIDERMAN: - return 5.5f; + return 6f; case THOR: - return 6.5f; + return 7.5f; case CAPTAIN_AMERICA: return 7f; default: diff --git a/core/src/com/mygdx/game/entities/MonsterFactory.java b/core/src/com/mygdx/game/entities/MonsterFactory.java index 646c258..db7c946 100644 --- a/core/src/com/mygdx/game/entities/MonsterFactory.java +++ b/core/src/com/mygdx/game/entities/MonsterFactory.java @@ -3,8 +3,10 @@ package com.mygdx.game.entities; import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.mygdx.game.components.AttackComponent; +import com.mygdx.game.components.CollisionComponent; import com.mygdx.game.components.MonsterComponent; import com.mygdx.game.components.MovementSpeedComponent; import com.mygdx.game.components.PositionComponent; @@ -18,6 +20,7 @@ public class MonsterFactory { monster.add(new SpriteComponent(getMonsterSprite(monsterType))); monster.add(new PositionComponent(boardPosition)); monster.add(new MonsterComponent(monsterType, getMonsterMovementSpeed(monsterType))); + monster.add(new CollisionComponent(new Rectangle(boardPosition.x, boardPosition.y, Gdx.graphics.getWidth()/30f, Gdx.graphics.getHeight()/30f))); return monster; } @@ -44,19 +47,19 @@ public class MonsterFactory { private static float getMonsterMovementSpeed(MonsterType monsterType) { switch (monsterType) { case MAGNETO: - return 20f; + return 16f; case JUGGERNAUT: - return 30f; + return 13f; case VENOM: - return 30f; + return 14f; case HOBGOBLIN: - return 20f; + return 12f; case GOBLIN_GLIDER: return 10f; case MYSTIQUE: return 15f; default: - return 30f; + return 10f; } } diff --git a/core/src/com/mygdx/game/entities/ProjectileFactory.java b/core/src/com/mygdx/game/entities/ProjectileFactory.java index c38918f..f1e2c70 100644 --- a/core/src/com/mygdx/game/entities/ProjectileFactory.java +++ b/core/src/com/mygdx/game/entities/ProjectileFactory.java @@ -18,7 +18,7 @@ public class ProjectileFactory { Entity projectile = new Entity(); projectile.add(new ProjectileComponent(true, getProjectileSpeed(heroType), sourceEntity)); projectile.add(new SpriteComponent(getProjectileSprite(heroType))); - projectile.add(new CollisionComponent(new Rectangle(startingPosition.x, startingPosition.y, 10f, 10f))); + projectile.add(new CollisionComponent(new Rectangle(startingPosition.x, startingPosition.y, Gdx.graphics.getWidth()/30f, Gdx.graphics.getHeight()/30f))); projectile.add(new PositionComponent(startingPosition)); return projectile; } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index ce61a99..a6020a5 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -33,6 +33,7 @@ import com.mygdx.game.components.SpriteComponent; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.ds.buttons.RectangleButton; +import com.mygdx.game.systems.CollisionSystem; import com.mygdx.game.systems.HeroSystem; import com.mygdx.game.systems.MonsterMovementSystem; import com.mygdx.game.systems.ProjectileMovementSystem; @@ -83,11 +84,13 @@ public class PlayState extends State{ ProjectileMovementSystem projectileMovementSystem = new ProjectileMovementSystem(engine); WaveSystem waveSystem = new WaveSystem(engine); MonsterMovementSystem monsterMovementSystem = new MonsterMovementSystem(engine); + CollisionSystem collisionSystem = new CollisionSystem(engine); engine.addSystem(heroSystem); engine.addSystem(projectileMovementSystem); engine.addSystem(waveSystem); engine.addSystem(monsterMovementSystem); + engine.addSystem(collisionSystem); /*Entity spiderman = HeroFactory.createHero(HeroType.SPIDERMAN, new Vector2(50, 50)); Entity captain = HeroFactory.createHero(HeroType.CAPTAIN_AMERICA, new Vector2(50, 50)); diff --git a/core/src/com/mygdx/game/systems/CollisionSystem.java b/core/src/com/mygdx/game/systems/CollisionSystem.java index 7e00ca3..496a978 100644 --- a/core/src/com/mygdx/game/systems/CollisionSystem.java +++ b/core/src/com/mygdx/game/systems/CollisionSystem.java @@ -25,7 +25,6 @@ public class CollisionSystem extends IteratingSystem { public CollisionSystem(Engine engine) { super(Family.all(PositionComponent.class, CollisionComponent.class).get()); - healthMapper = ComponentMapper.getFor(HealthComponent.class); positionMapper = ComponentMapper.getFor(PositionComponent.class); collisionMapper = ComponentMapper.getFor(CollisionComponent.class); monsterMapper = ComponentMapper.getFor(MonsterComponent.class); @@ -42,11 +41,13 @@ public class CollisionSystem extends IteratingSystem { //Check if projectile has collided with a monster // Check if the entity is a projectile if (projectileMapper.has(entity)) { - monsters = engine.getEntitiesFor(Family.all(MonsterComponent.class).get()); - - if (monsters.size() > 0) { - for (Entity monster : monsters) { - //TODO + monsters = engine.getEntitiesFor(Family.all(MonsterComponent.class, CollisionComponent.class).get()); + for (Entity monster : engine.getEntitiesFor(Family.all(MonsterComponent.class, CollisionComponent.class).get())) { + CollisionComponent monsterCollision = collisionMapper.get(monster); + if (collision.getHitbox().overlaps(monsterCollision.getHitbox())) { + engine.removeEntity(entity); + engine.removeEntity(monster); + break; } } } diff --git a/core/src/com/mygdx/game/systems/HeroSystem.java b/core/src/com/mygdx/game/systems/HeroSystem.java index 4600df1..cc64d2b 100644 --- a/core/src/com/mygdx/game/systems/HeroSystem.java +++ b/core/src/com/mygdx/game/systems/HeroSystem.java @@ -56,6 +56,6 @@ public class HeroSystem extends IteratingSystem { } //Increase the time elapsed field in the attack component on every update - attack.setAttackTimeElapsed(attack.getAttackTimeElapsed() + deltaTime * 5); + attack.setAttackTimeElapsed(attack.getAttackTimeElapsed() + deltaTime); } } \ No newline at end of file diff --git a/core/src/com/mygdx/game/systems/MonsterMovementSystem.java b/core/src/com/mygdx/game/systems/MonsterMovementSystem.java index b454734..a6c0854 100644 --- a/core/src/com/mygdx/game/systems/MonsterMovementSystem.java +++ b/core/src/com/mygdx/game/systems/MonsterMovementSystem.java @@ -6,18 +6,21 @@ import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; import com.badlogic.ashley.systems.IteratingSystem; import com.badlogic.gdx.Gdx; +import com.mygdx.game.components.CollisionComponent; import com.mygdx.game.components.MonsterComponent; import com.mygdx.game.components.PositionComponent; public class MonsterMovementSystem extends IteratingSystem { private ComponentMapper<MonsterComponent> monsterMapper; private ComponentMapper<PositionComponent> positionMapper; + private ComponentMapper<CollisionComponent> collisionMapper; private Engine engine; public MonsterMovementSystem(Engine engine) { super(Family.all(MonsterComponent.class, PositionComponent.class).get()); monsterMapper = ComponentMapper.getFor(MonsterComponent.class); positionMapper = ComponentMapper.getFor(PositionComponent.class); + collisionMapper = ComponentMapper.getFor(CollisionComponent.class); this.engine = engine; } @@ -26,9 +29,11 @@ public class MonsterMovementSystem extends IteratingSystem { protected void processEntity(Entity entity, float deltaTime) { MonsterComponent monster = monsterMapper.get(entity); PositionComponent monsterPos = positionMapper.get(entity); + CollisionComponent collision = collisionMapper.get(entity); //Make the monster move to the left monsterPos.setPosition(monsterPos.getPosition().add(monster.getMovementSpeed() * -1, 0)); + collision.setHitbox(collision.getHitbox().setPosition(monsterPos.getPosition())); //Remove monsters that are out of bounds if (monsterPos.getPosition().x <= 0 + Gdx.graphics.getWidth() / 8) { diff --git a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java index 5a4f779..17b044b 100644 --- a/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java +++ b/core/src/com/mygdx/game/systems/ProjectileMovementSystem.java @@ -40,7 +40,9 @@ public class ProjectileMovementSystem extends IteratingSystem { } //Increment the horizontal position of the projectile based on its velocity + //and update hitbox position float speed = projectileComponent.getVelocity(); positionComponent.setPosition(positionComponent.getPosition().add(speed, 0)); + collisionComponent.setHitbox(collisionComponent.getHitbox().setPosition(positionComponent.getPosition())); } } diff --git a/core/src/com/mygdx/game/systems/WaveSystem.java b/core/src/com/mygdx/game/systems/WaveSystem.java index b525e64..56c59c4 100644 --- a/core/src/com/mygdx/game/systems/WaveSystem.java +++ b/core/src/com/mygdx/game/systems/WaveSystem.java @@ -40,12 +40,14 @@ public class WaveSystem extends IteratingSystem { //Wave duration is incremented wave.setWaveTimeElapsed(wave.getWaveTimeElapsed() + deltaTime); + wave.setTimeSinceLastSpawn(wave.getTimeSinceLastSpawn() + deltaTime); //Activate the current wave if (wave.getWaveTimeElapsed() >= 5f && !wave.isActive()) { wave.setActive(true); System.out.println("Beginning wave " + wave.getWaveNumber()); spawnMonster(wave); + wave.setTimeSinceLastSpawn(0f); } //Begin a new wave after the given time @@ -57,9 +59,10 @@ public class WaveSystem extends IteratingSystem { wave.setNumberOfMonsters(wave.getWaveNumber() + 2); } - //Spawn monsters every 25 seconds - if (wave.getTimeSinceLastSpawn() >= 25f && wave.isActive()) { + //Spawn monsters every 10 seconds + if (wave.getTimeSinceLastSpawn() >= 5f && wave.isActive()) { spawnMonster(wave); + wave.setTimeSinceLastSpawn(0f); } } @@ -70,7 +73,8 @@ public class WaveSystem extends IteratingSystem { private void spawnMonster(WaveComponent wave) { wave.setTimeSinceLastSpawn(0f); - Entity monster = MonsterFactory.createMonster(getRandomType(), new Vector2(1000f, 300f)); + //TODO monster should not be placed inside a cell + Entity monster = MonsterFactory.createMonster(getRandomType(), new Vector2(1500f, 350f)); engine.addEntity(monster); } } -- GitLab From da63d92192612cafdb10dd6e7788f96196a4e103 Mon Sep 17 00:00:00 2001 From: Anh <qapham@stud.ntnu.no> Date: Sat, 22 Apr 2023 19:01:23 +0200 Subject: [PATCH 22/23] Add 8 bit trophy images --- assets/Trophy_2.png | Bin 0 -> 4611 bytes assets/Trophy_3.png | Bin 0 -> 4622 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/Trophy_2.png create mode 100644 assets/Trophy_3.png diff --git a/assets/Trophy_2.png b/assets/Trophy_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d49a7efac7199c63e171fad8b85635ae346a3298 GIT binary patch literal 4611 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 FKLJ*g;P(Ik literal 0 HcmV?d00001 diff --git a/assets/Trophy_3.png b/assets/Trophy_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8db961327c59c4185c21e0f62626c8ec18c49a GIT binary patch literal 4622 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 literal 0 HcmV?d00001 -- GitLab From 9633eb9d7b6183da4724a04a864a1fe2f4c87e5e Mon Sep 17 00:00:00 2001 From: Anh <qapham@stud.ntnu.no> Date: Sat, 22 Apr 2023 19:19:24 +0200 Subject: [PATCH 23/23] Fix bugs --- core/src/com/mygdx/game/ds/Board.java | 12 +++- core/src/com/mygdx/game/states/PlayState.java | 70 +++++++++---------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/core/src/com/mygdx/game/ds/Board.java b/core/src/com/mygdx/game/ds/Board.java index 733fd13..0d3bd84 100644 --- a/core/src/com/mygdx/game/ds/Board.java +++ b/core/src/com/mygdx/game/ds/Board.java @@ -41,7 +41,7 @@ public class Board extends Actor { private final int[][] cells; private Texture[][] textures; private final ShapeRenderer shapeRenderer; - private final int textureWidth; + private final int textureHeight; private int cellWidth; private int cellHeight; @@ -129,6 +129,16 @@ public class Board extends Actor { return cols; } + public int getTextureWidth() { + return textureWidth; + } + + private final int textureWidth; + + public int getTextureHeight() { + return textureHeight; + } + public Texture[][] getTextures() { return textures; } diff --git a/core/src/com/mygdx/game/states/PlayState.java b/core/src/com/mygdx/game/states/PlayState.java index dd564ff..abf3534 100644 --- a/core/src/com/mygdx/game/states/PlayState.java +++ b/core/src/com/mygdx/game/states/PlayState.java @@ -1,47 +1,53 @@ package com.mygdx.game.states; +import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.Family; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.utils.viewport.ScreenViewport; -import com.mygdx.game.ds.Board; import com.mygdx.game.MoneySystem; import com.mygdx.game.SoundManager; import com.mygdx.game.components.AttackComponent; import com.mygdx.game.components.HeroComponent; -import com.mygdx.game.components.MonsterComponent; import com.mygdx.game.components.PositionComponent; import com.mygdx.game.components.ProjectileComponent; import com.mygdx.game.components.SpriteComponent; +import com.mygdx.game.ds.Board; import com.mygdx.game.entities.DisplayHero; import com.mygdx.game.entities.HeroFactory; import com.mygdx.game.ds.buttons.RectangleButton; -import com.mygdx.game.systems.CollisionSystem; import com.mygdx.game.systems.HeroSystem; -import com.mygdx.game.systems.MonsterMovementSystem; import com.mygdx.game.systems.ProjectileMovementSystem; -import com.mygdx.game.systems.WaveSystem; import com.mygdx.game.types.HeroType; import com.mygdx.game.utils.Enums; -public class PlayState extends State { +import java.util.ArrayList; +import java.util.List; + +public class PlayState extends State{ private SpriteBatch batch; private BitmapFont font; private Stage stage; private ShapeRenderer shapeRenderer; - private final MoneySystem moneySystem; - private final boolean isPlacementAllowed = false; - private final SoundManager soundManager = SoundManager.getInstance(); - + private SoundManager soundManager = SoundManager.getInstance(); + private MoneySystem moneySystem; + private boolean isPlacementAllowed = false; private static Engine engine; private Board board; private TextButton counterText1; @@ -49,15 +55,20 @@ public class PlayState extends State { private final GameStateManager gsm; public PlayState() { + //super(gsm); menuButton = new RectangleButton(0.5f, Gdx.graphics.getWidth() - 137, Gdx.graphics.getHeight() - 100, "Lobby-button.png"); gsm = GameStateManager.getGsm(); - batch = new SpriteBatch(); - moneySystem = new MoneySystem(4000); - soundManager.playSequence(); + initialize(); + } + private void initialize() { initializeGameEngine(); + batch = new SpriteBatch(); + moneySystem = new MoneySystem(4000); initFontStageAndRenderer(); createBoard(); + soundManager.playSequence(); + //Game engine & systems } private void initializeGameEngine() { @@ -67,15 +78,9 @@ public class PlayState extends State { //Systems for game logic HeroSystem heroSystem = new HeroSystem(engine); ProjectileMovementSystem projectileMovementSystem = new ProjectileMovementSystem(engine); - WaveSystem waveSystem = new WaveSystem(engine); - MonsterMovementSystem monsterMovementSystem = new MonsterMovementSystem(engine); - CollisionSystem collisionSystem = new CollisionSystem(engine); engine.addSystem(heroSystem); engine.addSystem(projectileMovementSystem); - engine.addSystem(waveSystem); - engine.addSystem(monsterMovementSystem); - engine.addSystem(collisionSystem); /*Entity spiderman = HeroFactory.createHero(HeroType.SPIDERMAN, new Vector2(50, 50)); Entity captain = HeroFactory.createHero(HeroType.CAPTAIN_AMERICA, new Vector2(50, 50)); @@ -97,12 +102,12 @@ public class PlayState extends State { @Override public void update(float dt) { + stage.draw(); engine.update(dt); - handleInput(); } public void calculateMoney() { - float iconSize = Gdx.graphics.getWidth() / 30f; + float iconSize = Gdx.graphics.getWidth() / 30; BitmapFont counterFont = new BitmapFont(); counterFont.getData().setScale(4); // First counter @@ -112,7 +117,7 @@ public class PlayState extends State { counterText1.setHeight(iconSize / 2); board.getRightTable().add(counterText1); - Texture counterIconTexture1 = new Texture("coin.png"); + Texture counterIconTexture1 = new Texture("coin2.png"); Image counterIcon1 = new Image(counterIconTexture1); board.getRightTable().add(counterIcon1).size(iconSize, iconSize).pad(5); board.getRightTable().row(); @@ -124,7 +129,7 @@ public class PlayState extends State { counterText2.setHeight(iconSize / 2); board.getRightTable().add(counterText2); - Texture counterIconTexture2 = new Texture("coin.png"); + Texture counterIconTexture2 = new Texture("coin2.png"); Image counterIcon2 = new Image(counterIconTexture2); board.getRightTable().add(counterIcon2).size(iconSize, iconSize).pad(5); board.getRightTable().row(); @@ -132,28 +137,19 @@ public class PlayState extends State { public void renderHeroes(SpriteBatch batch) { for (Entity e : engine.getEntitiesFor(Family.all(HeroComponent.class, AttackComponent.class).get())) { - Texture texture = e.getComponent(SpriteComponent.class).getSprite(); + Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - batch.draw(texture, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); + batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); } } public void renderProjectiles(SpriteBatch batch) { for (Entity e : engine.getEntitiesFor(Family.all(ProjectileComponent.class, PositionComponent.class).get())) { - Texture texture = e.getComponent(SpriteComponent.class).getSprite(); + Texture sprite = e.getComponent(SpriteComponent.class).getSprite(); Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - batch.draw(texture, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); - } - } - - public void renderMonsters(SpriteBatch batch) { - for (Entity e : engine.getEntitiesFor(Family.all(MonsterComponent.class, PositionComponent.class).get())) { - Texture texture = e.getComponent(SpriteComponent.class).getSprite(); - Vector2 position = e.getComponent(PositionComponent.class).getPosition(); - - batch.draw(texture, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); + batch.draw(sprite, position.x, position.y, (float) board.getTextureWidth(), (float) board.getTextureHeight()); } } @@ -167,10 +163,10 @@ public class PlayState extends State { board.render(batch); renderHeroes(batch); renderProjectiles(batch); - renderMonsters(batch); batch.draw(menuButton.getImg(), menuButton.getPosition().x - menuButton.getWidth() / 2f, menuButton.getPosition().y, menuButton.getWidth(), menuButton.getHeight()); batch.end(); + stage.act(Gdx.graphics.getDeltaTime()); stage.draw(); } -- GitLab