From 8ebb0e310160199687dd98fbbe68a6e98813ad1f Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sun, 3 May 2020 19:22:56 +0200 Subject: [PATCH 1/2] 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; } From b8248eae656f12da7d905331ef77b732b9b4cf32 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sun, 3 May 2020 20:25:00 +0200 Subject: [PATCH 2/2] =?UTF-8?q?fa=C3=B6lkdjsf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/assets/sprites/arrow.png | Bin 644 -> 769 bytes core/src/com/dungeoncrawler/model/Entity.java | 15 +++++++++++++++ .../dungeoncrawler/model/entities/Archer.java | 1 + .../com/dungeoncrawler/view/EntitySprite.java | 14 +++++++------- .../src/com/dungeoncrawler/view/GameScreen.java | 12 +++++++++--- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/core/assets/sprites/arrow.png b/core/assets/sprites/arrow.png index e2ebc188b721db2372389033b299dc4a6a5e97b0..c83789753cca1586a20bf51f36d94eff6cfa7262 100644 GIT binary patch delta 744 zcmVCiBL{Q4GJ0x0000DNk~Le0002A000092nGNE0GpWxnE(I*i)lkc zP)A8kP#|J;X>4>YX>K5MQb$4n04R}tkv&MmKpe$iQ%j3fMC>5qkfAzR5G~>;RV;#q z(pG5I!Q|2}XktiGTpR`0f`cE6RRs^dzd7t}p^eIJ? z0X~st?f%Ws^^4huXpV&pPUe#+{JPi zvx=b-$BCnVimFk*kat<(yv13q)mi(V{DtA7ww&cU%@HKAh!oNgA)}5eYOoNaRU^ej zhV~O4{$alp5;|KqP-`$#}sYy2}oB#qZw*4^*1b2Z}!?wSVZM$^> z_@99*t>fQl0yCeaH#%DM2!IDG(e)YZ}raBv8Wl_`78j5K~z|U?bbg^#6T2)@$bzLl}zOcEG)c(osF6 z#3B+{Z(!>&wz0Jk#6LL3%(GaGE~HP2_rbsnJbu*-3|N+BS<6gV1tmCm`i9`P>+V&i zhP$rQ-+fUOyEEpPvj9f`j?RyjTp$NNfE*rgH=jJ|;yjuL4l)_{ad2oF0Jyqd6Jx}Ck8_Tc5;vC@m}Ab|&i3}71tkc)E5roB!~NUj z%V?TLvn&Ik?|aI!{F^h!oS7ZrbWeFv*cXTjhXM~@lSp0H%H9#v5n{4)q=Y0000y|v^ZEn#34gfPgTqgAz0KWM(l7&+&B+AK&j{Jj=W8&k0X4BF+?-NH@SyG74iN_7PAn_yDWtZPLmmC&&X2i&*=ZPc4VyTPeE@ovzC7vdZ zDyl~LLe6D>h4U6?wOVKGd-4~C3ffAB>oiA@z!H*3L4=GtDyYIjjCPF_6KOh+d-#VP ze~Mf(xhi1fSU?RbB*zc_2fur37N;iNq);3Pyx8`~C=lEQS`FL&KDO=F3E+PQuC$K7 z)&yohNpEzt=n>Gr4P0DzGDYDGy0}HFmMa>t+{<`pX2la z$WpJCZ-9eCV5~&h>mKj!?e5#ZHSPZW0R0JacneD`Bme*a24YJ`L;yGdH~=_mXheX-2oVITS-JgR7l5TWFP?EF);kcCojanz=%(tkz9j`wTO{Yg9%y0NKM1BS;9zd z!_h5aVxTc#q=oB|eL;I4(8~2NKyx3AS}mjN0P TJdE#?00000NkvXXu0mjfDdGfQ diff --git a/core/src/com/dungeoncrawler/model/Entity.java b/core/src/com/dungeoncrawler/model/Entity.java index 11b45c5..abda571 100644 --- a/core/src/com/dungeoncrawler/model/Entity.java +++ b/core/src/com/dungeoncrawler/model/Entity.java @@ -18,6 +18,7 @@ public abstract class Entity { protected int direction; protected Inventory inv; protected boolean toDelete; + private double angle; @@ -152,5 +153,19 @@ public abstract class Entity { public boolean getToDelete(){ return this.toDelete; } + + /** + * @return the angle + */ + public double getAngle() { + return angle; + } + + /** + * @param angle the angle to set + */ + public void setAngle(double angle) { + this.angle = angle; + } } \ 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 86f6412..bb1f123 100644 --- a/core/src/com/dungeoncrawler/model/entities/Archer.java +++ b/core/src/com/dungeoncrawler/model/entities/Archer.java @@ -108,6 +108,7 @@ public class Archer extends Entity{ a.setMovementX(movementX); a.setMovementY(movementY); + a.setAngle(alpha); return a; } diff --git a/core/src/com/dungeoncrawler/view/EntitySprite.java b/core/src/com/dungeoncrawler/view/EntitySprite.java index 234a7a2..d68f2a9 100644 --- a/core/src/com/dungeoncrawler/view/EntitySprite.java +++ b/core/src/com/dungeoncrawler/view/EntitySprite.java @@ -27,7 +27,7 @@ public class EntitySprite { // 0: links, 1: rechts private int direction; - public EntitySprite(Texture[] textures){ + public EntitySprite(Texture[] textures, int width, int height){ sprites = new Sprite[1]; regions = new TextureRegion[1][][]; @@ -36,12 +36,12 @@ public class EntitySprite { direction = 0; attackState = 0; - for(int i = 0; i < regions.length; i++){ - regions[i] = TextureRegion.split(textures[i], 64, 64); + for(int i = 0; i < sprites.length; i++){ + regions[i] = TextureRegion.split(textures[i], width, height); sprites[i] = new Sprite(regions[i][0][0]); + collisionSprite = new Rectangle(0, 0, 32, 16); } - - collisionSprite = new Rectangle(0, 0, 32, 16); + fullCollisionSprite = sprites[0].getBoundingRectangle(); } @@ -84,7 +84,7 @@ public class EntitySprite { frames[0]++; } - sprites[0].setRegion(regions[0][0][frames[0]]); + sprites[0].setRegion(regions[0][2][frames[0]]); updateFlip(); } @@ -99,7 +99,7 @@ public class EntitySprite { frames[1]++; } - sprites[0].setRegion(regions[0][2][frames[1]]); + sprites[0].setRegion(regions[0][0][frames[1]]); updateFlip(); } diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index 0db65cf..f9afcf9 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -83,7 +83,7 @@ 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 EntitySprite(playerTexture); + player = new EntitySprite(playerTexture, 64, 64); player.update(200, 200); @@ -279,16 +279,22 @@ public class GameScreen { Texture[] tx = new Texture[1]; if(e.getId() == 0){ //nimmt entity ID -> 0 = Archer || 1 = Swordsman || 2 = Arrow tx[0] = new Texture("sprites/archer.png"); + entitySprites[i] = new EntitySprite(tx, 64, 64); } if(e.getId() == 1){ tx[0] = new Texture("sprites/swordsman.png"); + entitySprites[i] = new EntitySprite(tx, 64, 64); } if(e.getId() == 2){ - tx[0] = new Texture("sprites/player.png"); + tx[0] = new Texture("sprites/arrow.png"); + entitySprites[i] = new EntitySprite(tx, 18, 9); } - entitySprites[i] = new EntitySprite(tx); entitySprites[i].update((int) e.getxPos(), (int) e.getyPos()); + + if(e.getId() == 2){ + entitySprites[i].getSprites()[0].setRotation((float) Math.toDegrees(e.getAngle() + Math.PI)); + } } }