diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 609245a..aae5459 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -139,7 +139,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite)){ overlaps = true; - if(d.getCurrentEntities()[i].getType() == 2){ + if(d.getCurrentEntities()[i].getType() == 2 && d.getCurrentEntities()[i].isTargetsPlayer()){ delete = true; d.getCurrentEntities()[i].attack(d.getPlayer()); } @@ -565,6 +565,64 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } } + if(keycode == Input.Keys.LEFT){ + if(mm != null){} + if(gs != null && gs.getIsLoading() == false){ + 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){ + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + break; + } + } + } + } + + if(keycode == Input.Keys.UP){ + if(mm != null){} + if(gs != null && gs.getIsLoading() == false){ + 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){ + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + break; + } + } + } + } + if(keycode == Input.Keys.RIGHT){ + if(mm != null){} + if(gs != null && gs.getIsLoading() == false){ + 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){ + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + break; + } + } + } + } + if(keycode == Input.Keys.DOWN){ + if(mm != null){} + if(gs != null && gs.getIsLoading() == false){ + 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){ + d.getCurrentEntities()[k] = lol; + gs.generateNewEntitySprite(lol, k); + break; + } + } + } + } + return true; } diff --git a/core/src/com/dungeoncrawler/model/Entity.java b/core/src/com/dungeoncrawler/model/Entity.java index 9206a7c..97660e9 100644 --- a/core/src/com/dungeoncrawler/model/Entity.java +++ b/core/src/com/dungeoncrawler/model/Entity.java @@ -16,6 +16,7 @@ public abstract class Entity { protected Inventory inv; private boolean toDelete; private double angle; + protected boolean targetsPlayer; @@ -27,6 +28,7 @@ public abstract class Entity { this.movementY = 0; this.direction = 2; this.toDelete = false; + this.targetsPlayer = true; } public void attack(Entity e){ @@ -185,5 +187,12 @@ public abstract class Entity { public int getType() { return type; } + + /** + * @return the targetsPlayer + */ + public boolean isTargetsPlayer() { + return targetsPlayer; + } } \ 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 7c674ad..3e0b9ce 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -114,7 +114,7 @@ public class Archer extends Entity{ alpha = 2*Math.PI - alpha; } } - a = new Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 2); + a = new Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 2, true); movementX = (int) (6 * Math.cos(alpha)); movementY = (int) (6 * Math.sin(alpha)); diff --git a/core/src/com/dungeoncrawler/model/entities/Player.java b/core/src/com/dungeoncrawler/model/entities/Player.java index 2aca959..30c01e7 100644 --- a/core/src/com/dungeoncrawler/model/entities/Player.java +++ b/core/src/com/dungeoncrawler/model/entities/Player.java @@ -30,6 +30,7 @@ public class Player extends Entity { type = -1; inv = new Inventory(3,2); // TODO: Sinnvolle Werte finden + this.targetsPlayer = false; } @@ -55,5 +56,59 @@ public class Player extends Entity { return false; } + @Override + public Entity shoot(int xPosPlayer, int yPosPlayer){ + Projectile a = null; + + if(!isToDelete()){ + float deltaX = xPosPlayer - (int) xPos; + float deltaY = yPosPlayer - (int) yPos; + + double alpha; + if(deltaY == 0){ + if(deltaX < 0){ + alpha = Math.PI; + } + else{ + alpha = 0; + } + } + else if(deltaX == 0 && deltaY >= 0){ + alpha = Math.PI / 2; + } + else if(deltaX == 0 && deltaY < 0){ + alpha = Math.PI / -2; + } + else{ + alpha = Math.abs(Math.atan(deltaY / deltaX)); + + if(deltaX < 0 && deltaY < 0){ + alpha = Math.PI + alpha; + } + else if(deltaX < 0 && deltaY > 0){ + alpha = Math.PI - alpha; + } + else if(deltaX > 0 && deltaY < 0){ + alpha = 2*Math.PI - alpha; + } + } + a = new Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 2, false); + int tempMovementX = (int) (6 * Math.cos(alpha)); + int tempMovementY = (int) (6 * Math.sin(alpha)); + + a.setMovementX(tempMovementX); + a.setMovementY(tempMovementY); + a.setAngle(alpha); + + if((alpha >= 0 && alpha <= Math.PI / 2) || (alpha <= 2 * Math.PI && alpha >= 2 * Math.PI - Math.PI / 2)){ + setDirection(1); + } + else{ + setDirection(0); + } + } + + return a; + } } diff --git a/core/src/com/dungeoncrawler/model/entities/Projectile.java b/core/src/com/dungeoncrawler/model/entities/Projectile.java index aae0df4..7937991 100644 --- a/core/src/com/dungeoncrawler/model/entities/Projectile.java +++ b/core/src/com/dungeoncrawler/model/entities/Projectile.java @@ -14,7 +14,7 @@ public class Projectile extends Entity{ int direction; int lifetime; - public Projectile(float xPos, float yPos, int lvl, int id){ + public Projectile(float xPos, float yPos, int lvl, int id, boolean targetsPlayer){ super(xPos, yPos, lvl); xStart = xPos; yStart = yPos; @@ -22,6 +22,7 @@ public class Projectile extends Entity{ this.id = id; type = 2; this.lifetime = 0; + this.targetsPlayer = targetsPlayer; } public float getxStart(){ diff --git a/core/src/com/dungeoncrawler/model/entities/Wizard.java b/core/src/com/dungeoncrawler/model/entities/Wizard.java index 3abaf9f..e0a154f 100644 --- a/core/src/com/dungeoncrawler/model/entities/Wizard.java +++ b/core/src/com/dungeoncrawler/model/entities/Wizard.java @@ -122,7 +122,7 @@ public class Wizard extends Entity{ alpha = 2*Math.PI - alpha; } } - a = new Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 4); + a = new Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 4, true); movementX = (int) (6 * Math.cos(alpha)); movementY = (int) (6 * Math.sin(alpha)); diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index f97fcf4..edcf030 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -206,19 +206,6 @@ public class GameScreen { updateEntitySprites(e); - - - //BATCH - batch.begin(); - - for(AnimatedObject object : objects){ - object.getSprite().draw(batch); - } - - for(AnimatedObject mapItem : mapItems){ - mapItem.getSprite().draw(batch); - } - ArrayList temp = new ArrayList<>(); for(EntitySprite entity : entitySprites){ @@ -239,29 +226,20 @@ public class GameScreen { Arrays.sort(renderArray); - for(EntitySprite eSprite : renderArray){ - if(eSprite != null){ - for(int i = 0; i < eSprite.getSprites().length; i++){ - eSprite.getSprites()[i].draw(batch); - } - } - } - - /* - //DRAW'T JEDES ENTITY - prueft vorher ob vorhanden - for(int i = 0; i < renderArray.length; i++){ - if(e[i] != null){ - - entitySprites[i].getSprites()[0].draw(batch); + //BATCH + batch.begin(); - } + for(AnimatedObject object : objects){ + object.getSprite().draw(batch); } - // Player wird gedrawt - for(Sprite sprite : player.getSprites()){ - sprite.draw(batch); + for(AnimatedObject mapItem : mapItems){ + mapItem.getSprite().draw(batch); + } + + for(EntitySprite eSprite : renderArray){ + eSprite.getSprites()[0].draw(batch); } - */ roomChangeSprite.setRegion(roomChangeTextureRegion[0][roomChangeRow]); if(roomLoading == true){ @@ -272,6 +250,8 @@ public class GameScreen { } public void generateEntitySprites(Entity[] e){ + entitySprites = new EntitySprite[15]; + for(int i = 0; i < e.length; i++){ generateNewEntitySprite(e[i], i); }