From 3f46d828186123ea1098c063a453d801b0882d07 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sat, 25 Apr 2020 11:19:10 +0200 Subject: [PATCH] Ebenenwechsel klappt --- .../dungeoncrawler/control/Controller.java | 14 ++++++ .../model/DungeonGenerator.java | 46 ++++++++++++++++++- .../com/dungeoncrawler/view/MapGenerator.java | 20 ++++++-- 3 files changed, 76 insertions(+), 4 deletions(-) diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 6ed181b..0ce5f41 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -228,6 +228,20 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().setxPos((roomX*48) - 48); d.getPlayer().setyPos((roomY / 2)*48); } + + if(posRoom[0] == d.getLevel()[level].getExit()[0] && posRoom[1] == d.getLevel()[level].getExit()[1]){ + if(level < 6){ + System.out.println("Nächstes Level, here we go"); + level++; + + tile[0] = roomX / 2; + tile[1] = roomY / 2; + + int roomAmount = d.getLevel()[level].getRooms().length; + posRoom[0] = roomAmount / 2; + posRoom[1] = roomAmount / 2; + } + } } public void newEntity(Entity ent, float x, float y, int lvl){ diff --git a/core/src/com/dungeoncrawler/model/DungeonGenerator.java b/core/src/com/dungeoncrawler/model/DungeonGenerator.java index 348b51b..64bf530 100644 --- a/core/src/com/dungeoncrawler/model/DungeonGenerator.java +++ b/core/src/com/dungeoncrawler/model/DungeonGenerator.java @@ -80,10 +80,54 @@ public class DungeonGenerator { if(tempLevel.getRooms()[xPos][yPos] == null){ tempLevel.setRoom(generateRoom(sizeX, sizeY, tileSize, lvl), xPos, yPos); - // i darf nur erhöht werden, wenn auche in Raum generiert wurde + // i darf nur erhöht werden, wenn auch ein Raum generiert wurde i++; } } + + // Exit wird generiert + boolean istFertig = false; + do{ + // Zufallszahl für die Richtung wird generiert, Oben: 0, Rechts: 1, Unten: 2, Links: 3 + int direction = (int) (Math.random() * 4); + + switch (direction) { + // Oben + case 0: + if(yPos != roomAmount - 1){ + yPos += 1; + } + break; + // Rechts + case 1: + if(xPos != roomAmount - 1){ + xPos += 1; + } + break; + // Unten + case 2: + if(yPos != 0){ + yPos -= 1; + } + break; + // Links + case 3: + if(xPos != 0){ + xPos -= 1; + } + break; + } + + // An der neuen Stelle vom Cursor gibt es noch keinen Raum + if(tempLevel.getRooms()[xPos][yPos] == null){ + tempLevel.setRoom(generateRoom(sizeX, sizeY, tileSize, lvl), xPos, yPos); + + tempLevel.setExit(xPos, 0); + tempLevel.setExit(yPos, 1); + + istFertig = true; + } + } while(!istFertig); return tempLevel; } diff --git a/core/src/com/dungeoncrawler/view/MapGenerator.java b/core/src/com/dungeoncrawler/view/MapGenerator.java index 69ec9bd..0b5c934 100644 --- a/core/src/com/dungeoncrawler/view/MapGenerator.java +++ b/core/src/com/dungeoncrawler/view/MapGenerator.java @@ -46,6 +46,7 @@ public class MapGenerator { } private TiledMap[][] generateLevel(int i, Level l){ + int sizeX = l.getRooms().length; int sizeY = l.getRooms()[0].length; @@ -63,7 +64,7 @@ public class MapGenerator { int mapDimensionY = tempY + 2; // Raum wird generiertf - TiledMap tempRoom = generateRoom(room, tempX, tempY); + TiledMap tempRoom = generateRoom(room, tempX, tempY, i); // Wenn es Fehler gibt, dann wohl hier: Viel Spaß beim Suchen! Danke! MapLayer collisionLayer = tempRoom.getLayers().get(0); @@ -142,7 +143,20 @@ public class MapGenerator { return tempLevel; } - private TiledMap generateRoom(Room r, int roomDimensionX, int roomDimensionY){ + private TiledMap generateRoom(Room r, int roomDimensionX, int roomDimensionY, int lvl){ + + int bodenX; + int bodenY; + + if(lvl < 5){ + bodenX = lvl; + bodenY = 0; + } + else{ + bodenX = 0; + bodenY = lvl - 4; + } + TiledMap tempRoom = new TiledMap(); // roomDimension bezieht sich auf die Größe des Raumes, da aber noch die Wände fehlen, @@ -185,7 +199,7 @@ public class MapGenerator { cell.setTile(new StaticTiledMapTile(splitTiles[0][5])); } else{ - cell.setTile(new StaticTiledMapTile(splitTiles[0][0])); + cell.setTile(new StaticTiledMapTile(splitTiles[bodenX][bodenY])); } staticLayer.setCell(x, y, cell);