diff --git a/core/assets/sprites/body.png b/core/assets/sprites/body.png new file mode 100644 index 0000000..cee3b69 Binary files /dev/null and b/core/assets/sprites/body.png differ diff --git a/core/assets/sprites/hair.png b/core/assets/sprites/hair.png new file mode 100644 index 0000000..33eb1ea Binary files /dev/null and b/core/assets/sprites/hair.png differ diff --git a/core/assets/sprites/head.png b/core/assets/sprites/head.png new file mode 100644 index 0000000..3eb90a2 Binary files /dev/null and b/core/assets/sprites/head.png differ diff --git a/core/assets/sprites/legs.png b/core/assets/sprites/legs.png new file mode 100644 index 0000000..221a850 Binary files /dev/null and b/core/assets/sprites/legs.png differ diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index ce09500..cacdcbe 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -82,28 +82,11 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ tileY = roomY / 2; roomAmount = d.getLevel()[0].getRooms().length; - - int startRoom = (int) (Math.random() * roomAmount); level = 0; - int k = 0; - for(int i = 0; i < roomAmount; i++){ - for(int j = 0; j < roomAmount; j++){ - if(d.getLevel()[level].getRooms()[i][j] != null){ - - if(k == startRoom){ - // Startraum wurde ausgewählt - roomPosX = i; - roomPosY = j; - - } - - k++; - } - - } - } + roomPosX = roomAmount / 2; + roomPosY = roomAmount / 2; d.setCurrentLevel(d.getLevel()[level]); d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]); @@ -180,12 +163,12 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ float x = d.getPlayer().getxPos(); d.getPlayer().updateX(); - m.setPlayerSpriteX(d.getPlayer().getxPos()); + m.getPlayer().getCollisionSprite().setX(d.getPlayer().getxPos()); for(RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)){ Rectangle rectangle = rectangleObject.getRectangle(); - if(Intersector.overlaps(rectangle, m.getPlayer().getBoundingRectangle())){ + if(Intersector.overlaps(rectangle, m.getPlayer().getCollisionSprite())){ d.getPlayer().setxPos(x); @@ -195,13 +178,13 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ float y = d.getPlayer().getyPos(); d.getPlayer().updateY(); - m.setPlayerSpriteX(d.getPlayer().getxPos()); - m.setPlayerSpriteY(d.getPlayer().getyPos()); + m.getPlayer().getCollisionSprite().setX(d.getPlayer().getxPos()); + m.getPlayer().getCollisionSprite().setY(d.getPlayer().getyPos()); for(RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)){ Rectangle rectangle = rectangleObject.getRectangle(); - if(Intersector.overlaps(rectangle, m.getPlayer().getBoundingRectangle())){ + if(Intersector.overlaps(rectangle, m.getPlayer().getCollisionSprite())){ d.getPlayer().setyPos(y); @@ -288,7 +271,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ ArrayList garbageCollector = new ArrayList<>(); for(int i = 0; i < tempItems.size(); i++){ - if(Intersector.overlaps(m.getPlayer().getBoundingRectangle(), tempSprites.get(i).getSprite().getBoundingRectangle())){ + if(Intersector.overlaps(m.getPlayer().getCollisionSprite(), tempSprites.get(i).getSprite().getBoundingRectangle())){ garbageCollector.add(tempItems.get(i)); tempItems.remove(i); diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index 9dcb0af..58988bb 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -12,24 +12,18 @@ import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.maps.tiled.TiledMapRenderer; import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer; import com.badlogic.gdx.math.Intersector; -import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.utils.Timer; import com.dungeoncrawler.model.Dungeon; import com.dungeoncrawler.model.Entity; import com.dungeoncrawler.model.Item; -import com.dungeoncrawler.model.ItemContainer; import com.dungeoncrawler.model.entities.*; import java.util.ArrayList; public class GameScreen { - //CONTROLS - //Texture ctr; - //Sprite controls; //PLAYER Texture p; - Sprite player; - TextureRegion[][] regions; + PlayerSprite player; //ENTITIES @@ -76,15 +70,15 @@ public class GameScreen { */ //PLAYER + Texture[] playerTexture = new Texture[4]; + playerTexture[0] = new Texture(Gdx.files.internal("sprites/legs.png")); + playerTexture[1] = new Texture(Gdx.files.internal("sprites/body.png")); + playerTexture[2] = new Texture(Gdx.files.internal("sprites/head.png")); + playerTexture[3] = new Texture(Gdx.files.internal("sprites/hair.png")); - p = new Texture("sprites/player.png"); - regions = TextureRegion.split(p, 32, 32); - player = new Sprite(regions[0][2]); - player.setX(200); - player.setY(200); - - + player = new PlayerSprite(playerTexture); + player.update(200, 200); //ENTITIES entityTextures = new Texture[5]; @@ -164,8 +158,7 @@ public class GameScreen { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); //setzt player Sprite auf richtige Position - player.setX(p.getxPos()); - player.setY(p.getyPos()); + player.update((int) p.getxPos(), (int) p.getyPos()); tm = getM().getMaps()[level][roomPosX][roomPosY].getMap(); objects = getM().getMaps()[level][roomPosX][roomPosY].getObjects(); @@ -180,6 +173,7 @@ public class GameScreen { // dreht SpielerSprite je nach Bewegungsrichtung + /* if(p.getMovementX() == 3){ //RECHTS player.setRegion(regions[0][1]); } @@ -192,6 +186,7 @@ public class GameScreen { if(p.getMovementY() == -3){ //UNTEN player.setRegion(regions[0][2]); } + */ //MAP tmr.setView(camera); @@ -253,7 +248,11 @@ public class GameScreen { mapItem.getSprite().draw(batch); } - player.draw(batch); + // Player wird gedrawt + for(Sprite sprite : player.getSprites()){ + sprite.draw(batch); + } + //controls.draw(batch); //DRAW'T JEDES ENTITY - prueft vorher ob vorhanden for(int i = 0; i < e.length; i++){ @@ -491,13 +490,7 @@ public class GameScreen { //GETTER - public float getPlayerSpriteX(){ - return player.getX(); - } - public float getPlayerSpriteY(){ - return player.getY(); - } - public Sprite getPlayer(){ + public PlayerSprite getPlayer(){ return player; } @@ -508,14 +501,6 @@ public class GameScreen { return entitySprites[i].getY(); } - //SETTER - public void setPlayerSpriteX(float x){ - player.setX(x); - } - public void setPlayerSpriteY(float y){ - player.setY(y); - } - public void setEntitySpriteX(int i,float x){ entitySprites[i].setX(x); } diff --git a/core/src/com/dungeoncrawler/view/PlayerSprite.java b/core/src/com/dungeoncrawler/view/PlayerSprite.java new file mode 100644 index 0000000..1173ec4 --- /dev/null +++ b/core/src/com/dungeoncrawler/view/PlayerSprite.java @@ -0,0 +1,101 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.dungeoncrawler.view; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.math.Rectangle; + +/** + * + * @author jonathan + */ +public class PlayerSprite { + + // 0: pants, 1: body, 2: head, 3: hair, 4: collision + private Sprite[] sprites; + private Rectangle collisionSprite; + private TextureRegion[][][] regions; + private int[] frames; + + public PlayerSprite(Texture[] textures){ + sprites = new Sprite[4]; + regions = new TextureRegion[4][][]; + frames = new int[4]; + + for(int i = 0; i < regions.length; i++){ + regions[i] = TextureRegion.split(textures[i], 32, 64); + sprites[i] = new Sprite(textures[i]); + } + + collisionSprite = new Rectangle(0, 0, 32, 16); + } + + public void update(int xPos, int yPos){ + for(int i = 0; i < sprites.length; i++){ + sprites[i].setPosition(xPos, yPos); + } + + collisionSprite.setPosition(xPos, yPos); + } + + /** + * @return the sprites + */ + public Sprite[] getSprites() { + return sprites; + } + + /** + * @param sprites the sprites to set + */ + public void setSprites(Sprite[] sprites) { + this.sprites = sprites; + } + + /** + * @return the collisionSprite + */ + public Rectangle getCollisionSprite() { + return collisionSprite; + } + + /** + * @param collisionSprite the collisionSprite to set + */ + public void setCollisionSprite(Rectangle collisionSprite) { + this.collisionSprite = collisionSprite; + } + + /** + * @return the regions + */ + public TextureRegion[][][] getRegions() { + return regions; + } + + /** + * @param regions the regions to set + */ + public void setRegions(TextureRegion[][][] regions) { + this.regions = regions; + } + + /** + * @return the frames + */ + public int[] getFrames() { + return frames; + } + + /** + * @param frames the frames to set + */ + public void setFrames(int[] frames) { + this.frames = frames; + } +}