diff --git a/android/assets/sprites/controls/arrowDown.png b/android/assets/sprites/controls/arrowDown.png new file mode 100644 index 0000000..dd8f141 Binary files /dev/null and b/android/assets/sprites/controls/arrowDown.png differ diff --git a/android/assets/sprites/controls/arrowLeft.png b/android/assets/sprites/controls/arrowLeft.png new file mode 100644 index 0000000..d8f1cda Binary files /dev/null and b/android/assets/sprites/controls/arrowLeft.png differ diff --git a/android/assets/sprites/controls/arrowRight.png b/android/assets/sprites/controls/arrowRight.png new file mode 100644 index 0000000..9124740 Binary files /dev/null and b/android/assets/sprites/controls/arrowRight.png differ diff --git a/android/assets/sprites/controls/arrowUp.png b/android/assets/sprites/controls/arrowUp.png new file mode 100644 index 0000000..ad07f96 Binary files /dev/null and b/android/assets/sprites/controls/arrowUp.png differ diff --git a/android/assets/sprites/controls/drop.png b/android/assets/sprites/controls/drop.png new file mode 100644 index 0000000..0ea1f04 Binary files /dev/null and b/android/assets/sprites/controls/drop.png differ diff --git a/android/assets/sprites/controls/equip1.png b/android/assets/sprites/controls/equip1.png new file mode 100644 index 0000000..defcb13 Binary files /dev/null and b/android/assets/sprites/controls/equip1.png differ diff --git a/android/assets/sprites/controls/equip2.png b/android/assets/sprites/controls/equip2.png new file mode 100644 index 0000000..f02b1f5 Binary files /dev/null and b/android/assets/sprites/controls/equip2.png differ diff --git a/android/assets/sprites/controls/inventorySlot.png b/android/assets/sprites/controls/inventorySlot.png new file mode 100644 index 0000000..04ac936 Binary files /dev/null and b/android/assets/sprites/controls/inventorySlot.png differ diff --git a/android/assets/sprites/controls/pickUp.png b/android/assets/sprites/controls/pickUp.png new file mode 100644 index 0000000..e4f55ca Binary files /dev/null and b/android/assets/sprites/controls/pickUp.png differ diff --git a/android/assets/sprites/controls/use.png b/android/assets/sprites/controls/use.png new file mode 100644 index 0000000..e2c4689 Binary files /dev/null and b/android/assets/sprites/controls/use.png differ diff --git a/android/assets/sprites/hud.png b/android/assets/sprites/hud.png index b2e39ff..4042b33 100644 Binary files a/android/assets/sprites/hud.png and b/android/assets/sprites/hud.png differ diff --git a/android/assets/sprites/miniMapContainer.png b/android/assets/sprites/miniMapContainer.png new file mode 100644 index 0000000..386d531 Binary files /dev/null and b/android/assets/sprites/miniMapContainer.png differ diff --git a/android/assets/sprites/textbox.png b/android/assets/sprites/textbox.png new file mode 100644 index 0000000..908efe6 Binary files /dev/null and b/android/assets/sprites/textbox.png differ diff --git a/android/release/android-release.apk b/android/release/android-release.apk deleted file mode 100644 index c4c2e9b..0000000 Binary files a/android/release/android-release.apk and /dev/null differ diff --git a/android/release/output.json b/android/release/output.json deleted file mode 100644 index 76182a3..0000000 --- a/android/release/output.json +++ /dev/null @@ -1 +0,0 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"android-release.apk","fullName":"release","baseName":"release"},"path":"android-release.apk","properties":{}}] \ No newline at end of file diff --git a/build.gradle b/build.gradle index 338c25e..639a925 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.4.1' + classpath 'com.android.tools.build:gradle:4.0.0' } diff --git a/core/assets/sprites/controls/arrowDown.png b/core/assets/sprites/controls/arrowDown.png new file mode 100644 index 0000000..dd8f141 Binary files /dev/null and b/core/assets/sprites/controls/arrowDown.png differ diff --git a/core/assets/sprites/controls/arrowLeft.png b/core/assets/sprites/controls/arrowLeft.png new file mode 100644 index 0000000..d8f1cda Binary files /dev/null and b/core/assets/sprites/controls/arrowLeft.png differ diff --git a/core/assets/sprites/controls/arrowRight.png b/core/assets/sprites/controls/arrowRight.png new file mode 100644 index 0000000..9124740 Binary files /dev/null and b/core/assets/sprites/controls/arrowRight.png differ diff --git a/core/assets/sprites/controls/arrowUp.png b/core/assets/sprites/controls/arrowUp.png new file mode 100644 index 0000000..ad07f96 Binary files /dev/null and b/core/assets/sprites/controls/arrowUp.png differ diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 0c2b6d8..ce42802 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -11,12 +11,15 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.maps.MapLayers; import com.badlogic.gdx.maps.MapObjects; import com.badlogic.gdx.maps.objects.RectangleMapObject; import com.badlogic.gdx.math.Intersector; import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.viewport.StretchViewport; +import com.badlogic.gdx.utils.viewport.Viewport; import com.dungeoncrawler.view.*; import com.dungeoncrawler.model.Dungeon; import com.dungeoncrawler.model.DungeonGenerator; @@ -24,11 +27,19 @@ import com.dungeoncrawler.model.entities.*; import com.dungeoncrawler.model.Entity; import com.badlogic.gdx.utils.Timer; import com.dungeoncrawler.model.ItemContainer; + import java.util.ArrayList; public class Controller extends ApplicationAdapter implements InputProcessor{ - + float GAME_WORLD_WIDTH; + float GAME_WORLD_HEIGHT; + + // CAMERA + OrthographicCamera camera; + Viewport viewport; + + SpriteBatch batch; Dungeon d; DungeonGenerator dg; @@ -75,7 +86,18 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ @Override public void create(){ - + GAME_WORLD_WIDTH = 1600; + GAME_WORLD_HEIGHT = 900; + camera = null; + viewport = null; + camera = new OrthographicCamera(); + camera.update(); + viewport = new StretchViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera); + viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + viewport.apply(); + camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0); + camera.update(); + checkDoor = true; checkDie = true; @@ -116,6 +138,9 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]); d.setCurrentEntities(d.getCurrentRoom().getEnemies()); + d.initVisited(roomAmount); + d.updateVisited(roomPosX, roomPosY); + Gdx.input.setInputProcessor(this); @@ -276,7 +301,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(delete || d.getCurrentEntities()[i].isToDelete()){ if(d.getCurrentEntities()[i].getType()== 2){ + d.getPlayer().addExp(d.getCurrentEntities()[i].getExp()); + System.out.println(d.getCurrentEntities()[i].getExp()); d.getCurrentEntities()[i] = null; + gs.deleteEntitySprite(i); } else{ @@ -302,19 +330,35 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } - + @Override + public void resize(int width, int height){ + viewport.update(width, height); + camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0); + } + + @Override public void render(){ Gdx.gl.glClearColor(0, 0, 0, 1); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - if(end == true){ + if(end){ if(es == null){ isPaused = true; entityMovement.stop(); gs.end(); - gs.getCamera().update(); - batch.setProjectionMatrix(gs.getCamera().combined); + GAME_WORLD_WIDTH = 1600; + GAME_WORLD_HEIGHT = 900; + camera = null; + viewport = null; + camera = new OrthographicCamera(); + camera.update(); + viewport = new StretchViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera); + viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + viewport.apply(); + camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0); + camera.update(); + batch.setProjectionMatrix(camera.combined); gs = null; hc = null; es = new EndScreen(kills); @@ -332,7 +376,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ cs.render(batch); } if(ps != null){ - ps.render(batch, volume, gs.getCamera()); + ps.render(batch, volume, camera); } //PASSIERT IN GAMESCREEN @@ -357,8 +401,9 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ // Render methode zum rendern der einzelnen Sprites wird aufgerufen if(gs != null){; d.getPlayer().updateItems(); - gs.render(batch, d.getPlayer(), d.getCurrentEntities(), tileX, tileY, level, roomPosX, roomPosY); hc.updateHud(batch, d.getPlayer()); + d.getPlayer().updateStats(level + 1); + gs.render(batch, d.getPlayer(), d.getCurrentEntities(), tileX, tileY, level, roomPosX, roomPosY, camera, d.getVisited()); } } @@ -527,16 +572,22 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ int roomAmount = d.getLevel()[level].getRooms().length; roomPosX = roomAmount / 2; roomPosY = roomAmount / 2; + + d.initVisited(roomAmount); + d.updateVisited(roomPosX, roomPosY); } else{ // Dungeon Exit end = true; return; } } + + d.updateVisited(roomPosX, roomPosY); d.setCurrentLevel(d.getLevel()[level]); d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]); d.setCurrentEntities(d.getCurrentRoom().getEnemies()); + gs.generateEntitySprites(d.getCurrentEntities()); @@ -602,6 +653,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ e[i].setHp(0); gs.createDmgFont((int) p.getDmg(),(int)e[i].getxPos() + 10,(int) e[i].getyPos() + 20); e[i].setToDelete(true); + p.addExp(e[i].getExp()); kills++; } else{ @@ -709,7 +761,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().useItem(d.getPlayer().getInv().getSelected()); } } - + /* if(keycode == Input.Keys.ESCAPE && !end){ if(gs != null && gs.getIsLoading() == false && isPaused == false){ stop(); @@ -718,7 +770,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ resume(); } } - + */ if(keycode == Input.Keys.LEFT){ if(mm != null){} if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){ @@ -754,7 +806,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(mm != null){} if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){ Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() + 1, (int) d.getPlayer().getyPos()); - + for(int k = 5; k < d.getCurrentEntities().length; k++){ if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){ d.getCurrentEntities()[k] = lol; @@ -901,13 +953,25 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { - //if(button == Input.Buttons.LEFT){ + if(gs == null){ switch(click(screenX, screenY)){ case -1: // -1: nothing hit -- 0: go ingame -- 1: EXIT game -- 2: goto settings -- 3: goto controls -- 4: goto MainMenuScreen -- 9: volume down -- 10: volume up -- 11: restart game break; case 0: mm.cleanUp(); mm = null; + GAME_WORLD_WIDTH = 700; + GAME_WORLD_HEIGHT = 394; + camera = null; + viewport = null; + camera = new OrthographicCamera(); + camera.update(); + viewport = new StretchViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera); + viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + viewport.apply(); + camera.position.set(GAME_WORLD_WIDTH / 2 - 170, GAME_WORLD_HEIGHT / 2 + 20, 0); + camera.update(); + batch.setProjectionMatrix(camera.combined); gs = new GameScreen(d, volume); gs.generateEntitySprites(d.getCurrentEntities()); hc = new HudContainer(); @@ -917,12 +981,36 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ case 1: mm.cleanUp(); mm = null; + GAME_WORLD_WIDTH = 700; + GAME_WORLD_HEIGHT = 394; + camera = null; + viewport = null; + camera = new OrthographicCamera(); + camera.update(); + viewport = new StretchViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera); + viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + viewport.apply(); + camera.position.set(GAME_WORLD_WIDTH / 2 - 170, GAME_WORLD_HEIGHT / 2 + 20, 0); + camera.update(); + batch.setProjectionMatrix(camera.combined); gs = new GameScreen(d, volume); break; case 2: mm.hide(); cs = null; + GAME_WORLD_WIDTH = 1600; + GAME_WORLD_HEIGHT = 900; + camera = null; + viewport = null; + camera = new OrthographicCamera(); + camera.update(); + viewport = new StretchViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera); + viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + viewport.apply(); + camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0); + camera.update(); + batch.setProjectionMatrix(camera.combined); ss = new SettingsScreen(); break; @@ -974,34 +1062,174 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } break; case 11: + create(); break; - } - if(gs == null){ - mm.cleanUp(); - mm = null; - gs = new GameScreen(d, volume); - gs.generateEntitySprites(d.getCurrentEntities()); - hc = new HudContainer(); - gs.startLoadingScreen(); } - else if(gs != null && gs.getIsLoading() == false) { - if (screenX < 0.25 * Gdx.graphics.getWidth()) { - d.getPlayer().setMovementX(-d.getPlayer().getMovementSpeed()); - } - else if (screenX > 0.75 * Gdx.graphics.getWidth()) { - d.getPlayer().setMovementX(d.getPlayer().getMovementSpeed()); - } - if (screenX > 0.25 * Gdx.graphics.getWidth() && screenX < 0.75 * Gdx.graphics.getWidth() && screenY > 0.5 * Gdx.graphics.getHeight()) { - d.getPlayer().setMovementY(d.getPlayer().getMovementSpeed()); - } - else if(screenX > 0.25 * Gdx.graphics.getWidth() && screenX < 0.75 * Gdx.graphics.getWidth() && screenY < 0.5 * Gdx.graphics.getHeight()){ - d.getPlayer().setMovementY(-d.getPlayer().getMovementSpeed()); - } - } + } - //} + if(gs != null){ + if(!d.getPlayer().isToDelete()) { + ArrayList clicked = gs.click(screenX,screenY); + for (Integer i : clicked) { + switch (i) { // -1: nix, 0: left, 1: up, 2: right, 3: down, 4: attackLeft, 5: attackUp, 6: attackRight, 7: attackDown, 8: pickUp + case 0: + d.getPlayer().setMovementX(-d.getPlayer().getMovementSpeed()); + break; + case 1: + d.getPlayer().setMovementY(d.getPlayer().getMovementSpeed()); + break; + case 2: + d.getPlayer().setMovementX(d.getPlayer().getMovementSpeed()); + break; + case 3: + d.getPlayer().setMovementY(-d.getPlayer().getMovementSpeed()); + break; + case 4: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() - 1, (int) d.getPlayer().getyPos()); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + + case 5: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() + 1); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + case 6: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() + 1, (int) d.getPlayer().getyPos()); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + case 7: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() - 1); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + case 8: + // pickUp + if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){ + if(!d.getPlayer().inventoryFull()){ + ArrayList garbage = playerPickUp(); + + for(ItemContainer item : garbage){ + d.getPlayer().getInv().addItem(item.getItem()); + } + } + } + break; + case 9: + // equip1 + if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){ + d.getPlayer().getInv().equipSlot(0); + d.getPlayer().updateItems(); + } + break; + case 10: + // drop + if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){ + if(d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected()) != null){ + d.getCurrentRoom().spawnItem((int)d.getPlayer().getxPos(), (int)d.getPlayer().getyPos(), d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected())); + gs.getM().getMaps()[level][roomPosX][roomPosY].addItem(48, 48,(int)d.getPlayer().getxPos(), (int)d.getPlayer().getyPos(), d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected())); + d.getPlayer().getInv().dropItem(); + d.getPlayer().updateItems(); + } + } + break; + case 11: + // equip2 + if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){ + d.getPlayer().getInv().equipSlot(1); + d.getPlayer().updateItems(); + } + break; + case 12: + // use + if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){ + d.getPlayer().useItem(d.getPlayer().getInv().getSelected()); + } + break; + case 20: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(0); + } + break; + case 21: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(1); + } + break; + case 22: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(2); + } + break; + case 23: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(3); + } + break; + case 24: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(4); + } + break; + case 25: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(5); + } + break; + case 26: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(6); + } + break; + case 27: + if(!d.getPlayer().isToDelete()){ + d.getPlayer().getInv().setSelected(7); + } + break; + } + } + } + } return true; } @@ -1012,7 +1240,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(ps != null){ return ps.click(x,y); } - if(mm != null && mm.getHidden() == false){ + if(mm != null && !mm.getHidden()){ return mm.click(x, y); } if(ss != null){ @@ -1020,22 +1248,112 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } if(cs != null){ return cs.click(x, y); - } - if(gs != null && isPaused == true){ - } return -1; } @Override - public boolean touchUp(int i, int i1, int i2, int i3) { - return false; + public boolean touchUp(int screenX, int screenY, int i2, int i3) { + if(gs != null){ + if(gs.click(screenX,screenY).contains(0) || gs.click(screenX,screenY).contains(1)|| gs.click(screenX,screenY).contains(2)|| gs.click(screenX,screenY).contains(3)){ + d.getPlayer().setMovementX(0); + d.getPlayer().setMovementY(0); + } + } + return true; } @Override - public boolean touchDragged(int i, int i1, int i2) { - return false; + public boolean touchDragged(int screenX, int screenY, int i2) { + + if(gs != null){ + if(!d.getPlayer().isToDelete()) { + + if(!gs.click(screenX,screenY).contains(0) || !gs.click(screenX,screenY).contains(2)){ + d.getPlayer().setMovementX(0); + } + + if(!gs.click(screenX,screenY).contains(1) || !gs.click(screenX,screenY).contains(3)){ + d.getPlayer().setMovementY(0); + } + ArrayList clicked = gs.click(screenX,screenY); + for (Integer i : clicked) { + switch (i) { // -1: nix, 0: left, 1: up, 2: right, 3: down, 4: attackLeft, 5: attackUp, 6: attackRight, 7: attackDown + case 0: + d.getPlayer().setMovementX(-d.getPlayer().getMovementSpeed()); + break; + case 1: + d.getPlayer().setMovementY(d.getPlayer().getMovementSpeed()); + break; + case 2: + d.getPlayer().setMovementX(d.getPlayer().getMovementSpeed()); + break; + case 3: + d.getPlayer().setMovementY(-d.getPlayer().getMovementSpeed()); + break; + case 4: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() - 1, (int) d.getPlayer().getyPos()); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + + case 5: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() + 1); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + case 6: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() + 1, (int) d.getPlayer().getyPos()); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + case 7: + if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) { + Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() - 1); + + for (int k = 5; k < d.getCurrentEntities().length; k++) { + if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) { + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + gs.player.startSecondaryAttack(); + break; + } + } + } + break; + } + } + } + } + return true; } @Override @@ -1061,13 +1379,36 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ entityMovement.stop(); gs.stop(); cs = null; + GAME_WORLD_WIDTH = 1600; + GAME_WORLD_HEIGHT = 900; + camera = null; + viewport = null; + camera = new OrthographicCamera(); + camera.update(); + viewport = new StretchViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera); + viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + viewport.apply(); + camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0); + camera.update(); ps = new PauseScreen(); } public void resume(){ + GAME_WORLD_WIDTH = 700; + GAME_WORLD_HEIGHT = 394; + camera = null; + viewport = null; + camera = new OrthographicCamera(); + camera.update(); + viewport = new StretchViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera); + viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + viewport.apply(); + camera.position.set(GAME_WORLD_WIDTH / 2 - 170, GAME_WORLD_HEIGHT / 2 + 20, 0); + camera.update(); isPaused = false; entityMovement.start(); gs.resume(); - + + ps = null; gs.startLoadingScreen(); } diff --git a/core/src/com/dungeoncrawler/model/Dungeon.java b/core/src/com/dungeoncrawler/model/Dungeon.java index 9bf5893..ee798e8 100644 --- a/core/src/com/dungeoncrawler/model/Dungeon.java +++ b/core/src/com/dungeoncrawler/model/Dungeon.java @@ -18,6 +18,9 @@ public class Dungeon { private Level currentLevel; private Room currentRoom; private Entity[] currentEntities; + + // 0: not found, 1: found, 2: visited + private int[][] isVisited; public Dungeon(Player player){ this.level = new Level[7]; @@ -27,6 +30,10 @@ public class Dungeon { public void update(){ // TODO: Implementieren } + + public void initVisited(int amount){ + isVisited = new int[amount][amount]; + } /** * @return the level @@ -103,5 +110,53 @@ public class Dungeon { public void setCurrentEntities(Entity[] currentEntities) { this.currentEntities = currentEntities; } + + public int getVisited(int i, int j){ + return isVisited[i][j]; + } + + public int[][] getVisited(){ + return isVisited; + } + + public void setVisited(int i, int j, int value){ + isVisited[i][j] = value; + } + + public void updateVisited(int roomX, int roomY){ + + // currentRoom is visited, therefore set to 2 + isVisited[roomX][roomY] = 2; + + // all neighboring rooms are now found, set to 1, if possible + + // left + if(roomX > 0 && currentLevel.getRooms()[roomX - 1][roomY] != null){ + if(isVisited[roomX - 1][roomY] != 2) { + isVisited[roomX - 1][roomY] = 1; + } + } + + // right + if(roomX < currentLevel.getRooms().length - 1 && currentLevel.getRooms()[roomX + 1][roomY] != null){ + if(isVisited[roomX + 1][roomY] != 2) { + isVisited[roomX + 1][roomY] = 1; + } + } + + // top + if(roomY > 0 && currentLevel.getRooms()[roomX][roomY - 1] != null){ + if(isVisited[roomX][roomY - 1] != 2) { + isVisited[roomX][roomY - 1] = 1; + } + } + + // bottom + if(roomY < currentLevel.getRooms().length - 1 && currentLevel.getRooms()[roomX][roomY + 1] != null){ + if(isVisited[roomX][roomY + 1] != 2) { + isVisited[roomX][roomY + 1] = 1; + } + } + } } diff --git a/core/src/com/dungeoncrawler/model/Entity.java b/core/src/com/dungeoncrawler/model/Entity.java index 3d395f7..ee96a8e 100644 --- a/core/src/com/dungeoncrawler/model/Entity.java +++ b/core/src/com/dungeoncrawler/model/Entity.java @@ -19,6 +19,7 @@ public abstract class Entity { protected boolean targetsPlayer; protected int standartDef; protected int def; + protected int exp; @@ -33,6 +34,7 @@ public abstract class Entity { this.targetsPlayer = true; this.standartDef = 0; this.def = 0; + this.exp = 0; } public boolean attack(Entity e){ @@ -223,4 +225,14 @@ public abstract class Entity { public int getDef(){ return def; } + + public int getExp(){ + return exp; + } + public void setExp(int exp){ + this.exp = exp; + } + public void addExp(int exp){ + this.exp = this.exp + exp; + } } \ No newline at end of file diff --git a/core/src/com/dungeoncrawler/model/entities/Archer.java b/core/src/com/dungeoncrawler/model/entities/Archer.java index 000acfe..b069fab 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -19,6 +19,7 @@ public class Archer extends Entity{ this.dmg = 5*lvl; this.id = 0; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 70; maxRange = 210; attackSpeed = 70; diff --git a/core/src/com/dungeoncrawler/model/entities/Darkarcher.java b/core/src/com/dungeoncrawler/model/entities/Darkarcher.java index d003b37..7fde455 100644 --- a/core/src/com/dungeoncrawler/model/entities/Darkarcher.java +++ b/core/src/com/dungeoncrawler/model/entities/Darkarcher.java @@ -19,6 +19,7 @@ public class Darkarcher extends Entity{ this.dmg = 7*lvl; this.id = 27; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 80; maxRange = 240; attackSpeed = 100; diff --git a/core/src/com/dungeoncrawler/model/entities/Darkswordsman.java b/core/src/com/dungeoncrawler/model/entities/Darkswordsman.java index 9784a5b..0d7cdda 100644 --- a/core/src/com/dungeoncrawler/model/entities/Darkswordsman.java +++ b/core/src/com/dungeoncrawler/model/entities/Darkswordsman.java @@ -13,6 +13,7 @@ public class Darkswordsman extends Entity { this.direction = 1; this.dmg = 12*lvl; this.id = 26; + this.exp = (lvl+1) * 5; this.type = 0; // TODO: Sinnvolle Werte finden diff --git a/core/src/com/dungeoncrawler/model/entities/Darkwizard.java b/core/src/com/dungeoncrawler/model/entities/Darkwizard.java index 6ec51e4..60383ac 100644 --- a/core/src/com/dungeoncrawler/model/entities/Darkwizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Darkwizard.java @@ -28,6 +28,7 @@ public class Darkwizard extends Entity{ this.dmg = 10*lvl; this.id = 24; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 140; maxRange = 170; attackSpeed = 70; // higher = slower diff --git a/core/src/com/dungeoncrawler/model/entities/Earthwizard.java b/core/src/com/dungeoncrawler/model/entities/Earthwizard.java index 8a04216..3985cce 100644 --- a/core/src/com/dungeoncrawler/model/entities/Earthwizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Earthwizard.java @@ -28,6 +28,7 @@ public class Earthwizard extends Entity{ this.dmg = 8*lvl; this.id = 8; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 60; maxRange = 150; attackSpeed = 80; diff --git a/core/src/com/dungeoncrawler/model/entities/Firearcher.java b/core/src/com/dungeoncrawler/model/entities/Firearcher.java index bef2554..1173eb9 100644 --- a/core/src/com/dungeoncrawler/model/entities/Firearcher.java +++ b/core/src/com/dungeoncrawler/model/entities/Firearcher.java @@ -19,6 +19,7 @@ public class Firearcher extends Entity{ this.dmg = 8*lvl; this.id = 13; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 60; maxRange = 200; attackSpeed = 55; diff --git a/core/src/com/dungeoncrawler/model/entities/Fireswordsman.java b/core/src/com/dungeoncrawler/model/entities/Fireswordsman.java index 3025fe1..10261c8 100644 --- a/core/src/com/dungeoncrawler/model/entities/Fireswordsman.java +++ b/core/src/com/dungeoncrawler/model/entities/Fireswordsman.java @@ -14,6 +14,7 @@ public class Fireswordsman extends Entity { this.dmg = 15*lvl; this.id = 10; this.type = 0; + this.exp = (lvl+1) * 5; // TODO: Sinnvolle Werte finden direction = 2; diff --git a/core/src/com/dungeoncrawler/model/entities/Firewizard.java b/core/src/com/dungeoncrawler/model/entities/Firewizard.java index d6e15d2..e55cac5 100644 --- a/core/src/com/dungeoncrawler/model/entities/Firewizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Firewizard.java @@ -28,6 +28,7 @@ public class Firewizard extends Entity{ this.dmg = 9*lvl; this.id = 6; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 50; maxRange = 130; attackSpeed = 60; diff --git a/core/src/com/dungeoncrawler/model/entities/Healwizard.java b/core/src/com/dungeoncrawler/model/entities/Healwizard.java index c3354a4..18d44c4 100644 --- a/core/src/com/dungeoncrawler/model/entities/Healwizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Healwizard.java @@ -28,6 +28,7 @@ public class Healwizard extends Entity{ this.dmg = 12*lvl; this.id = 20; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 64; maxRange = 124; attackSpeed = 60; diff --git a/core/src/com/dungeoncrawler/model/entities/Icearcher.java b/core/src/com/dungeoncrawler/model/entities/Icearcher.java index facbb9c..aea4378 100644 --- a/core/src/com/dungeoncrawler/model/entities/Icearcher.java +++ b/core/src/com/dungeoncrawler/model/entities/Icearcher.java @@ -19,6 +19,7 @@ public class Icearcher extends Entity{ this.dmg = 7*lvl; this.id = 11; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 80; maxRange = 240; attackSpeed = 100; diff --git a/core/src/com/dungeoncrawler/model/entities/Iceswordsman.java b/core/src/com/dungeoncrawler/model/entities/Iceswordsman.java index 9a7df54..67143c3 100644 --- a/core/src/com/dungeoncrawler/model/entities/Iceswordsman.java +++ b/core/src/com/dungeoncrawler/model/entities/Iceswordsman.java @@ -14,6 +14,7 @@ public class Iceswordsman extends Entity { this.dmg = 14*lvl; this.id = 15; this.type = 0; + this.exp = (lvl+1) * 5; // TODO: Sinnvolle Werte finden direction = 2; diff --git a/core/src/com/dungeoncrawler/model/entities/Icewizard.java b/core/src/com/dungeoncrawler/model/entities/Icewizard.java index ec49a02..25a32db 100644 --- a/core/src/com/dungeoncrawler/model/entities/Icewizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Icewizard.java @@ -28,6 +28,7 @@ public class Icewizard extends Entity{ this.dmg = 10*lvl; this.id = 16; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 70; maxRange = 190; attackSpeed = 80; diff --git a/core/src/com/dungeoncrawler/model/entities/Naturewizard.java b/core/src/com/dungeoncrawler/model/entities/Naturewizard.java index 31c2344..ad40a74 100644 --- a/core/src/com/dungeoncrawler/model/entities/Naturewizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Naturewizard.java @@ -28,6 +28,7 @@ public class Naturewizard extends Entity{ this.dmg = 8*lvl; this.id = 22; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 60; maxRange = 150; attackSpeed = 80; diff --git a/core/src/com/dungeoncrawler/model/entities/Player.java b/core/src/com/dungeoncrawler/model/entities/Player.java index 7ddb37a..45a4150 100644 --- a/core/src/com/dungeoncrawler/model/entities/Player.java +++ b/core/src/com/dungeoncrawler/model/entities/Player.java @@ -22,6 +22,8 @@ public class Player extends Entity { String gender; float standartMovementSpeed; float movementSpeed; + + int level; public Player() { super(200, 200, 1); @@ -49,11 +51,12 @@ public class Player extends Entity { public void updateStats(int ey){ this.lvl = ey+1; - this.maxhp = 50 * this.lvl; - this.standartMaxHp = 50 * this.lvl; - this.standartDmg = 20 * this.lvl; + this.level = (this.exp / 10) + 1; + this.maxhp = 50 * this.level; + this.standartMaxHp = 50 * this.level; + this.standartDmg = 20 * this.level; this.dmg = this.standartDmg; - this.standartDef = 4 * lvl; + this.standartDef = 4 * this.level; this.def = this.standartDef; updateItems(); } diff --git a/core/src/com/dungeoncrawler/model/entities/Swordsman.java b/core/src/com/dungeoncrawler/model/entities/Swordsman.java index b92d74b..0a53db9 100644 --- a/core/src/com/dungeoncrawler/model/entities/Swordsman.java +++ b/core/src/com/dungeoncrawler/model/entities/Swordsman.java @@ -14,6 +14,7 @@ public class Swordsman extends Entity { this.dmg = 12*lvl; this.id = 1; this.type = 0; + this.exp = (lvl+1) * 5; // TODO: Sinnvolle Werte finden direction = 2; diff --git a/core/src/com/dungeoncrawler/model/entities/Waterwizard.java b/core/src/com/dungeoncrawler/model/entities/Waterwizard.java index 9326876..1a47d34 100644 --- a/core/src/com/dungeoncrawler/model/entities/Waterwizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Waterwizard.java @@ -28,6 +28,7 @@ public class Waterwizard extends Entity{ this.dmg = 12*lvl; this.id = 18; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 65; maxRange = 130; attackSpeed = 50; diff --git a/core/src/com/dungeoncrawler/model/entities/Wizard.java b/core/src/com/dungeoncrawler/model/entities/Wizard.java index 08135fd..764edd8 100644 --- a/core/src/com/dungeoncrawler/model/entities/Wizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Wizard.java @@ -28,6 +28,7 @@ public class Wizard extends Entity{ this.dmg = 10*lvl; this.id = 3; this.type = 1; + this.exp = (lvl+1) * 5; minRange = 140; maxRange = 170; attackSpeed = 70; // higher = slower diff --git a/core/src/com/dungeoncrawler/view/Button.java b/core/src/com/dungeoncrawler/view/Button.java new file mode 100644 index 0000000..8b1fb6f --- /dev/null +++ b/core/src/com/dungeoncrawler/view/Button.java @@ -0,0 +1,90 @@ +package com.dungeoncrawler.view; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.math.Rectangle; + +public class Button { + + Sprite sprite; + int xPos; + int yPos; + int width; + int height; + int id; + private Rectangle rect; + + public Button(String texture, int x, int y, int id) { + this.sprite = new Sprite(new Texture(texture)); + rect = sprite.getBoundingRectangle(); + this.xPos = x; + this.yPos = y; + this.width = (int) sprite.getWidth(); + this.height = (int) sprite.getHeight(); + sprite.setX(x); + sprite.setY(y); + this.id = id; + } + + public Sprite getSprite() { + return sprite; + } + + public void setSprite(Sprite sprite) { + this.sprite = sprite; + } + + public int getxPos() { + return xPos; + } + + public void setxPos(int xPos) { + this.xPos = xPos; + } + + public int getyPos() { + return yPos; + } + + public void setyPos(int yPos) { + this.yPos = yPos; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + /** + * @return the rect + */ + public Rectangle getRect() { + return rect; + } + + /** + * @param rect the rect to set + */ + public void setRect(Rectangle rect) { + this.rect = rect; + } +} diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index 5ad74e7..13890a5 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -2,6 +2,7 @@ package com.dungeoncrawler.view; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; @@ -9,14 +10,19 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.maps.tiled.TiledMapRenderer; import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer; +import com.badlogic.gdx.math.Circle; import com.badlogic.gdx.math.Intersector; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.utils.Timer; import com.dungeoncrawler.model.Dungeon; import com.dungeoncrawler.model.Entity; import com.dungeoncrawler.model.entities.*; + +import java.awt.Shape; import java.util.ArrayList; import java.util.Arrays; @@ -39,10 +45,20 @@ public class GameScreen { private Map m; TiledMapRenderer tmr; TiledMap tm; - OrthographicCamera camera; public ArrayList objects; public ArrayList mapItems; public ArrayList doors; + + // MiniMap + ShapeRenderer shapeRenderer; + Sprite miniMapContainer; + + int mapX = 10; + int mapY = 310; + int gap = 2; + int rectWidth = 15; + int rectHeight = 10; + float alpha = 0.5f; Timer animations; Timer animatePlayer; @@ -65,6 +81,11 @@ public class GameScreen { public Music music; //Inventory TEST + + // CONTROLS + ArrayList