From 8ecd09deb40b4d12006a6a92b1f97f63e9d859fd Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sat, 2 May 2020 00:20:26 +0200 Subject: [PATCH 1/3] =?UTF-8?q?zur=C3=BCckgesetzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dungeoncrawler/control/Controller.java | 11 ++++ core/src/com/dungeoncrawler/model/Entity.java | 2 +- .../dungeoncrawler/model/entities/Archer.java | 66 ++++++++++++++++++- .../dungeoncrawler/model/entities/Arrow.java | 7 +- .../dungeoncrawler/model/entities/Player.java | 4 +- .../model/entities/Swordsman.java | 4 +- 6 files changed, 86 insertions(+), 8 deletions(-) diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 5e20ea7..cefbce2 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -131,6 +131,17 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ break; } } + + for(int j = 0; j < m.entitySprites.length; j++){ + if(i != j){ + if(m.entitySprites[j] != null /*&& d.getCurrentEntities().get(j).getId() != 2*/){ + if(Intersector.overlaps(tempObject.getBoundingRectangle(), m.entitySprites[j].getBoundingRectangle())){ + overlaps = true; + break; + } + } + } + } } if(overlaps){ diff --git a/core/src/com/dungeoncrawler/model/Entity.java b/core/src/com/dungeoncrawler/model/Entity.java index 80b4d17..46047ce 100644 --- a/core/src/com/dungeoncrawler/model/Entity.java +++ b/core/src/com/dungeoncrawler/model/Entity.java @@ -65,7 +65,7 @@ public abstract class Entity { } } - abstract public void move(int xPosPlayer, int yPosPlayer); + abstract public Entity move(int xPosPlayer, int yPosPlayer); // GETTER + SETTER public float getxPos() { diff --git a/core/src/com/dungeoncrawler/model/entities/Archer.java b/core/src/com/dungeoncrawler/model/entities/Archer.java index f36509c..2ca75d1 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -4,6 +4,8 @@ import com.dungeoncrawler.model.Entity; public class Archer extends Entity{ + int counter; + public Archer(float xPos, float yPos, int lvl) { super(xPos, yPos, lvl); @@ -12,6 +14,7 @@ public class Archer extends Entity{ this.direction = 2; this.dmg = 3*lvl; this.id = 0; + counter = 0; // TODO: Sinnvolle Werte finden direction = 2; @@ -19,8 +22,67 @@ public class Archer extends Entity{ } @Override - public void move(int xPosPlayer, int yPosPlayer) { - // Nothing + public Entity move(int xPosPlayer, int yPosPlayer) { + int deltaX = xPosPlayer - (int) xPos; + int 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; + } + } + + int distance = (int) Math.abs((deltaY / Math.sin(alpha))); + + Arrow a = null; + if(distance >= 124 && distance <= 164 && counter % 10 == 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); + } + else{ + movementX = (int) (3 * Math.cos(alpha)); + movementY = (int) (3 * Math.sin(alpha)); + + System.out.println(distance); + if(distance < 124){ + movementX *= -1; + movementY *= -1; + } + else if(distance >= 124/* && distance <= 164*/){ + movementX = 0; + movementY = 0; + } + else if(distance > 164){ + + } + + + xPos += movementX; + yPos += movementY; + } + + counter++; + return a; } diff --git a/core/src/com/dungeoncrawler/model/entities/Arrow.java b/core/src/com/dungeoncrawler/model/entities/Arrow.java index 95b40e6..598d4e6 100644 --- a/core/src/com/dungeoncrawler/model/entities/Arrow.java +++ b/core/src/com/dungeoncrawler/model/entities/Arrow.java @@ -31,7 +31,10 @@ public class Arrow extends Entity{ } @Override - public void move(int xPosPlayer, int yPosPlayer) { - // Nothing + public Entity move(int xPosPlayer, int yPosPlayer) { + xPos += movementX; + yPos += movementY; + + return null; } } diff --git a/core/src/com/dungeoncrawler/model/entities/Player.java b/core/src/com/dungeoncrawler/model/entities/Player.java index 6c417d8..7085061 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 void move(int x, int y){ - + public Entity move(int x, int y){ + return null; } diff --git a/core/src/com/dungeoncrawler/model/entities/Swordsman.java b/core/src/com/dungeoncrawler/model/entities/Swordsman.java index 3baa52f..e8278a7 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 void move(int xPosPlayer, int yPosPlayer){ + public Entity move(int xPosPlayer, int yPosPlayer){ int deltaX = xPosPlayer - (int) xPos; int deltaY = yPosPlayer - (int) yPos; @@ -48,6 +48,8 @@ public class Swordsman extends Entity { xPos += movementX; yPos += movementY; + + return null; } From 758d9c70595a46881a47470be498a157df6a7863 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sat, 2 May 2020 00:52:14 +0200 Subject: [PATCH 2/3] so halb --- .../dungeoncrawler/control/Controller.java | 91 +++++++++++-------- .../model/DungeonGenerator.java | 2 +- .../dungeoncrawler/model/entities/Archer.java | 2 +- .../com/dungeoncrawler/view/GameScreen.java | 51 ++++++----- .../desktop/DesktopLauncher.java | 2 +- 5 files changed, 88 insertions(+), 60 deletions(-) diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index cefbce2..4554221 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -102,51 +102,70 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ entityMovement.scheduleTask(new Timer.Task() { @Override public void run() { - for(int i = 0; i < d.getCurrentEntities().length; i++){ - if(d.getCurrentEntities()[i] != null){ - if(m != null){ - // Gets the collisions relevant sprites - MapObjects mapObjects = m.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(0).getObjects(); - Rectangle playerSprite = m.getPlayer().getCollisionSprite(); + if(m != null){ + m.updateEntitySprite(d.getCurrentEntities()); - Entity temp = d.getCurrentEntities()[i]; + for(int i = 0; i < d.getCurrentEntities().length; i++){ + if(d.getCurrentEntities()[i] != null){ + // Gets the collisions relevant sprites + MapObjects mapObjects = m.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(0).getObjects(); + Rectangle playerSprite = m.getPlayer().getCollisionSprite(); - int x = (int) temp.getxPos(); - int y = (int) temp.getyPos(); + Entity temp = d.getCurrentEntities()[i]; - d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); - Sprite tempObject = m.entitySprites[i]; + int x = (int) temp.getxPos(); + int y = (int) temp.getyPos(); + Entity test = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); + Sprite tempObject = m.entitySprites[i]; + tempObject.setPosition(temp.getxPos(), temp.getyPos()); - boolean overlaps = false; - if(Intersector.overlaps(tempObject.getBoundingRectangle(), playerSprite)){ - overlaps = true; - } - else{ - for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){ - Rectangle rectangle = rectangleObject.getRectangle(); - if(Intersector.overlaps(tempObject.getBoundingRectangle(), rectangle)){ - overlaps = true; - break; + boolean overlaps = false; + if(Intersector.overlaps(tempObject.getBoundingRectangle(), playerSprite)){ + overlaps = true; + } + else{ + for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){ + Rectangle rectangle = rectangleObject.getRectangle(); + + if(Intersector.overlaps(tempObject.getBoundingRectangle(), rectangle)){ + overlaps = true; + break; + } } + + if(d.getCurrentEntities()[i].getId() != 2){ + 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())){ + overlaps = true; + break; + } + } + } + } + } + } - - for(int j = 0; j < m.entitySprites.length; j++){ - if(i != j){ - if(m.entitySprites[j] != null /*&& d.getCurrentEntities().get(j).getId() != 2*/){ - if(Intersector.overlaps(tempObject.getBoundingRectangle(), m.entitySprites[j].getBoundingRectangle())){ - overlaps = true; - break; - } - } - } - } - } - if(overlaps){ - d.getCurrentEntities()[i].setxPos(x); - d.getCurrentEntities()[i].setyPos(y); + if(overlaps){ + d.getCurrentEntities()[i].setxPos(x); + d.getCurrentEntities()[i].setyPos(y); + + tempObject.setPosition(x, y); + } + + m.entitySprites[i] = tempObject; + + if(test != null){ + for(int k = 5; k < d.getCurrentEntities().length; k++){ + if(d.getCurrentEntities()[k] == null){ + d.getCurrentEntities()[k] = test; + m.updateEntitySprite(d.getCurrentEntities()); + } + } } } } diff --git a/core/src/com/dungeoncrawler/model/DungeonGenerator.java b/core/src/com/dungeoncrawler/model/DungeonGenerator.java index 7ab7061..e0403a5 100644 --- a/core/src/com/dungeoncrawler/model/DungeonGenerator.java +++ b/core/src/com/dungeoncrawler/model/DungeonGenerator.java @@ -144,7 +144,7 @@ public class DungeonGenerator { int itemAmount = (int) (Math.random() * 2); int enemyAmount = (int) (Math.random() * 6); - Room tempRoom = new Room(new ArrayList(itemAmount), new Entity[enemyAmount]); + Room tempRoom = new Room(new ArrayList(itemAmount), new Entity[15]); // Items werden generiert int[][] belegt = new int[itemAmount][2]; diff --git a/core/src/com/dungeoncrawler/model/entities/Archer.java b/core/src/com/dungeoncrawler/model/entities/Archer.java index 2ca75d1..a6a8f9a 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -50,7 +50,7 @@ public class Archer extends Entity{ int distance = (int) Math.abs((deltaY / Math.sin(alpha))); Arrow a = null; - if(distance >= 124 && distance <= 164 && counter % 10 == 0){ + if(distance >= 124 && distance <= 164 || counter % 30 == 0){ a = new Arrow(this.xPos, this.yPos, this.lvl, 0); movementX = (int) (4 * Math.cos(alpha)); diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index 801a5ee..7c09d8b 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -90,7 +90,7 @@ public class GameScreen { //ENTITIES entityTextures = new Texture[5]; - entitySprites = new Sprite[5]; + entitySprites = new Sprite[15]; arrowTextures = new Texture[10]; arrowSprites = new Sprite[10]; @@ -231,26 +231,9 @@ public class GameScreen { camera.update(); batch.setProjectionMatrix(camera.combined); - 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()); - } - } - } - + + updateEntitySprite(e); //BATCH @@ -351,7 +334,33 @@ public class GameScreen { batch.end(); } - + public void updateEntitySprite(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/sword.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()); + } + } + } + } public Entity[] playerAttack(Entity e[], Player p, SpriteBatch batch){ diff --git a/desktop/src/com/dungeoncrawler/desktop/DesktopLauncher.java b/desktop/src/com/dungeoncrawler/desktop/DesktopLauncher.java index 3cce47f..581ac5d 100644 --- a/desktop/src/com/dungeoncrawler/desktop/DesktopLauncher.java +++ b/desktop/src/com/dungeoncrawler/desktop/DesktopLauncher.java @@ -15,6 +15,6 @@ public class DesktopLauncher { config.resizable = true; //config.addIcon("logo.png", Files.FileType.Internale); - new LwjglApplication(new Controller(), config); + new LwjglApplication(new Controller(), config); } } From f1b8af631cedc2adbc142b15fb090040519c49ee Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sat, 2 May 2020 11:37:26 +0200 Subject: [PATCH 3/3] ultra hardcore mechanics --- .../dungeoncrawler/control/Controller.java | 27 ++++++++++++++----- core/src/com/dungeoncrawler/model/Entity.java | 27 +++++++++++-------- .../dungeoncrawler/model/entities/Archer.java | 11 +++----- .../dungeoncrawler/model/entities/Player.java | 8 +++--- .../model/entities/Swordsman.java | 5 ++-- 5 files changed, 47 insertions(+), 31 deletions(-) diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 4554221..e1d7c02 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -103,7 +103,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ @Override public void run() { if(m != null){ - m.updateEntitySprite(d.getCurrentEntities()); + //m.updateEntitySprite(d.getCurrentEntities()); for(int i = 0; i < d.getCurrentEntities().length; i++){ if(d.getCurrentEntities()[i] != null){ @@ -116,14 +116,19 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ int x = (int) temp.getxPos(); int y = (int) temp.getyPos(); - Entity test = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().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()); boolean overlaps = false; + boolean delete = false; if(Intersector.overlaps(tempObject.getBoundingRectangle(), playerSprite)){ overlaps = true; + if(d.getCurrentEntities()[i].getId() == 2){ + d.getCurrentEntities()[i].attack(d.getPlayer()); + delete = true; + } } else{ for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){ @@ -131,6 +136,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(Intersector.overlaps(tempObject.getBoundingRectangle(), rectangle)){ overlaps = true; + delete = true; break; } } @@ -159,17 +165,24 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ m.entitySprites[i] = tempObject; - if(test != null){ + if(arrow != null){ for(int k = 5; k < d.getCurrentEntities().length; k++){ if(d.getCurrentEntities()[k] == null){ - d.getCurrentEntities()[k] = test; + d.getCurrentEntities()[k] = arrow; m.updateEntitySprite(d.getCurrentEntities()); + break; } } + } + + if(delete && d.getCurrentEntities()[i].getId() == 2){ + d.getCurrentEntities()[i] = null; + m.updateEntitySprite(d.getCurrentEntities()); + + } } - } - } - } + } + } } },0, 0.03f); diff --git a/core/src/com/dungeoncrawler/model/Entity.java b/core/src/com/dungeoncrawler/model/Entity.java index 46047ce..01b36d6 100644 --- a/core/src/com/dungeoncrawler/model/Entity.java +++ b/core/src/com/dungeoncrawler/model/Entity.java @@ -8,9 +8,9 @@ public abstract class Entity { protected float xPos; protected float yPos; - protected int hp; - protected int maxhp; - protected int dmg; + protected float hp; + protected float maxhp; + protected float dmg; protected int lvl; protected float movementX; protected float movementY; @@ -29,8 +29,13 @@ public abstract class Entity { this.direction = 2; } - public void attack(){ - + public void attack(Entity e){ + if(e.getHp() - this.dmg < 0){ + e.setHp(1); + } + else{ + e.setHp(e.getHp() - this.dmg); + } } public void update(){ xPos += movementX; @@ -84,27 +89,27 @@ public abstract class Entity { this.yPos = yPos; } - public int getHp() { + public float getHp() { return hp; } - public void setHp(int hp) { + public void setHp(float hp) { this.hp = hp; } - public int getMaxhp() { + public float getMaxhp() { return maxhp; } - public void setMaxhp(int maxhp) { + public void setMaxhp(float maxhp) { this.maxhp = maxhp; } - public int getDmg() { + public float getDmg() { return dmg; } - public void setDmg(int dmg) { + public void setDmg(float dmg) { this.dmg = dmg; } diff --git a/core/src/com/dungeoncrawler/model/entities/Archer.java b/core/src/com/dungeoncrawler/model/entities/Archer.java index a6a8f9a..51687d9 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -23,8 +23,8 @@ public class Archer extends Entity{ @Override public Entity move(int xPosPlayer, int yPosPlayer) { - int deltaX = xPosPlayer - (int) xPos; - int deltaY = yPosPlayer - (int) yPos; + float deltaX = xPosPlayer - (int) xPos; + float deltaY = yPosPlayer - (int) yPos; double alpha; if(deltaX == 0 && deltaY >= 0){ @@ -50,7 +50,7 @@ public class Archer extends Entity{ int distance = (int) Math.abs((deltaY / Math.sin(alpha))); Arrow a = null; - if(distance >= 124 && distance <= 164 || counter % 30 == 0){ + if(distance >= 124 && distance <= 164 && counter % 60 == 0){ a = new Arrow(this.xPos, this.yPos, this.lvl, 0); movementX = (int) (4 * Math.cos(alpha)); @@ -68,13 +68,10 @@ public class Archer extends Entity{ movementX *= -1; movementY *= -1; } - else if(distance >= 124/* && distance <= 164*/){ + else if(distance >= 124 && distance <= 164){ movementX = 0; movementY = 0; } - else if(distance > 164){ - - } xPos += movementX; diff --git a/core/src/com/dungeoncrawler/model/entities/Player.java b/core/src/com/dungeoncrawler/model/entities/Player.java index 7085061..691265a 100644 --- a/core/src/com/dungeoncrawler/model/entities/Player.java +++ b/core/src/com/dungeoncrawler/model/entities/Player.java @@ -14,18 +14,18 @@ import com.dungeoncrawler.model.Item; */ public class Player extends Entity { - int standartDmg; - int standartMaxHp; + float standartDmg; + float standartMaxHp; public Player() { super(200, 200, 1); - this.maxhp = 5 * (lvl + 1); + this.maxhp = 20 * (lvl + 1); this.hp = this.maxhp; this.standartMaxHp = 5 * (lvl + 1); this.dmg = 3*lvl; - this.standartDmg = dmg = 3*lvl; + this.standartDmg = dmg; id = -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 e8278a7..23cbb9d 100644 --- a/core/src/com/dungeoncrawler/model/entities/Swordsman.java +++ b/core/src/com/dungeoncrawler/model/entities/Swordsman.java @@ -19,8 +19,8 @@ public class Swordsman extends Entity { @Override public Entity move(int xPosPlayer, int yPosPlayer){ - int deltaX = xPosPlayer - (int) xPos; - int deltaY = yPosPlayer - (int) yPos; + float deltaX = xPosPlayer - (int) xPos; + float deltaY = yPosPlayer - (int) yPos; double alpha; if(deltaX == 0 && deltaY >= 0){ @@ -49,6 +49,7 @@ public class Swordsman extends Entity { xPos += movementX; yPos += movementY; + System.out.println("Winkel: " + Math.toDegrees(alpha)); return null; }