Gegner Kollisionen funktionieren

master
Jonathan Hager 6 years ago
parent 29d35fc1eb
commit 5e4265151d

@ -13,6 +13,7 @@ import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.maps.MapLayers; import com.badlogic.gdx.maps.MapLayers;
import com.badlogic.gdx.maps.MapObject;
import com.badlogic.gdx.maps.MapObjects; import com.badlogic.gdx.maps.MapObjects;
import com.badlogic.gdx.maps.objects.RectangleMapObject; import com.badlogic.gdx.maps.objects.RectangleMapObject;
import com.badlogic.gdx.math.Intersector; import com.badlogic.gdx.math.Intersector;
@ -104,9 +105,41 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
public void run() { public void run() {
for(int i = 0; i < d.getCurrentEntities().length; i++){ for(int i = 0; i < d.getCurrentEntities().length; i++){
if(d.getCurrentEntities()[i] != null){ if(d.getCurrentEntities()[i] != null){
//d.getCurrentEntities()[i].randomMove(roomX, roomY); if(m != null){
d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); // Gets the collisions relevant sprites
} MapObjects mapObjects = m.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(0).getObjects();
Rectangle playerSprite = m.getPlayer().getCollisionSprite();
Entity temp = d.getCurrentEntities()[i];
int x = (int) temp.getxPos();
int y = (int) temp.getyPos();
d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos());
Sprite tempObject = m.entitySprites[i];
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(overlaps){
d.getCurrentEntities()[i].setxPos(x);
d.getCurrentEntities()[i].setyPos(y);
}
}
}
} }
} }
},0, 0.03f); },0, 0.03f);

@ -1,5 +1,9 @@
package com.dungeoncrawler.model; package com.dungeoncrawler.model;
import com.badlogic.gdx.maps.MapObject;
import com.badlogic.gdx.maps.MapObjects;
import com.badlogic.gdx.math.Rectangle;
public abstract class Entity { public abstract class Entity {
protected float xPos; protected float xPos;
@ -61,6 +65,7 @@ public abstract class Entity {
} }
} }
abstract public void move(int xPosPlayer, int yPosPlayer);
// GETTER + SETTER // GETTER + SETTER
public float getxPos() { public float getxPos() {
@ -139,10 +144,4 @@ public abstract class Entity {
this.direction = direction; this.direction = direction;
} }
public void randomMove(int x, int y){
}
abstract public void move(int xPosPlayer, int yPosPlayer);
} }

@ -1,17 +1,9 @@
package com.dungeoncrawler.model.entities; package com.dungeoncrawler.model.entities;
import com.dungeoncrawler.model.Entity; import com.dungeoncrawler.model.Entity;
import com.badlogic.gdx.utils.Timer;
public class Archer extends Entity{ public class Archer extends Entity{
Timer tup;
Timer tright;
Timer tdown;
Timer tleft;
int timerRuns;
boolean isRunning;
public Archer(float xPos, float yPos, int lvl) { public Archer(float xPos, float yPos, int lvl) {
super(xPos, yPos, lvl); super(xPos, yPos, lvl);
@ -22,135 +14,8 @@ public class Archer extends Entity{
this.id = 0; this.id = 0;
// TODO: Sinnvolle Werte finden // TODO: Sinnvolle Werte finden
tup = new Timer();
tright = new Timer();
tdown = new Timer();
tleft = new Timer();
isRunning = false;
timerRuns = 0;
direction = 2; direction = 2;
tup.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(0);
setyPos(getyPos() + 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tup.stop();
}
}
},0,0.015f);
tup.stop();
tright.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(1);
setxPos(getxPos() + 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tright.stop();
}
}
},0,0.015f);
tright.stop();
tdown.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(2);
setyPos(getyPos() - 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tdown.stop();
}
}
},0,0.015f);
tdown.stop();
tleft.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(3);
setxPos(getxPos() - 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tleft.stop();
}
}
},0,0.015f);
tleft.stop();
}
@Override
public void randomMove(int x, int y) {
double i = Math.random();
if(i <= 0.2){
if(isRunning == false){
if(getyPos() >= (x-1) * 48f){
}
else{
setIsRunning(true);
tup.start();
}
}
}
else if(i > 0.2 && i <= 0.4){
if(isRunning == false){
if(getxPos() >= (y-1) * 48f){
}
else{
setIsRunning(true);
tright.start();
}
}
}
else if(i > 0.4 && i <= 0.6){
if(isRunning == false){
if(getyPos() <= 48f){
}
else{
setIsRunning(true);
tdown.start();
}
}
}
else if(i > 0.6 && i <= 0.8){
if(isRunning == false){
if(getxPos() <= 48f){
}
else{
setIsRunning(true);
tleft.start();
}
}
}
else{
}
}
private void setIsRunning(boolean n){
isRunning = n;
}
private boolean getIsRunning(){
return isRunning;
}
public int getTimerRuns(){
return timerRuns;
}
public void setTimerRuns(int n){
timerRuns = n;
} }
@Override @Override

