diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index b7f7b94..7a9ac1b 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -105,12 +105,18 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ entityMovement.scheduleTask(new Timer.Task() { @Override public void run() { + if(gs != null){ + + if(gs.player.getAttackState() == 2){ + playerAttack(d.getCurrentEntities(), d.getPlayer(), d.getPlayer().getDirection()); + } + for(int i = 0; i < d.getCurrentEntities().length; i++){ if(d.getCurrentEntities()[i] != null){ // Gets the collisions relevant sprites MapObjects mapObjects = gs.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(0).getObjects(); - Rectangle playerSprite = gs.getPlayer().getCollisionSprite(); + Rectangle playerSprite = gs.getPlayer().getFullCollisionSprite(); Entity temp = d.getCurrentEntities()[i]; @@ -130,28 +136,27 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ boolean overlaps = false; boolean delete = false; - if(d.getCurrentEntities()[i].getId() == 2){ - if(Intersector.overlaps(tempObject.getCollisionSprite(), gs.getPlayer().getFullCollisionSprite())){ - overlaps = true; + if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite)){ + overlaps = true; + + if(d.getCurrentEntities()[i].getType() == 2){ delete = true; d.getCurrentEntities()[i].attack(d.getPlayer()); } - } - else if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite)){ - - overlaps = true; - if(d.getCurrentEntities()[i].getId() != 0){ - switch(gs.entitySprites[i].getAttackState()){ - case 0: - gs.entitySprites[i].startAttack(); - break; - case 1: - break; - case 2: - d.getCurrentEntities()[i].attack(d.getPlayer()); - gs.entitySprites[i].resetAttackState(); - break; - default: + else{ + if(d.getCurrentEntities()[i].getType() == 0){ + switch(gs.entitySprites[i].getAttackState()){ + case 0: + gs.entitySprites[i].startAttack(); + break; + case 1: + break; + case 2: + d.getCurrentEntities()[i].attack(d.getPlayer()); + gs.entitySprites[i].resetAttackState(); + break; + default: + } } } } @@ -162,7 +167,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(Intersector.overlaps(tempObject.getCollisionSprite(), rectangle)){ overlaps = true; - if(d.getCurrentEntities()[i].getId() == 2){ + if(d.getCurrentEntities()[i].getType() == 2){ delete = true; } @@ -170,7 +175,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } } - if(d.getCurrentEntities()[i].getId() != 2){ + if(d.getCurrentEntities()[i].getType() != 2){ for(int j = 0; j < gs.entitySprites.length; j++){ if(i != j){ if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getId() != 2){ @@ -186,12 +191,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } - if(gs.entitySprites[i].getAttackState() == 2 && d.getCurrentEntities()[i].getId() != 0){ + if(gs.entitySprites[i].getAttackState() == 2 && d.getCurrentEntities()[i].getType() != 0){ gs.entitySprites[i].resetAttackState(); } - if(gs.player.getAttackState() == 2){ - playerAttack(d.getCurrentEntities(), d.getPlayer(), d.getPlayer().getDirection()); - } + if(overlaps){ d.getCurrentEntities()[i].setxPos(x); d.getCurrentEntities()[i].setyPos(y); @@ -201,12 +204,11 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ gs.entitySprites[i] = tempObject; - if(d.getCurrentEntities()[i].getId() == 0 && gs.entitySprites[i].getAttackState() == 2){ + if(d.getCurrentEntities()[i].getType()== 0 && gs.entitySprites[i].getAttackState() == 2){ + Entity arrow = d.getCurrentEntities()[i].shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); + for(int k = 5; k < d.getCurrentEntities().length; k++){ if(d.getCurrentEntities()[k] == null){ - Entity arrow = d.getCurrentEntities()[i].shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); - arrow.setxPos(d.getCurrentEntities()[i].getxPos() + 32); - arrow.setyPos(d.getCurrentEntities()[i].getyPos() + 32); d.getCurrentEntities()[k] = arrow; gs.generateNewEntitySprite(arrow, k); gs.entitySprites[i].resetAttackState(); diff --git a/core/src/com/dungeoncrawler/model/Entity.java b/core/src/com/dungeoncrawler/model/Entity.java index 372f7d1..9206a7c 100644 --- a/core/src/com/dungeoncrawler/model/Entity.java +++ b/core/src/com/dungeoncrawler/model/Entity.java @@ -11,6 +11,7 @@ public abstract class Entity { protected float movementX; protected float movementY; protected int id; + protected int type; protected int direction; protected Inventory inv; private boolean toDelete; @@ -177,5 +178,12 @@ public abstract class Entity { public void setToDelete(boolean toDelete) { this.toDelete = toDelete; } + + /** + * @return the type + */ + public int getType() { + return type; + } } \ 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 10e76f6..4af036b 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -14,6 +14,7 @@ public class Archer extends Entity{ this.direction = 2; this.dmg = 3*lvl; this.id = 0; + this.type = 1; counter = 0; // TODO: Sinnvolle Werte finden @@ -113,7 +114,7 @@ public class Archer extends Entity{ alpha = 2*Math.PI - alpha; } } - a = new Arrow(this.xPos, this.yPos, this.lvl, 0); + a = new Arrow(this.xPos + 32, this.yPos + 32, this.lvl, 0); movementX = (int) (6 * Math.cos(alpha)); movementY = (int) (6 * Math.sin(alpha)); diff --git a/core/src/com/dungeoncrawler/model/entities/Arrow.java b/core/src/com/dungeoncrawler/model/entities/Arrow.java index d79e919..9374f04 100644 --- a/core/src/com/dungeoncrawler/model/entities/Arrow.java +++ b/core/src/com/dungeoncrawler/model/entities/Arrow.java @@ -21,6 +21,7 @@ public class Arrow extends Entity{ this.direction = direction; this.dmg = 3*lvl; this.id = 2; + type = 2; this.lifetime = 0; } diff --git a/core/src/com/dungeoncrawler/model/entities/Player.java b/core/src/com/dungeoncrawler/model/entities/Player.java index 9a42e0c..2aca959 100644 --- a/core/src/com/dungeoncrawler/model/entities/Player.java +++ b/core/src/com/dungeoncrawler/model/entities/Player.java @@ -27,6 +27,7 @@ public class Player extends Entity { this.dmg = 3*lvl; this.standartDmg = dmg; id = -1; + type = -1; inv = new Inventory(3,2); // TODO: Sinnvolle Werte finden diff --git a/core/src/com/dungeoncrawler/model/entities/Swordsman.java b/core/src/com/dungeoncrawler/model/entities/Swordsman.java index 586fa64..3b9d5bc 100644 --- a/core/src/com/dungeoncrawler/model/entities/Swordsman.java +++ b/core/src/com/dungeoncrawler/model/entities/Swordsman.java @@ -12,6 +12,7 @@ public class Swordsman extends Entity { this.direction = 2; this.dmg = 3*lvl; this.id = 1; + this.type = 0; // TODO: Sinnvolle Werte finden direction = 2;