From 8ebb0e310160199687dd98fbbe68a6e98813ad1f Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sun, 3 May 2020 19:22:56 +0200 Subject: [PATCH] funzt --- .../dungeoncrawler/control/Controller.java | 8 +-- core/src/com/dungeoncrawler/model/Entity.java | 14 +++--- .../dungeoncrawler/model/entities/Archer.java | 50 +++++++++++++++---- .../dungeoncrawler/model/entities/Arrow.java | 4 +- .../dungeoncrawler/model/entities/Player.java | 4 +- .../model/entities/Swordsman.java | 5 +- 6 files changed, 56 insertions(+), 29 deletions(-) diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index f733a5e..159fae1 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -117,8 +117,9 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ int x = (int) temp.getxPos(); int y = (int) temp.getyPos(); - Entity arrow = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); - if(arrow != null && gs.entitySprites[i].getAttackState() == 0){ + boolean attacks = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); + + if(attacks && gs.entitySprites[i].getAttackState() == 0){ gs.entitySprites[i].startAttack(); } @@ -188,9 +189,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ gs.entitySprites[i] = tempObject; - if(arrow != null && gs.entitySprites[i].getAttackState() == 2){ + if(d.getCurrentEntities()[i].getId() == 0 && gs.entitySprites[i].getAttackState() == 2){ 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()); 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 dd0d4de..11b45c5 100644 --- a/core/src/com/dungeoncrawler/model/Entity.java +++ b/core/src/com/dungeoncrawler/model/Entity.java @@ -39,6 +39,11 @@ public abstract class Entity { e.setHp(e.getHp() - this.dmg); } } + + public Entity shoot(int xPosPlayer, int yPosPlayer){ + return null; + } + public void update(){ xPos += movementX; yPos += movementY; @@ -56,12 +61,7 @@ public abstract class Entity { public void die(){ } - public void move(){ - xPos = xPos + movementX; - yPos = yPos + movementY; - movementX = 0; - movementY = 0; - } + abstract public boolean move(int xPosPlayer, int yPosPlayer); public void updateDirection(){ if(movementX > 1){ @@ -72,8 +72,6 @@ public abstract class Entity { } } - abstract public Entity move(int xPosPlayer, int yPosPlayer); - // GETTER + SETTER public float getxPos() { return xPos; diff --git a/core/src/com/dungeoncrawler/model/entities/Archer.java b/core/src/com/dungeoncrawler/model/entities/Archer.java index 1a9bf3a..86f6412 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -22,7 +22,7 @@ public class Archer extends Entity{ } @Override - public Entity move(int xPosPlayer, int yPosPlayer) { + public boolean move(int xPosPlayer, int yPosPlayer) { float deltaX = xPosPlayer - (int) xPos; float deltaY = yPosPlayer - (int) yPos; @@ -49,15 +49,8 @@ public class Archer extends Entity{ int distance = (int) Math.abs((deltaY / Math.sin(alpha))); - Arrow a = null; if(distance >= 104 && distance <= 184 && counter % 40 == 0){ - a = new Arrow(this.xPos, this.yPos, this.lvl, 0); - - movementX = (int) (4 * Math.cos(alpha)); - movementY = (int) (4 * Math.sin(alpha)); - - a.setMovementX(movementX); - a.setMovementY(movementY); + return true; } else{ movementX = (int) (3 * Math.cos(alpha)); @@ -79,9 +72,44 @@ public class Archer extends Entity{ } counter++; - return a; + + return false; } - + @Override + public Entity shoot(int xPosPlayer, int yPosPlayer){ + + float deltaX = xPosPlayer - (int) xPos; + float deltaY = yPosPlayer - (int) yPos; + + double alpha; + 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; + } + } + Arrow a = new Arrow(this.xPos, this.yPos, this.lvl, 0); + movementX = (int) (5 * Math.cos(alpha)); + movementY = (int) (5 * Math.sin(alpha)); + + a.setMovementX(movementX); + a.setMovementY(movementY); + + return a; + } } diff --git a/core/src/com/dungeoncrawler/model/entities/Arrow.java b/core/src/com/dungeoncrawler/model/entities/Arrow.java index 5b4b8c6..a8973bf 100644 --- a/core/src/com/dungeoncrawler/model/entities/Arrow.java +++ b/core/src/com/dungeoncrawler/model/entities/Arrow.java @@ -32,7 +32,7 @@ public class Arrow extends Entity{ } @Override - public Entity move(int xPosPlayer, int yPosPlayer) { + public boolean move(int xPosPlayer, int yPosPlayer) { lifetime++; xPos += movementX; @@ -42,6 +42,6 @@ public class Arrow extends Entity{ this.toDelete = true; } - return null; + return false; } } diff --git a/core/src/com/dungeoncrawler/model/entities/Player.java b/core/src/com/dungeoncrawler/model/entities/Player.java index 691265a..9a42e0c 100644 --- a/core/src/com/dungeoncrawler/model/entities/Player.java +++ b/core/src/com/dungeoncrawler/model/entities/Player.java @@ -50,8 +50,8 @@ public class Player extends Entity { } } - public Entity move(int x, int y){ - return null; + public boolean move(int x, int y){ + return false; } diff --git a/core/src/com/dungeoncrawler/model/entities/Swordsman.java b/core/src/com/dungeoncrawler/model/entities/Swordsman.java index 23cbb9d..9b2b982 100644 --- a/core/src/com/dungeoncrawler/model/entities/Swordsman.java +++ b/core/src/com/dungeoncrawler/model/entities/Swordsman.java @@ -18,7 +18,7 @@ public class Swordsman extends Entity { } @Override - public Entity move(int xPosPlayer, int yPosPlayer){ + public boolean move(int xPosPlayer, int yPosPlayer){ float deltaX = xPosPlayer - (int) xPos; float deltaY = yPosPlayer - (int) yPos; @@ -49,8 +49,7 @@ public class Swordsman extends Entity { xPos += movementX; yPos += movementY; - System.out.println("Winkel: " + Math.toDegrees(alpha)); - return null; + return false; }