@ -6,14 +6,9 @@
package com.dungeoncrawler.model.entities; package com.dungeoncrawler.model.entities;
import com.dungeoncrawler.model.Entity; import com.dungeoncrawler.model.Entity;
import com.badlogic.gdx.utils.Timer;
public class Arrow extends Entity{ public class Arrow extends Entity{
Timer toben;
Timer tunten;
Timer trechts;
Timer tlinks;
float xStart; float xStart;
float yStart; float yStart;
int direction; int direction;
@ -22,61 +17,11 @@ public class Arrow extends Entity{
super(xPos, yPos, lvl); super(xPos, yPos, lvl);
xStart = xPos; xStart = xPos;
yStart = yPos; yStart = yPos;
Timer toben = new Timer();
Timer tunten = new Timer();
Timer trechts = new Timer();
Timer tlinks = new Timer();
this.direction = direction; this.direction = direction;
this.dmg = 3*lvl; this.dmg = 3*lvl;
this.id = 2; this.id = 2;
toben.scheduleTask(new Timer.Task() { }
@Override
public void run() {
setyPos(getyPos() + 3f);
}
},0,0.1f);
toben.stop();
tunten.scheduleTask(new Timer.Task() {
@Override
public void run() {
setyPos(getyPos() - 3f);
}
},0,0.1f);
tunten.stop();
trechts.scheduleTask(new Timer.Task() {
@Override
public void run() {
setxPos(getxPos() + 3f);
}
},0,0.1f);
trechts.stop();
tlinks.scheduleTask(new Timer.Task() {
@Override
public void run() {
setyPos(getxPos() - 3f);
}
},0,0.1f);
tlinks.stop();
switch(direction){
case 0:
toben.start();
break;
case 1:
trechts.start();
break;
case 2:
tunten.start();
break;
case 3:
tlinks.start();
break;
}
}
public float getxStart(){ public float getxStart(){
return xStart; return xStart;

@ -5,11 +5,9 @@
*/ */
package com.dungeoncrawler.model.entities; package com.dungeoncrawler.model.entities;
import com.dungeoncrawler.model.Entity; import com.dungeoncrawler.model.Entity;
import com.dungeoncrawler.model.Inventory; import com.dungeoncrawler.model.Inventory;
import com.dungeoncrawler.model.Item; import com.dungeoncrawler.model.Item;
import com.dungeoncrawler.model.ItemContainer;
/** /**
* *
* @author Jan * @author Jan

@ -1,16 +1,9 @@
package com.dungeoncrawler.model.entities; package com.dungeoncrawler.model.entities;
import com.badlogic.gdx.utils.Timer;
import com.dungeoncrawler.model.Entity; import com.dungeoncrawler.model.Entity;
public class Swordsman extends Entity { public class Swordsman extends Entity {
Timer tup;
Timer tright;
Timer tdown;
Timer tleft;
int timerRuns;
boolean isRunning;
public Swordsman(float xPos, float yPos, int lvl) { public Swordsman(float xPos, float yPos, int lvl) {
super(xPos, yPos, lvl); super(xPos, yPos, lvl);
@ -19,133 +12,9 @@ public class Swordsman extends Entity {
this.direction = 2; this.direction = 2;
this.dmg = 3*lvl; this.dmg = 3*lvl;
this.id = 1; this.id = 1;
// TODO: Sinnvolle Werte finden // TODO: Sinnvolle Werte finden
tup = new Timer();
tright = new Timer();
tdown = new Timer();
tleft = new Timer();
isRunning = false;
timerRuns = 0;
direction = 2; direction = 2;
tup.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(0);
setyPos(getyPos() + 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tup.stop();
}
}
},0,0.025f);
tup.stop();
tright.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(1);
setxPos(getxPos() + 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tright.stop();
}
}
},0,0.025f);
tright.stop();
tdown.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(2);
setyPos(getyPos() - 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tdown.stop();
}
}
},0,0.025f);
tdown.stop();
tleft.scheduleTask(new Timer.Task() {
@Override
public void run() {
setDirection(3);
setxPos(getxPos() - 1f);
setTimerRuns(getTimerRuns() + 1);
if(getTimerRuns() >= 48){
setTimerRuns(0);
setIsRunning(false);
tleft.stop();
}
}
},0,0.025f);
tleft.stop();
}
@Override
public void randomMove(int x, int y) {
double i = Math.random();
if(i <= 0.25){
if(isRunning == false){
if(yPos >= (x-1) * 48f){
}
else{
setIsRunning(true);
tup.start();
}
}
}
else if(i > 0.25 && i <= 0.5){
if(isRunning == false){
if(xPos >= (y-1) * 48f){
}
else{
setIsRunning(true);
tright.start();
}
}
}
else if(i > 0.5 && i <= 0.75){
if(isRunning == false){
if(yPos <= 48f){
}
else{
setIsRunning(true);
tdown.start();
}
}
}
else if(i > 0.75 && i <= 1){
if(isRunning == false){
if(xPos <= 48f){
}
else{
setIsRunning(true);
tleft.start();
}
}
}
}
private void setIsRunning(boolean n){
isRunning = n;
}
private boolean getIsRunning(){
return isRunning;
}
public int getTimerRuns(){
return timerRuns;
}
public void setTimerRuns(int n){
timerRuns = n;
} }
@Override @Override
@ -177,16 +46,6 @@ public class Swordsman extends Entity {
movementX = (int) (3 * Math.cos(alpha)); movementX = (int) (3 * Math.cos(alpha));
movementY = (int) (3 * Math.sin(alpha)); movementY = (int) (3 * Math.sin(alpha));
/*
if(deltaX < 0 || deltaY < 0){
movementX *= -1;
movementY *= -1;
}
else if(deltaY < 0){
movementX *= -1;
}
*/
xPos += movementX; xPos += movementX;
yPos += movementY; yPos += movementY;
} }

@ -28,7 +28,7 @@ public class GameScreen {
//ENTITIES //ENTITIES
Texture[] entityTextures; Texture[] entityTextures;
Sprite[] entitySprites; public Sprite[] entitySprites;
TextureRegion[][] archerRegions; TextureRegion[][] archerRegions;
Texture archerTexture; Texture archerTexture;
TextureRegion[][] swordsmanRegions; TextureRegion[][] swordsmanRegions;
@ -43,8 +43,8 @@ public class GameScreen {
TiledMapRenderer tmr; TiledMapRenderer tmr;
TiledMap tm; TiledMap tm;
OrthographicCamera camera; OrthographicCamera camera;
ArrayList<AnimatedObject> objects; public ArrayList<AnimatedObject> objects;
ArrayList<AnimatedObject> mapItems; public ArrayList<AnimatedObject> mapItems;
Timer animations; Timer animations;
Timer animatePlayer; Timer animatePlayer;

Loading…
Cancel
Save