master
Jonathan Hager 6 years ago
parent 02639b3986
commit b591c38e13

@ -112,13 +112,13 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
int y = (int) temp.getyPos(); int y = (int) temp.getyPos();
Entity arrow = 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]; EntitySprite tempObject = m.entitySprites[i];
tempObject.setPosition(temp.getxPos(), temp.getyPos()); tempObject.update((int) temp.getxPos(), (int) temp.getyPos());
boolean overlaps = false; boolean overlaps = false;
boolean delete = false; boolean delete = false;
if(Intersector.overlaps(tempObject.getBoundingRectangle(), playerSprite)){ if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite)){
overlaps = true; overlaps = true;
if(d.getCurrentEntities()[i].getId() == 2){ if(d.getCurrentEntities()[i].getId() == 2){
@ -134,7 +134,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){ for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){
Rectangle rectangle = rectangleObject.getRectangle(); Rectangle rectangle = rectangleObject.getRectangle();
if(Intersector.overlaps(tempObject.getBoundingRectangle(), rectangle)){ if(Intersector.overlaps(tempObject.getCollisionSprite(), rectangle)){
overlaps = true; overlaps = true;
delete = true; delete = true;
break; break;
@ -145,7 +145,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
for(int j = 0; j < m.entitySprites.length; j++){ for(int j = 0; j < m.entitySprites.length; j++){
if(i != j){ if(i != j){
if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getId() != 2){ if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getId() != 2){
if(Intersector.overlaps(tempObject.getBoundingRectangle(), m.entitySprites[j].getBoundingRectangle())){ if(Intersector.overlaps(tempObject.getCollisionSprite(), m.entitySprites[j].getCollisionSprite())){
overlaps = true; overlaps = true;
break; break;
} }
@ -160,7 +160,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
d.getCurrentEntities()[i].setxPos(x); d.getCurrentEntities()[i].setxPos(x);
d.getCurrentEntities()[i].setyPos(y); d.getCurrentEntities()[i].setyPos(y);
tempObject.setPosition(x, y); tempObject.update(x, y);
} }
m.entitySprites[i] = tempObject; m.entitySprites[i] = tempObject;
@ -169,7 +169,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
for(int k = 5; k < d.getCurrentEntities().length; k++){ for(int k = 5; k < d.getCurrentEntities().length; k++){
if(d.getCurrentEntities()[k] == null){ if(d.getCurrentEntities()[k] == null){
d.getCurrentEntities()[k] = arrow; d.getCurrentEntities()[k] = arrow;
m.updateEntitySprite(d.getCurrentEntities()); m.generateNewEntitySprite(arrow, k);
break; break;
} }
} }
@ -177,8 +177,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
if(delete && d.getCurrentEntities()[i].getId() == 2 || d.getCurrentEntities()[i].getToDelete()){ if(delete && d.getCurrentEntities()[i].getId() == 2 || d.getCurrentEntities()[i].getToDelete()){
d.getCurrentEntities()[i] = null; d.getCurrentEntities()[i] = null;
m.updateEntitySprite(d.getCurrentEntities()); m.deleteEntitySprite(i);
} }
} }
} }
@ -351,6 +350,8 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
d.setCurrentLevel(d.getLevel()[level]); d.setCurrentLevel(d.getLevel()[level]);
d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]); d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]);
d.setCurrentEntities(d.getCurrentRoom().getEnemies()); d.setCurrentEntities(d.getCurrentRoom().getEnemies());
m.generateEntitySprites(d.getCurrentEntities());
} }
public void attack(Entity attacker, Entity[] e){ public void attack(Entity attacker, Entity[] e){
@ -527,6 +528,8 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
v.cleanUp(); v.cleanUp();
v = null; v = null;
m = new GameScreen(d, volume); m = new GameScreen(d, volume);
m.generateEntitySprites(d.getCurrentEntities());
hc = new HudContainer(); hc = new HudContainer();
m.startLoadingScreen(); m.startLoadingScreen();
return true; return true;

@ -14,18 +14,19 @@ import com.badlogic.gdx.math.Rectangle;
* *
* @author jonathan * @author jonathan
*/ */
public class PlayerSprite { public class EntitySprite {
// 0: pants, 1: body, 2: head, 3: hair, 4: collision // 0: pants, 1: body, 2: head, 3: hair, 4: collision
private Sprite[] sprites; private Sprite[] sprites;
private Rectangle collisionSprite; private Rectangle collisionSprite;
private Rectangle fullCollisionSprite;
private TextureRegion[][][] regions; private TextureRegion[][][] regions;
private int[] frames; private int[] frames;
// 0: links, 1: rechts // 0: links, 1: rechts
private int direction; private int direction;
public PlayerSprite(Texture[] textures){ public EntitySprite(Texture[] textures){
sprites = new Sprite[1]; sprites = new Sprite[1];
regions = new TextureRegion[1][][]; regions = new TextureRegion[1][][];
frames = new int[2]; frames = new int[2];
@ -37,6 +38,7 @@ public class PlayerSprite {
} }
collisionSprite = new Rectangle(0, 0, 32, 16); collisionSprite = new Rectangle(0, 0, 32, 16);
fullCollisionSprite = sprites[0].getBoundingRectangle();
} }
public void updateIdle(){ public void updateIdle(){
@ -165,4 +167,11 @@ public class PlayerSprite {
public void setDirection(int direction) { public void setDirection(int direction) {
this.direction = direction; this.direction = direction;
} }
/**
* @return the fullCollisionSprite
*/
public Rectangle getFullCollisionSprite() {
return fullCollisionSprite;
}
} }

@ -15,7 +15,6 @@ import com.badlogic.gdx.math.Intersector;
import com.badlogic.gdx.utils.Timer; import com.badlogic.gdx.utils.Timer;
import com.dungeoncrawler.model.Dungeon; import com.dungeoncrawler.model.Dungeon;
import com.dungeoncrawler.model.Entity; import com.dungeoncrawler.model.Entity;
import com.dungeoncrawler.model.Item;
import com.dungeoncrawler.model.entities.*; import com.dungeoncrawler.model.entities.*;
import java.util.ArrayList; import java.util.ArrayList;
@ -23,12 +22,12 @@ public class GameScreen {
//PLAYER //PLAYER
Texture p; Texture p;
PlayerSprite player; EntitySprite player;
//ENTITIES //ENTITIES
Texture[] entityTextures; Texture[] entityTextures;
public Sprite[] entitySprites; public EntitySprite[] entitySprites;
TextureRegion[][] archerRegions; TextureRegion[][] archerRegions;
Texture archerTexture; Texture archerTexture;
TextureRegion[][] swordsmanRegions; TextureRegion[][] swordsmanRegions;
@ -84,13 +83,13 @@ public class GameScreen {
playerTexture[2] = new Texture(Gdx.files.internal("sprites/player.png")); playerTexture[2] = new Texture(Gdx.files.internal("sprites/player.png"));
playerTexture[3] = new Texture(Gdx.files.internal("sprites/player.png")); playerTexture[3] = new Texture(Gdx.files.internal("sprites/player.png"));
player = new PlayerSprite(playerTexture); player = new EntitySprite(playerTexture);
player.update(200, 200); player.update(200, 200);
//ENTITIES //ENTITIES
entityTextures = new Texture[5]; entityTextures = new Texture[5];
entitySprites = new Sprite[15]; entitySprites = new EntitySprite[15];
arrowTextures = new Texture[10]; arrowTextures = new Texture[10];
arrowSprites = new Sprite[10]; arrowSprites = new Sprite[10];
@ -177,193 +176,127 @@ public class GameScreen {
} }
public void render (SpriteBatch batch, Player p, Entity[] e, Entity[] arrows, int tileX, int tileY, int level, int roomPosX, int roomPosY) { public void render (SpriteBatch batch, Player p, Entity[] e, Entity[] arrows, int tileX, int tileY, int level, int roomPosX, int roomPosY) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
playerMoving = (p.getMovementX() != 0 || p.getMovementY() != 0);
//setzt player Sprite auf richtige Position
player.update((int) p.getxPos(), (int) p.getyPos());
if(p.getMovementX() > 1){
player.setDirection(1);
player.updateFlip();
}
else if(p.getMovementX() < -1){
player.setDirection(0);
player.updateFlip();
}
tm = getM().getMaps()[level][roomPosX][roomPosY].getMap();
objects = getM().getMaps()[level][roomPosX][roomPosY].getObjects();
mapItems = getM().getMaps()[level][roomPosX][roomPosY].getMapItems();
if(tm == null){
System.out.println("Dein scheiß geht net");
}
else{
tmr = new OrthogonalTiledMapRenderer(tm);
}
// dreht SpielerSprite je nach Bewegungsrichtung
/*
if(p.getMovementX() == 3){ //RECHTS
player.setRegion(regions[0][1]);
}
if(p.getMovementX() == -3){ //LINKS
player.setRegion(regions[0][3]);
}
if(p.getMovementY() == 3){ //OBEN
player.setRegion(regions[0][0]);
}
if(p.getMovementY() == -3){ //UNTEN
player.setRegion(regions[0][2]);
}
*/
//MAP
tmr.setView(camera);
tmr.render();
camera.zoom = 700f; // Standart 700f Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
batch.setProjectionMatrix(camera.combined);
playerMoving = (p.getMovementX() != 0 || p.getMovementY() != 0);
updateEntitySprite(e); //setzt player Sprite auf richtige Position
player.update((int) p.getxPos(), (int) p.getyPos());
if(p.getMovementX() > 1){
player.setDirection(1);
player.updateFlip();
}
else if(p.getMovementX() < -1){
player.setDirection(0);
player.updateFlip();
}
tm = getM().getMaps()[level][roomPosX][roomPosY].getMap();
objects = getM().getMaps()[level][roomPosX][roomPosY].getObjects();
mapItems = getM().getMaps()[level][roomPosX][roomPosY].getMapItems();
if(tm == null){
System.out.println("Dein scheiß geht net");
}
else{
tmr = new OrthogonalTiledMapRenderer(tm);
}
//MAP
tmr.setView(camera);
tmr.render();
camera.zoom = 700f; // Standart 700f
camera.update();
batch.setProjectionMatrix(camera.combined);
updateEntitySprites(e);
//BATCH //BATCH
batch.begin(); batch.begin();
//DRAWING LOADING SCREEN IF LOADING for(AnimatedObject object : objects){
object.getSprite().draw(batch);
}
//DRAWING INVENTORY
for(AnimatedObject mapItem : mapItems){
mapItem.getSprite().draw(batch);
for(AnimatedObject object : objects){ }
object.getSprite().draw(batch);
} //DRAW'T JEDES ENTITY - prueft vorher ob vorhanden
for(int i = 0; i < e.length; i++){
for(AnimatedObject mapItem : mapItems){ if(e[i] != null){
mapItem.getSprite().draw(batch);
} entitySprites[i].getSprites()[0].draw(batch);
//controls.draw(batch); if(e[i].getId() != 2){
//DRAW'T JEDES ENTITY - prueft vorher ob vorhanden if(e[i].getHp() < e[i].getMaxhp() && e[i].getHp() > 0){
for(int i = 0; i < e.length; i++){ healthBar = new Texture("sprites/halfHealthEntity.png");
if(e[i] != null){ Sprite healthBarSprite = new Sprite(healthBar);
switch(e[i].getDirection()){ healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos());
case -1: healthBarSprite.draw(batch);
break;
case 0:
if(e[i].getId() == 0){
entitySprites[i].setRegion(archerRegions[0][0]);
}
else if(e[i].getId() == 1){
entitySprites[i].setRegion(swordsmanRegions[0][0]);
}
break;
case 1:
if(e[i].getId() == 0){
entitySprites[i].setRegion(archerRegions[0][1]);
}
else if(e[i].getId() == 1){
entitySprites[i].setRegion(swordsmanRegions[0][1]);
}
break;
case 2:
if(e[i].getId() == 0){
entitySprites[i].setRegion(archerRegions[0][2]);
}
else if(e[i].getId() == 1){
entitySprites[i].setRegion(swordsmanRegions[0][2]);
}
break;
case 3:
if(e[i].getId() == 0){
entitySprites[i].setRegion(archerRegions[0][3]);
}
else if(e[i].getId() == 1){
entitySprites[i].setRegion(swordsmanRegions[0][3]);
}
break;
} }
entitySprites[i].draw(batch); else if(e[i].getHp() == e[i].getMaxhp()){
entitySprites[i].setX(e[i].getxPos()); healthBar = new Texture("sprites/fullHealthEntity.png");
entitySprites[i].setY(e[i].getyPos()); Sprite healthBarSprite = new Sprite(healthBar);
if(e[i].getId() != 2){ healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos());
if(e[i].getHp() < e[i].getMaxhp() && e[i].getHp() > 0){ healthBarSprite.draw(batch);
healthBar = new Texture("sprites/halfHealthEntity.png");
Sprite healthBarSprite = new Sprite(healthBar);
healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos());
healthBarSprite.draw(batch);
}
else if(e[i].getHp() == e[i].getMaxhp()){
healthBar = new Texture("sprites/fullHealthEntity.png");
Sprite healthBarSprite = new Sprite(healthBar);
healthBarSprite.setPosition(e[i].getxPos(), e[i].getyPos());
healthBarSprite.draw(batch);
}
} }
} }
} }
}
// Player wird gedrawt
for(Sprite sprite : player.getSprites()){ // Player wird gedrawt
sprite.draw(batch); for(Sprite sprite : player.getSprites()){
sprite.draw(batch);
}
roomChangeSprite.setRegion(roomChangeTextureRegion[0][roomChangeRow]);
if(roomLoading == true){
roomChangeSprite.draw(batch);
}
batch.end();
}
public void generateEntitySprites(Entity[] e){
for(int i = 0; i < e.length; i++){
generateNewEntitySprite(e[i], i);
}
}
public void generateNewEntitySprite(Entity e, int i){
if(e != null){
Texture[] tx = new Texture[1];
if(e.getId() == 0){ //nimmt entity ID -> 0 = Archer || 1 = Swordsman || 2 = Arrow
tx[0] = new Texture("sprites/player.png");
} }
if(e.getId() == 1){
/* tx[0] = new Texture("sprites/player.png");
for(int i = 0; i < arrowSprites.length; i++){
if(arrowSprites[i] != null){
arrowSprites[i].setX(arrows[i].getxPos());
arrowSprites[i].setY(arrows[i].getyPos());
arrowSprites[i].draw(batch);
}
} }
*/ if(e.getId() == 2){
roomChangeSprite.setRegion(roomChangeTextureRegion[0][roomChangeRow]); tx[0] = new Texture("sprites/player.png");
if(roomLoading == true){
roomChangeSprite.draw(batch);
} }
batch.end(); entitySprites[i] = new EntitySprite(tx);
} entitySprites[i].update((int) e.getxPos(), (int) e.getyPos());
}
}
public void updateEntitySprite(Entity[] e){ public void updateEntitySprites(Entity[] e){
for(int i = 0; i < e.length; i++){ for(int i = 0; i < e.length; i++){
if(e[i] != null){ if(e[i] != null){
if(e[i].getId() == 0){ //nimmt entity ID -> 0 = Archer || 1 = Swordsman || 2 = Arrow entitySprites[i].update((int) e[i].getxPos(), (int) e[i].getyPos());
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/arrow.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 void deleteEntitySprite(int i){
entitySprites[i] = null;
}
public Entity[] playerAttack(Entity e[], Player p, SpriteBatch batch){ public Entity[] playerAttack(Entity e[], Player p, SpriteBatch batch){
if(p.getDirection() == 0){ if(p.getDirection() == 0){
@ -374,7 +307,7 @@ public class GameScreen {
for(int i = 0; i< e.length ; i++){ for(int i = 0; i< e.length ; i++){
if(e[i] != null){ if(e[i] != null){
if(Intersector.overlaps(entitySprites[i].getBoundingRectangle(), attackSprite.getBoundingRectangle())){ if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){
if(e[i] != null){ if(e[i] != null){
if(e[i].getHp() - p.getDmg() <= 0){ if(e[i].getHp() - p.getDmg() <= 0){
e[i] = null; e[i] = null;
@ -394,7 +327,7 @@ public class GameScreen {
attackSprite.setY(p.getyPos()- 2f); attackSprite.setY(p.getyPos()- 2f);
for(int i = 0; i< e.length ; i++){ for(int i = 0; i< e.length ; i++){
if(entitySprites[i] != null){ if(entitySprites[i] != null){
if(Intersector.overlaps(entitySprites[i].getBoundingRectangle(), attackSprite.getBoundingRectangle())){ if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){
if(e[i] != null){ if(e[i] != null){
if(e[i].getHp() - p.getDmg() <= 0){ if(e[i].getHp() - p.getDmg() <= 0){
e[i] = null; e[i] = null;
@ -414,7 +347,7 @@ public class GameScreen {
attackSprite.setY(p.getyPos()); attackSprite.setY(p.getyPos());
for(int i = 0; i<e.length ; i++){ for(int i = 0; i<e.length ; i++){
if(entitySprites[i] != null){ if(entitySprites[i] != null){
if(Intersector.overlaps(entitySprites[i].getBoundingRectangle(), attackSprite.getBoundingRectangle())){ if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){
if(e[i] != null){ if(e[i] != null){
if(e[i].getHp() - p.getDmg() <= 0){ if(e[i].getHp() - p.getDmg() <= 0){
e[i] = null; e[i] = null;
@ -434,7 +367,7 @@ public class GameScreen {
attackSprite.setY(p.getyPos() - 8f); attackSprite.setY(p.getyPos() - 8f);
for(int i = 0; i < e.length ; i++){ for(int i = 0; i < e.length ; i++){
if(entitySprites[i] != null){ if(entitySprites[i] != null){
if(Intersector.overlaps(entitySprites[i].getBoundingRectangle(), attackSprite.getBoundingRectangle())){ if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){
if(e[i] != null){ if(e[i] != null){
if(e[i].getHp() - p.getDmg() <= 0){ if(e[i].getHp() - p.getDmg() <= 0){
e[i] = null; e[i] = null;
@ -460,23 +393,10 @@ public class GameScreen {
} }
//GETTER //GETTER
public PlayerSprite getPlayer(){ public EntitySprite getPlayer(){
return player; return player;
} }
public float getEntitySpriteX(int i){
return entitySprites[i].getX();
}
public float getEntitySpriteY(int i){
return entitySprites[i].getY();
}
public void setEntitySpriteX(int i,float x){
entitySprites[i].setX(x);
}
public void setEntitySpriteY(int i,float y){
entitySprites[i].setY(y);
}
public boolean getIsLoading(){ public boolean getIsLoading(){
return roomLoading; return roomLoading;
} }

@ -16,11 +16,13 @@ public class MapContainer {
private TiledMap map; private TiledMap map;
private ArrayList<AnimatedObject> objects; private ArrayList<AnimatedObject> objects;
private ArrayList<AnimatedObject> mapItems; private ArrayList<AnimatedObject> mapItems;
private EntitySprite[] enemies;
public MapContainer(TiledMap map){ public MapContainer(TiledMap map){
this.map = map; this.map = map;
this.objects = new ArrayList<>(); this.objects = new ArrayList<>();
this.mapItems = new ArrayList<>(); this.mapItems = new ArrayList<>();
this.enemies = new EntitySprite[15];
} }
/** /**
@ -64,5 +66,23 @@ public class MapContainer {
public void setMapItems(ArrayList<AnimatedObject> mapItems) { public void setMapItems(ArrayList<AnimatedObject> mapItems) {
this.mapItems = mapItems; this.mapItems = mapItems;
} }
/**
* @return the enemies
*/
public EntitySprite[] getEnemies() {
return enemies;
}
/**
* @param enemies the enemies to set
*/
public void setEnemies(EntitySprite[] enemies) {
this.enemies = enemies;
}
public void setEnemies(EntitySprite enemy, int i) {
this.enemies[i] = enemy;
}
} }

Loading…
Cancel
Save