diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 9c2992c..9e9a3ef 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -112,13 +112,13 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ int y = (int) temp.getyPos(); Entity arrow = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); - Sprite tempObject = m.entitySprites[i]; - tempObject.setPosition(temp.getxPos(), temp.getyPos()); + EntitySprite tempObject = m.entitySprites[i]; + tempObject.update((int) temp.getxPos(), (int) temp.getyPos()); boolean overlaps = false; boolean delete = false; - if(Intersector.overlaps(tempObject.getBoundingRectangle(), playerSprite)){ + if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite)){ overlaps = true; if(d.getCurrentEntities()[i].getId() == 2){ @@ -134,7 +134,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){ Rectangle rectangle = rectangleObject.getRectangle(); - if(Intersector.overlaps(tempObject.getBoundingRectangle(), rectangle)){ + if(Intersector.overlaps(tempObject.getCollisionSprite(), rectangle)){ overlaps = true; delete = true; break; @@ -145,7 +145,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ for(int j = 0; j < m.entitySprites.length; j++){ if(i != j){ if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getId() != 2){ - if(Intersector.overlaps(tempObject.getBoundingRectangle(), m.entitySprites[j].getBoundingRectangle())){ + if(Intersector.overlaps(tempObject.getCollisionSprite(), m.entitySprites[j].getCollisionSprite())){ overlaps = true; break; } @@ -160,7 +160,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getCurrentEntities()[i].setxPos(x); d.getCurrentEntities()[i].setyPos(y); - tempObject.setPosition(x, y); + tempObject.update(x, y); } m.entitySprites[i] = tempObject; @@ -169,7 +169,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ for(int k = 5; k < d.getCurrentEntities().length; k++){ if(d.getCurrentEntities()[k] == null){ d.getCurrentEntities()[k] = arrow; - m.updateEntitySprite(d.getCurrentEntities()); + m.generateNewEntitySprite(arrow, k); break; } } @@ -177,8 +177,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(delete && d.getCurrentEntities()[i].getId() == 2 || d.getCurrentEntities()[i].getToDelete()){ d.getCurrentEntities()[i] = null; - m.updateEntitySprite(d.getCurrentEntities()); - + m.deleteEntitySprite(i); } } } @@ -351,6 +350,8 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.setCurrentLevel(d.getLevel()[level]); d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]); d.setCurrentEntities(d.getCurrentRoom().getEnemies()); + + m.generateEntitySprites(d.getCurrentEntities()); } public void attack(Entity attacker, Entity[] e){ @@ -527,6 +528,8 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ v.cleanUp(); v = null; m = new GameScreen(d, volume); + m.generateEntitySprites(d.getCurrentEntities()); + hc = new HudContainer(); m.startLoadingScreen(); return true; diff --git a/core/src/com/dungeoncrawler/view/PlayerSprite.java b/core/src/com/dungeoncrawler/view/EntitySprite.java similarity index 91% rename from core/src/com/dungeoncrawler/view/PlayerSprite.java rename to core/src/com/dungeoncrawler/view/EntitySprite.java index a471cd5..d3c6e7f 100644 --- a/core/src/com/dungeoncrawler/view/PlayerSprite.java +++ b/core/src/com/dungeoncrawler/view/EntitySprite.java @@ -14,18 +14,19 @@ import com.badlogic.gdx.math.Rectangle; * * @author jonathan */ -public class PlayerSprite { +public class EntitySprite { // 0: pants, 1: body, 2: head, 3: hair, 4: collision private Sprite[] sprites; private Rectangle collisionSprite; + private Rectangle fullCollisionSprite; private TextureRegion[][][] regions; private int[] frames; // 0: links, 1: rechts private int direction; - public PlayerSprite(Texture[] textures){ + public EntitySprite(Texture[] textures){ sprites = new Sprite[1]; regions = new TextureRegion[1][][]; frames = new int[2]; @@ -37,6 +38,7 @@ public class PlayerSprite { } collisionSprite = new Rectangle(0, 0, 32, 16); + fullCollisionSprite = sprites[0].getBoundingRectangle(); } public void updateIdle(){ @@ -165,4 +167,11 @@ public class PlayerSprite { public void setDirection(int direction) { this.direction = direction; } + + /** + * @return the fullCollisionSprite + */ + public Rectangle getFullCollisionSprite() { + return fullCollisionSprite; + } } diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index 1f93ec7..4c54a6d 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -15,7 +15,6 @@ import com.badlogic.gdx.math.Intersector; import com.badlogic.gdx.utils.Timer; import com.dungeoncrawler.model.Dungeon; import com.dungeoncrawler.model.Entity; -import com.dungeoncrawler.model.Item; import com.dungeoncrawler.model.entities.*; import java.util.ArrayList; @@ -23,12 +22,12 @@ public class GameScreen { //PLAYER Texture p; - PlayerSprite player; + EntitySprite player; //ENTITIES Texture[] entityTextures; - public Sprite[] entitySprites; + public EntitySprite[] entitySprites; TextureRegion[][] archerRegions; Texture archerTexture; TextureRegion[][] swordsmanRegions; @@ -84,13 +83,13 @@ public class GameScreen { playerTexture[2] = new Texture(Gdx.files.internal("sprites/player.png")); playerTexture[3] = new Texture(Gdx.files.internal("sprites/player.png")); - player = new PlayerSprite(playerTexture); + player = new EntitySprite(playerTexture); player.update(200, 200); //ENTITIES entityTextures = new Texture[5]; - entitySprites = new Sprite[15]; + entitySprites = new EntitySprite[15]; arrowTextures = new Texture[10]; arrowSprites = new Sprite[10]; @@ -177,193 +176,127 @@ public class GameScreen { } public void render (SpriteBatch batch, Player p, Entity[] e, Entity[] arrows, int tileX, int tileY, int level, int roomPosX, int roomPosY) { - - Gdx.gl.glClearColor(0, 0, 0, 1); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - - playerMoving = (p.getMovementX() != 0 || p.getMovementY() != 0); - - //setzt player Sprite auf richtige Position - player.update((int) p.getxPos(), (int) p.getyPos()); - if(p.getMovementX() > 1){ - player.setDirection(1); - player.updateFlip(); - } - else if(p.getMovementX() < -1){ - player.setDirection(0); - player.updateFlip(); - } - - tm = getM().getMaps()[level][roomPosX][roomPosY].getMap(); - objects = getM().getMaps()[level][roomPosX][roomPosY].getObjects(); - mapItems = getM().getMaps()[level][roomPosX][roomPosY].getMapItems(); - - if(tm == null){ - System.out.println("Dein scheiß geht net"); - } - else{ - tmr = new OrthogonalTiledMapRenderer(tm); - } - - - // dreht SpielerSprite je nach Bewegungsrichtung - /* - if(p.getMovementX() == 3){ //RECHTS - player.setRegion(regions[0][1]); - } - if(p.getMovementX() == -3){ //LINKS - player.setRegion(regions[0][3]); - } - if(p.getMovementY() == 3){ //OBEN - player.setRegion(regions[0][0]); - } - if(p.getMovementY() == -3){ //UNTEN - player.setRegion(regions[0][2]); - } - */ - - //MAP - tmr.setView(camera); - tmr.render(); - camera.zoom = 700f; // Standart 700f - - camera.update(); - batch.setProjectionMatrix(camera.combined); + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - - - updateEntitySprite(e); - + playerMoving = (p.getMovementX() != 0 || p.getMovementY() != 0); + + //setzt player Sprite auf richtige Position + player.update((int) p.getxPos(), (int) p.getyPos()); + if(p.getMovementX() > 1){ + player.setDirection(1); + player.updateFlip(); + } + else if(p.getMovementX() < -1){ + player.setDirection(0); + player.updateFlip(); + } + tm = getM().getMaps()[level][roomPosX][roomPosY].getMap(); + objects = getM().getMaps()[level][roomPosX][roomPosY].getObjects(); + mapItems = getM().getMaps()[level][roomPosX][roomPosY].getMapItems(); + + if(tm == null){ + System.out.println("Dein scheiß geht net"); + } + else{ + tmr = new OrthogonalTiledMapRenderer(tm); + } + + //MAP + tmr.setView(camera); + tmr.render(); + + camera.zoom = 700f; // Standart 700f + + camera.update(); + batch.setProjectionMatrix(camera.combined); + + updateEntitySprites(e); + //BATCH batch.begin(); - - //DRAWING LOADING SCREEN IF LOADING - - - //DRAWING INVENTORY - - - for(AnimatedObject object : objects){ - object.getSprite().draw(batch); - } - - for(AnimatedObject mapItem : mapItems){ - mapItem.getSprite().draw(batch); - } - - //controls.draw(batch); - //DRAW'T JEDES ENTITY - prueft vorher ob vorhanden - for(int i = 0; i < e.length; i++){ - if(e[i] != null){ - switch(e[i].getDirection()){ - case -1: - break; - case 0: - if(e[i].getId() == 0){ - entitySprites[i].setRegion(archerRegions[0][0]); - } - else if(e[i].getId() == 1){ - entitySprites[i].setRegion(swordsmanRegions[0][0]); - } - break; - case 1: - if(e[i].getId() == 0){ - entitySprites[i].setRegion(archerRegions[0][1]); - } - else if(e[i].getId() == 1){ - entitySprites[i].setRegion(swordsmanRegions[0][1]); - } - break; - case 2: - if(e[i].getId() == 0){ - entitySprites[i].setRegion(archerRegions[0][2]); - } - else if(e[i].getId() == 1){ - entitySprites[i].setRegion(swordsmanRegions[0][2]); - } - break; - case 3: - if(e[i].getId() == 0){ - entitySprites[i].setRegion(archerRegions[0][3]); - } - else if(e[i].getId() == 1){ - entitySprites[i].setRegion(swordsmanRegions[0][3]); - } - break; - + + for(AnimatedObject object : objects){ + object.getSprite().draw(batch); + } + + for(AnimatedObject mapItem : mapItems){ + mapItem.getSprite().draw(batch); + } + + //DRAW'T JEDES ENTITY - prueft vorher ob vorhanden + for(int i = 0; i < e.length; i++){ + if(e[i] != null){ + + entitySprites[i].getSprites()[0].draw(batch); + + if(e[i].getId() != 2){ + if(e[i].getHp() < e[i].getMaxhp() && e[i].getHp() > 0){ + healthBar = new Texture("sprites/halfHealthEntity.png"); + Sprite healthBarSprite = new Sprite(healthBar); + healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos()); + healthBarSprite.draw(batch); } - entitySprites[i].draw(batch); - entitySprites[i].setX(e[i].getxPos()); - entitySprites[i].setY(e[i].getyPos()); - if(e[i].getId() != 2){ - if(e[i].getHp() < e[i].getMaxhp() && e[i].getHp() > 0){ - healthBar = new Texture("sprites/halfHealthEntity.png"); - Sprite healthBarSprite = new Sprite(healthBar); - healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos()); - healthBarSprite.draw(batch); - } - else if(e[i].getHp() == e[i].getMaxhp()){ - healthBar = new Texture("sprites/fullHealthEntity.png"); - Sprite healthBarSprite = new Sprite(healthBar); - healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos()); - healthBarSprite.draw(batch); - } + else if(e[i].getHp() == e[i].getMaxhp()){ + healthBar = new Texture("sprites/fullHealthEntity.png"); + Sprite healthBarSprite = new Sprite(healthBar); + healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos()); + healthBarSprite.draw(batch); } } } - - // Player wird gedrawt - for(Sprite sprite : player.getSprites()){ - sprite.draw(batch); + } + + // Player wird gedrawt + for(Sprite sprite : player.getSprites()){ + sprite.draw(batch); + } + + roomChangeSprite.setRegion(roomChangeTextureRegion[0][roomChangeRow]); + if(roomLoading == true){ + roomChangeSprite.draw(batch); + } + + batch.end(); + } + + public void generateEntitySprites(Entity[] e){ + for(int i = 0; i < e.length; i++){ + generateNewEntitySprite(e[i], i); + } + } + + public void generateNewEntitySprite(Entity e, int i){ + if(e != null){ + Texture[] tx = new Texture[1]; + if(e.getId() == 0){ //nimmt entity ID -> 0 = Archer || 1 = Swordsman || 2 = Arrow + tx[0] = new Texture("sprites/player.png"); } - - /* - 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); - } + if(e.getId() == 1){ + tx[0] = new Texture("sprites/player.png"); } - */ - roomChangeSprite.setRegion(roomChangeTextureRegion[0][roomChangeRow]); - if(roomLoading == true){ - roomChangeSprite.draw(batch); + if(e.getId() == 2){ + tx[0] = new Texture("sprites/player.png"); } - - batch.end(); - } + + entitySprites[i] = new EntitySprite(tx); + entitySprites[i].update((int) e.getxPos(), (int) e.getyPos()); + } + } - public void updateEntitySprite(Entity[] e){ + public void updateEntitySprites(Entity[] e){ for(int i = 0; i < e.length; i++){ - if(e[i] != null){ - if(e[i].getId() == 0){ //nimmt entity ID -> 0 = Archer || 1 = Swordsman || 2 = Arrow - entityTextures[i] = new Texture("sprites/archer.png"); - archerRegions = TextureRegion.split(entityTextures[i], 48, 48); - entitySprites[i] = new Sprite(archerRegions[0][2]); - entitySprites[i].setX(e[i].getxPos()); - entitySprites[i].setY(e[i].getyPos()); - } - if(e[i].getId() == 1){ - entityTextures[i] = new Texture("sprites/swordsman.png"); - swordsmanRegions = TextureRegion.split(entityTextures[i], 48, 48); - entitySprites[i] = new Sprite(swordsmanRegions[0][2]); - entitySprites[i].setX(e[i].getxPos()); - entitySprites[i].setY(e[i].getyPos()); - } - if(e[i].getId() == 2){ - Texture tx = new Texture("sprites/arrow.png"); - //swordsmanRegions = TextureRegion.split(entityTextures[i], 48, 48); - entitySprites[i] = new Sprite(tx); - entitySprites[i].setX(e[i].getxPos()); - entitySprites[i].setY(e[i].getyPos()); - } - } - } + if(e[i] != null){ + entitySprites[i].update((int) e[i].getxPos(), (int) e[i].getyPos()); + } + } } + public void deleteEntitySprite(int i){ + entitySprites[i] = null; + } public Entity[] playerAttack(Entity e[], Player p, SpriteBatch batch){ if(p.getDirection() == 0){ @@ -374,7 +307,7 @@ public class GameScreen { for(int i = 0; i< e.length ; i++){ if(e[i] != null){ - if(Intersector.overlaps(entitySprites[i].getBoundingRectangle(), attackSprite.getBoundingRectangle())){ + if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){ if(e[i] != null){ if(e[i].getHp() - p.getDmg() <= 0){ e[i] = null; @@ -394,7 +327,7 @@ public class GameScreen { attackSprite.setY(p.getyPos()- 2f); for(int i = 0; i< e.length ; i++){ if(entitySprites[i] != null){ - if(Intersector.overlaps(entitySprites[i].getBoundingRectangle(), attackSprite.getBoundingRectangle())){ + if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){ if(e[i] != null){ if(e[i].getHp() - p.getDmg() <= 0){ e[i] = null; @@ -414,7 +347,7 @@ public class GameScreen { attackSprite.setY(p.getyPos()); for(int i = 0; i objects; private ArrayList mapItems; + private EntitySprite[] enemies; public MapContainer(TiledMap map){ this.map = map; this.objects = new ArrayList<>(); this.mapItems = new ArrayList<>(); + this.enemies = new EntitySprite[15]; } /** @@ -64,5 +66,23 @@ public class MapContainer { public void setMapItems(ArrayList mapItems) { this.mapItems = mapItems; } + + /** + * @return the enemies + */ + public EntitySprite[] getEnemies() { + return enemies; + } + + /** + * @param enemies the enemies to set + */ + public void setEnemies(EntitySprite[] enemies) { + this.enemies = enemies; + } + + public void setEnemies(EntitySprite enemy, int i) { + this.enemies[i] = enemy; + } }