diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 84ec197..270571f 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -29,10 +29,15 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ int[] tile; int[] posRoom; int level; + int roomX; + int roomY; @Override public void create(){ + roomX = 8; + roomY = 6; + e = new Entity[5]; batch = new SpriteBatch(); v = new MainMenu(); @@ -107,84 +112,95 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().setxPos(m.getPlayerSpriteX()); d.getPlayer().setyPos(m.getPlayerSpriteY()); - if(v == null){ - - d.getPlayer().update(); - - tile[0] = (int) d.getPlayer().getxPos() / 48; - tile[1] = (int) d.getPlayer().getyPos() / 48; - - System.out.println("pos Player tiles: " + tile[0] + " " + tile[1]); - - int xPos = tile[0]; - int yPos = tile[1]; - - // oben - if(xPos == 4 && yPos == 6){ - System.out.println("oben"); - - posRoom[1] += 1; - d.getPlayer().setxPos(100); - d.getPlayer().setyPos(100); - } - - // rechts - if(xPos == 8 && yPos == 3){ - System.out.println("rechts"); - - posRoom[0] += 1; - d.getPlayer().setxPos(100); - d.getPlayer().setyPos(100); - } - - // unten - if(xPos == 4 && yPos == 0){ - System.out.println("unten"); - - posRoom[1] -= 1; - d.getPlayer().setxPos(100); - d.getPlayer().setyPos(100); - } - - // links - if(xPos == 0 && yPos == 3){ - System.out.println("links"); + if(v == null){ + // Position des Players, etc. werden aktualisiert + updateObjects(); - posRoom[0] -= 1; - d.getPlayer().setxPos(100); - d.getPlayer().setyPos(100); + // Raum, in dem sich der Player jetzt befindet, wird aktualisiert + updateRoom(); + + // Render methode zum rendern der einzelnen Sprites wird aufgerufen + m.render(batch, d.getPlayer(), e, tile, level, posRoom); } - - // Render methode zum rendern der einzelnen Sprites wird aufgerufen - m.render(batch, d.getPlayer(), e, tile, level, posRoom); } } - } @Override - public void dispose () { - batch.dispose(); - } + public void dispose () { + batch.dispose(); + } + + public void updateObjects(){ + d.getPlayer().update(); + } + + public void updateRoom(){ + // tile[] beinhaltet die x und y Nummer des tiles, in dem sich der Player befindet + tile[0] = (int) d.getPlayer().getxPos() / 48; + tile[1] = (int) d.getPlayer().getyPos() / 48; + + System.out.println(roomX + " " + roomY); + + System.out.println("pos Player tiles: " + tile[0] + " " + tile[1]); + + int xPos = tile[0]; + int yPos = tile[1]; + + // oben + if(xPos == (roomX / 2) && yPos == roomY){ + System.out.println("oben"); + + posRoom[1] += 1; + d.getPlayer().setxPos(100); + d.getPlayer().setyPos(100); + } + + // rechts + if(xPos == roomX && yPos == (roomY / 2)){ + System.out.println("rechts"); + + posRoom[0] += 1; + d.getPlayer().setxPos(100); + d.getPlayer().setyPos(100); + } + + // unten + if(xPos == (roomX / 2) && yPos == 0){ + System.out.println("unten"); + + posRoom[1] -= 1; + d.getPlayer().setxPos(100); + d.getPlayer().setyPos(100); + } + + // links + if(xPos == 0 && yPos == (roomY / 2)){ + System.out.println("links"); + + posRoom[0] -= 1; + d.getPlayer().setxPos(100); + d.getPlayer().setyPos(100); + } + } public void newEntity(Entity ent, int x, int y, int lvl){ for(int i = 0; i < e.length ; i++){ - if(e[i] == null){ - switch(ent.getId()){ - case 0: - e[i] = new Archer(x,y,lvl); - m.newEntity(i,ent,x,y); - i = 10; - break; - case 1: - e[i] = new Swordsman(x,y,lvl); - m.newEntity(i,ent,x,y); - i = 10; - break; - } - + if(e[i] == null){ + switch(ent.getId()){ + case 0: + e[i] = new Archer(x,y,lvl); + m.newEntity(i,ent,x,y); + i = 10; + break; + case 1: + e[i] = new Swordsman(x,y,lvl); + m.newEntity(i,ent,x,y); + i = 10; + break; } } + } } @Override diff --git a/core/src/com/dungeoncrawler/model/DungeonGenerator.java b/core/src/com/dungeoncrawler/model/DungeonGenerator.java index 1686c57..15a0404 100644 --- a/core/src/com/dungeoncrawler/model/DungeonGenerator.java +++ b/core/src/com/dungeoncrawler/model/DungeonGenerator.java @@ -40,13 +40,12 @@ public class DungeonGenerator { int xPos = roomAmount / 2; int yPos = roomAmount / 2; - - //int xPos = (int) (Math.random() * roomAmount); - //int yPos = (int) (Math.random() * roomAmount); tempLevel.setRoom(generateRoom(), xPos, yPos); + // Schleife läuft so lange, bis die entsprechende Anzahl an Räumen generiert wurde for(int i = 1; i < roomAmount;){ + // Zufallszahl für die Richtung wird generiert, Oben: 0, Rechts: 1, Unten: 2, Links: 3 int direction = (int) (Math.random() * 4); diff --git a/core/src/com/dungeoncrawler/view/MapGenerator.java b/core/src/com/dungeoncrawler/view/MapGenerator.java index be57833..a208c36 100644 --- a/core/src/com/dungeoncrawler/view/MapGenerator.java +++ b/core/src/com/dungeoncrawler/view/MapGenerator.java @@ -20,6 +20,7 @@ import com.dungeoncrawler.model.Room; * @author jonathan */ public class MapGenerator { + Texture tiles; TextureRegion[][] splitTiles; @@ -33,6 +34,7 @@ public class MapGenerator { TiledMap[][][] tempMap = new TiledMap[levelAmount][][]; + // Jedes Level wird generiert for(int i = 0; i < levelAmount; i++){ TiledMap[][] tempLevel = generateLevel(i, d.getLevel()[i]); tempMap[i] = tempLevel; @@ -55,6 +57,7 @@ public class MapGenerator { int tempX = 7; int tempY = 5; + // Raum wird generiertf TiledMap tempRoom = generateRoom(room, tempX, tempY); // Wenn es Fehler gibt, dann wohl hier: Viel Spaß beim Suchen! Danke! @@ -62,21 +65,29 @@ public class MapGenerator { // Ausgang oben if(y < l.getRooms()[0].length - 1 && l.getRooms()[x][y + 1] != null){ + + // X: Exakte Mitte der Gesamtlänge, Y: Gesamtlänge temp.getCell((tempX / 2) + 1, tempY + 1).setTile(new StaticTiledMapTile(splitTiles[0][3])); //oben } // Ausgang rechts if(x < l.getRooms().length - 1 && l.getRooms()[x + 1][y] != null){ + + // X: Gesamtlänge, Y: Exakte Mitte der Gesamtlänge temp.getCell(tempX + 1, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[0][3])); //rechts } // Ausgang unten if(y > 0 && l.getRooms()[x][y - 1] != null){ + + // X: Exakte Mitte der Gesamtlänge, Y: 0 temp.getCell((tempX / 2) + 1, 0).setTile(new StaticTiledMapTile(splitTiles[0][3])); //unten } // Ausgang links if(x > 0 && l.getRooms()[x - 1][y] != null){ + + // X: 0, Y: Exakte Mitte der Gesamtlänge temp.getCell(0, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[0][3])); //links } @@ -92,19 +103,27 @@ public class MapGenerator { private TiledMap generateRoom(Room r, int roomDimensionX, int roomDimensionY){ TiledMap tempRoom = new TiledMap(); + // roomDimension bezieht sich auf die Größe des Raumes, da aber noch die Wände fehlen, + // muss auf die Größe jeweils 2 addiert werden. int mapDimensionX = roomDimensionX + 2; int mapDimensionY = roomDimensionY + 2; + // Drei layer für die Map werden erstellt, die jeweils unterschiedliche Sachen speichern sollen: + // collisionLayer: Hier werden alle unsichtbaren Sprites gespeichert, anhand derer die Kollisionen berechnet werden + // dynamicLayer: Beinhaltet alle Sprites, die ihre Postition ändern können (Entities, Items) + // staticLayer: Beinhaltet alle Tiles und alles statische, was sich im Raum nicht ändern kann MapLayers layers = tempRoom.getLayers(); TiledMapTileLayer collisionLayer = new TiledMapTileLayer(mapDimensionX, mapDimensionY, 48, 48); TiledMapTileLayer dynamicLayer = new TiledMapTileLayer(mapDimensionX, mapDimensionY, 48, 48); TiledMapTileLayer staticLayer = new TiledMapTileLayer(mapDimensionX, mapDimensionY, 48, 48); + // Schleife läuft über jedes Teil des Raumes und generiert ein Tile aus dem tileset for(int x = 0; x < mapDimensionX + 1; x++){ for(int y = 0; y < mapDimensionY + 1; y++){ TiledMapTileLayer.Cell cell = new TiledMapTileLayer.Cell(); + // Test, ob Tile eine Wand sein muss if(x == 0 || x == mapDimensionX - 1 || y == 0 || y == mapDimensionY - 1){ cell.setTile(new StaticTiledMapTile(splitTiles[0][5])); }