diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 4e4962e..f8bc16f 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -143,6 +143,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(tileX == 0 || tileX == roomX || tileY == 0 || tileY == roomY){ updateRoom(); } + // Render methode zum rendern der einzelnen Sprites wird aufgerufen @@ -159,7 +160,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ public void updateObjects(int level, int roomPosX, int roomPosY){ - MapLayers layers = m.getM().getMaps()[level][roomPosX][roomPosY].getLayers(); + MapLayers layers = m.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers(); MapObjects objects = layers.get(0).getObjects(); //System.out.println(objects.getCount()); diff --git a/core/src/com/dungeoncrawler/view/AnimatedObject.java b/core/src/com/dungeoncrawler/view/AnimatedObject.java new file mode 100644 index 0000000..6ae8fe9 --- /dev/null +++ b/core/src/com/dungeoncrawler/view/AnimatedObject.java @@ -0,0 +1,70 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.dungeoncrawler.view; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.graphics.g2d.TextureRegion; + +/** + * + * @author jonathan + */ +public class AnimatedObject { + private Sprite sprite; + private TextureRegion[][] texture; + private int frame; + private int row; + + public AnimatedObject(Texture tx, int tileWidth, int tileHeight){ + texture = TextureRegion.split(tx, tileWidth, tileHeight); + + frame = (int) (Math.random()*texture[0].length); + row = (int) (Math.random()*texture.length); + + sprite = new Sprite(texture[row][frame]); + } + + public void updateTexture(){ + if(frame >= texture[0].length - 1){ + frame = 0; + } + else{ + frame++; + } + + sprite.setRegion(texture[row][frame]); + + } + + /** + * @return the sprite + */ + public Sprite getSprite() { + return sprite; + } + + /** + * @param sprite the sprite to set + */ + public void setSprite(Sprite sprite) { + this.sprite = sprite; + } + + /** + * @return the texture + */ + public TextureRegion[][] getTexture() { + return texture; + } + + /** + * @param texture the texture to set + */ + public void setTexture(TextureRegion[][] texture) { + this.texture = texture; + } +} diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index dde67d4..54b0844 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -13,10 +13,12 @@ import com.badlogic.gdx.maps.tiled.TiledMapRenderer; import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer; 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.ItemContainer; import com.dungeoncrawler.model.entities.*; +import java.util.ArrayList; public class GameScreen { //CONTROLS @@ -46,6 +48,9 @@ public class GameScreen { TiledMapRenderer tmr; TiledMap tm; OrthographicCamera camera; + ArrayList objects; + + Timer animations; // Sound public Music music; @@ -87,8 +92,7 @@ public class GameScreen { MapGenerator mg = new MapGenerator(new Texture(Gdx.files.internal("tilesets/tileset_floor_1.png"))); - TiledMap[][][] maps = mg.generateMap(d); - m.setMaps(maps); + m = mg.generateMap(d); mg.ichWillSpielen(m.getMaps()); tm = new TiledMap(); @@ -97,6 +101,18 @@ public class GameScreen { music = Gdx.audio.newMusic(Gdx.files.internal("music/gamemusic.mp3")); music.setVolume(volume); music.play(); + + animations = new Timer(); + animations.scheduleTask(new Timer.Task() { + @Override + public void run() { + if(objects != null){ + for(AnimatedObject object : objects){ + object.updateTexture(); + } + } + } + },0, 0.1f); } @@ -109,7 +125,8 @@ public class GameScreen { player.setX(p.getxPos()); player.setY(p.getyPos()); - tm = getM().getMaps()[level][roomPosX][roomPosY]; + tm = getM().getMaps()[level][roomPosX][roomPosY].getMap(); + objects = getM().getMaps()[level][roomPosX][roomPosY].getObjects(); if(tm == null){ System.out.println("Dein scheiß geht net"); @@ -164,6 +181,10 @@ public class GameScreen { //BATCH batch.begin(); + for(AnimatedObject object : objects){ + object.getSprite().draw(batch); + } + player.draw(batch); //controls.draw(batch); //DRAW'T JEDES ENTITY - prueft vorher ob vorhanden @@ -223,6 +244,15 @@ public class GameScreen { } } } + + for(int i = 0; i < arrowSprites.length; i++){ + if(arrowSprites[i] != null){ + arrowSprites[i].setX(arrows[i].getxPos()); + arrowSprites[i].setY(arrows[i].getyPos()); + arrowSprites[i].draw(batch); + } + } + batch.end(); } diff --git a/core/src/com/dungeoncrawler/view/Map.java b/core/src/com/dungeoncrawler/view/Map.java index 2bc0cd0..fd87c75 100644 --- a/core/src/com/dungeoncrawler/view/Map.java +++ b/core/src/com/dungeoncrawler/view/Map.java @@ -6,16 +6,12 @@ package com.dungeoncrawler.view; -import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.maps.tiled.TiledMap; - /** * * @author jonathan */ public class Map { - private TiledMap[][][] maps; - private Sprite[] animatedObjects; + private MapContainer[][][] maps; public Map(){ @@ -24,33 +20,15 @@ public class Map { /** * @return the maps */ - public TiledMap[][][] getMaps() { + public MapContainer[][][] getMaps() { return maps; } /** * @param maps the maps to set */ - public void setMaps(TiledMap[][][] maps) { + public void setMaps(MapContainer[][][] maps) { this.maps = maps; } - - /** - * @return the animatedObjects - */ - public Sprite[] getAnimatedObjects() { - return animatedObjects; - } - - /** - * @param animatedObjects the animatedObjects to set - */ - public void setAnimatedObjects(Sprite[] animatedObjects) { - this.animatedObjects = animatedObjects; - } - - public void setAnimatedObjects(Sprite animatedObjects, int i) { - this.animatedObjects[i] = animatedObjects; - } } diff --git a/core/src/com/dungeoncrawler/view/MapContainer.java b/core/src/com/dungeoncrawler/view/MapContainer.java new file mode 100644 index 0000000..bc5bf81 --- /dev/null +++ b/core/src/com/dungeoncrawler/view/MapContainer.java @@ -0,0 +1,52 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.dungeoncrawler.view; + +import com.badlogic.gdx.maps.tiled.TiledMap; +import java.util.ArrayList; + +/** + * + * @author jonathan + */ +public class MapContainer { + private TiledMap map; + private ArrayList objects; + + public MapContainer(TiledMap map){ + this.map = map; + this.objects = new ArrayList<>(); + } + + /** + * @return the map + */ + public TiledMap getMap() { + return map; + } + + /** + * @param map the map to set + */ + public void setMap(TiledMap map) { + this.map = map; + } + + /** + * @return the objects + */ + public ArrayList getObjects() { + return objects; + } + + /** + * @param objects the objects to set + */ + public void setObjects(ArrayList objects) { + this.objects = objects; + } + +} diff --git a/core/src/com/dungeoncrawler/view/MapGenerator.java b/core/src/com/dungeoncrawler/view/MapGenerator.java index 5142b50..1a2a2c9 100644 --- a/core/src/com/dungeoncrawler/view/MapGenerator.java +++ b/core/src/com/dungeoncrawler/view/MapGenerator.java @@ -25,32 +25,38 @@ public class MapGenerator { Texture tiles; TextureRegion[][] splitTiles; + Texture torchT; public MapGenerator(Texture tiles){ this.tiles = tiles; splitTiles = TextureRegion.split(this.tiles, 48, 48); + torchT = new Texture("sprites/torch.png"); + //torch = TextureRegion.split(torchT, 48, 48); } - public TiledMap[][][] generateMap(Dungeon d){ + public Map generateMap(Dungeon d){ + Map temp = new Map(); + int levelAmount = d.getLevel().length; - TiledMap[][][] tempMap = new TiledMap[levelAmount][][]; + MapContainer[][][] tempMap = new MapContainer[levelAmount][][]; // Jedes Level wird generiert for(int i = 0; i < levelAmount; i++){ - TiledMap[][] tempLevel = generateLevel(i, d.getLevel()[i]); + MapContainer[][] tempLevel = generateLevel(i, d.getLevel()[i]); tempMap[i] = tempLevel; } - return tempMap; + temp.setMaps(tempMap); + return temp; } - private TiledMap[][] generateLevel(int i, Level l){ + private MapContainer[][] generateLevel(int i, Level l){ int sizeX = l.getRooms().length; int sizeY = l.getRooms()[0].length; - TiledMap[][] tempLevel = new TiledMap[sizeX][sizeY]; + MapContainer[][] tempLevel = new MapContainer[sizeX][sizeY]; for(int x = 0; x < sizeX; x++){ for(int y = 0; y < sizeY; y++){ @@ -63,8 +69,9 @@ public class MapGenerator { int mapDimensionX = tempX + 2; int mapDimensionY = tempY + 2; - // Raum wird generiertf - TiledMap tempRoom = generateRoom(room, tempX, tempY, i); + // Raum wird generiert + MapContainer temp = generateRoom(room, tempX, tempY, i); + TiledMap tempRoom = temp.getMap(); // Wenn es Fehler gibt, dann wohl hier: Viel Spaß beim Suchen! Danke! MapLayer collisionLayer = tempRoom.getLayers().get(0); @@ -113,9 +120,13 @@ public class MapGenerator { // X: Gesamtlänge, Y: Exakte Mitte der Gesamtlänge staticLayer.getCell(tempX + 1, (tempY / 2) + 0).setTile(new StaticTiledMapTile(splitTiles[4][4])); //rechts-1 staticLayer.getCell(tempX + 1, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[0][0])); //rechts1 - staticLayer.getCell(tempX + 1, (tempY / 2) + 2).setTile(new StaticTiledMapTile(splitTiles[3][1])); //rechts2 - staticLayer.getCell(tempX + 1, (tempY / 2) + 3).setTile(new StaticTiledMapTile(splitTiles[2][1])); //rechts3 + staticLayer.getCell(tempX + 1, (tempY / 2) + 2).setTile(new StaticTiledMapTile(splitTiles[1][1])); //rechts2 + staticLayer.getCell(tempX + 1, (tempY / 2) + 3).setTile(new StaticTiledMapTile(splitTiles[0][1])); //rechts3 staticLayer.getCell(tempX + 1, (tempY / 2) + 4).setTile(new StaticTiledMapTile(splitTiles[2][5])); //rechts4 + + AnimatedObject tempObject = new AnimatedObject(torchT, 48, 48); + tempObject.getSprite().setPosition((tempX + 1) * 48, ((tempY / 2) + 2) * 48); + temp.getObjects().add(tempObject); } collisionLayer.getObjects().remove(right); @@ -159,9 +170,13 @@ public class MapGenerator { // X: 0, Y: Exakte Mitte der Gesamtlänge staticLayer.getCell(0, (tempY / 2) + 0).setTile(new StaticTiledMapTile(splitTiles[4][5])); //links-1 staticLayer.getCell(0, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[0][0])); //links1 - staticLayer.getCell(0, (tempY / 2) + 2).setTile(new StaticTiledMapTile(splitTiles[3][1])); //links2 - staticLayer.getCell(0, (tempY / 2) + 3).setTile(new StaticTiledMapTile(splitTiles[2][1])); //links3 + staticLayer.getCell(0, (tempY / 2) + 2).setTile(new StaticTiledMapTile(splitTiles[1][1])); //links2 + staticLayer.getCell(0, (tempY / 2) + 3).setTile(new StaticTiledMapTile(splitTiles[0][1])); //links3 staticLayer.getCell(0, (tempY / 2) + 4).setTile(new StaticTiledMapTile(splitTiles[3][5])); //links4 + + AnimatedObject tempObject = new AnimatedObject(torchT, 48, 48); + tempObject.getSprite().setPosition(0, ((tempY / 2) + 2) * 48); + temp.getObjects().add(tempObject); } collisionLayer.getObjects().remove(left); @@ -173,7 +188,8 @@ public class MapGenerator { collisionLayer.getObjects().add(tempBottom); } - tempLevel[x][y] = tempRoom; + temp.setMap(tempRoom); + tempLevel[x][y] = temp; } } @@ -182,7 +198,9 @@ public class MapGenerator { return tempLevel; } - private TiledMap generateRoom(Room r, int roomDimensionX, int roomDimensionY, int lvl){ + private MapContainer generateRoom(Room r, int roomDimensionX, int roomDimensionY, int lvl){ + TiledMap tempRoom = new TiledMap(); + MapContainer temp = new MapContainer(tempRoom); int bodenX; int bodenY; @@ -196,8 +214,6 @@ public class MapGenerator { bodenY = lvl - 4; } - 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; @@ -248,20 +264,17 @@ public class MapGenerator { // oben1 else if(y == mapDimensionY - 1){ if(x == roomDimensionX / 2 - 1 || x == roomDimensionX / 2 + 3){ - cell.setTile(new StaticTiledMapTile(splitTiles[3][1])); - } - else{ - cell.setTile(new StaticTiledMapTile(splitTiles[1][1])); + + AnimatedObject tempObject = new AnimatedObject(torchT, 48, 48); + tempObject.getSprite().setPosition(x * 48, y * 48); + temp.getObjects().add(tempObject); } + + cell.setTile(new StaticTiledMapTile(splitTiles[1][1])); } // oben2 else if(y == mapDimensionY){ - if(x == roomDimensionX / 2 - 1 || x == roomDimensionX / 2 + 3){ - cell.setTile(new StaticTiledMapTile(splitTiles[2][1])); - } - else{ - cell.setTile(new StaticTiledMapTile(splitTiles[0][1])); - } + cell.setTile(new StaticTiledMapTile(splitTiles[0][1])); } // oben3 else if(y == mapDimensionY + 1){ @@ -298,13 +311,13 @@ public class MapGenerator { layers.add(dynamicLayer); layers.add(staticLayer); - return tempRoom; + return temp; } - public void ichWillSpielen(TiledMap[][][] map){ + public void ichWillSpielen(MapContainer[][][] map){ for(int i=0;i