From 060882c847bbe55fd6c670412d54ddfd21bdc01b Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Wed, 29 Apr 2020 22:58:41 +0200 Subject: [PATCH] Creepy Player --- core/assets/sprites/body.png | Bin 0 -> 1020 bytes core/assets/sprites/hair.png | Bin 0 -> 694 bytes core/assets/sprites/head.png | Bin 0 -> 819 bytes core/assets/sprites/legs.png | Bin 0 -> 1104 bytes .../dungeoncrawler/control/Controller.java | 33 ++---- .../com/dungeoncrawler/view/GameScreen.java | 49 +++------ .../com/dungeoncrawler/view/PlayerSprite.java | 101 ++++++++++++++++++ 7 files changed, 126 insertions(+), 57 deletions(-) create mode 100644 core/assets/sprites/body.png create mode 100644 core/assets/sprites/hair.png create mode 100644 core/assets/sprites/head.png create mode 100644 core/assets/sprites/legs.png create mode 100644 core/src/com/dungeoncrawler/view/PlayerSprite.java diff --git a/core/assets/sprites/body.png b/core/assets/sprites/body.png new file mode 100644 index 0000000000000000000000000000000000000000..cee3b697968162d2a038ba53aba01434ec325d5d GIT binary patch literal 1020 zcmVEX>4Tx04R}tkv&MmKpe$iKcpfR5j%(|WT=8*p{R(XRIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVPL58BE>hzEl0u6Z503ls?%w0>9pG(Lm}2;&fTEgu zDjpNExm6+X3O`2Bk0{1PW@w4@Vg|0`>mDAy-bHwp`?)_yubej+;1P)Dn5LV=8^kl4 zrp9@nIK)b#Ongo}q0MN&)jR=w&%l-1_E#Ig>?i5< zwiZ4D`nG|K>$WEC0hc?#;FBimqAmGodJ6^M{fxdT2MpW-J!?*Ht$mz602%6P`35*R z1jdS#z3%ev?#|x+J=5y%2jzis)jC}nn*aa+24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jm1D5)UM@%T=}j000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0005gNkl)Q4}cvkWvBwIOhO>*M~cN9}YO?IgWV_0GM%($G1=H_xoahnx@oX7y!U* zjC0Nl<6#)$`TYw35KJcE(Y1eAri zM5nEOI;Fs-pazXVwfLHjT-#}I5>U>4U+hcPJOMU6pj;1aCxO{k|5^LM*;6pY zNf;X{Cg|ISP0EX>4Tx04R}tkv&MmKpe$iKcpfR5j%(|WT=8*p{R(XRIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVPL58BE>hzEl0u6Z503ls?%w0>9pG(Lm}2;&fTEgu zDjpNExm6+X3O`2Bk0{1PW@w4@Vg|0`>mDAy-bHwp`?)_yubej+;1P)Dn5LV=8^kl4 zrp9@nIK)b#Ongo}q0MN&)jR=w&%l-1_E#Ig>?i5< zwiZ4D`nG|K>$WEC0hc?#;FBimqAmGodJ6^M{fxdT2MpW-J!?*Ht$mz602%6P`35*R z1jdS#z3%ev?#|x+J=5y%2jzis)jC}nn*aa+24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jm1D5)TU*8ffnT000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001uNkl+UE0Y()Cf&R|}jD z8<(WoTxA*y?X5-!FZc1#o{bDWi!b&GEqV(+E>N4t7RZ*AO|ef9USO#W0000000000 c0092N8<0pK{2DTk1ONa407*qoM6N<$f}=JexBvhE literal 0 HcmV?d00001 diff --git a/core/assets/sprites/head.png b/core/assets/sprites/head.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb90a286eb05d356869aec464dbe8da208485af GIT binary patch literal 819 zcmV-31I+x1P)EX>4Tx04R}tkv&MmKpe$iKcpfR5j%(|WT=8*p{R(XRIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVPL58BE>hzEl0u6Z503ls?%w0>9pG(Lm}2;&fTEgu zDjpNExm6+X3O`2Bk0{1PW@w4@Vg|0`>mDAy-bHwp`?)_yubej+;1P)Dn5LV=8^kl4 zrp9@nIK)b#Ongo}q0MN&)jR=w&%l-1_E#Ig>?i5< zwiZ4D`nG|K>$WEC0hc?#;FBimqAmGodJ6^M{fxdT2MpW-J!?*Ht$mz602%6P`35*R z1jdS#z3%ev?#|x+J=5y%2jzis)jC}nn*aa+24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jm1D5)L4&y`b&@000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0003BNklO^xq#Kw{8=59^TMc;_ zJ_FEyub1Cj9YU)HHX7B;=aCRfiXzAREO`)W`Pcg;1{b{%h@l x?~PNNrv|72LMRat5fKp)5fKp)5fPD1_yp8|W5%;%Avyp6002ovPDHLkV1iukWflMc literal 0 HcmV?d00001 diff --git a/core/assets/sprites/legs.png b/core/assets/sprites/legs.png new file mode 100644 index 0000000000000000000000000000000000000000..221a8509b0e31b3e7e1b6aec4590a893cb32d6fb GIT binary patch literal 1104 zcmV-W1h4yvP)EX>4Tx04R}tkv&MmKpe$iKcpfR5j%(|WT=8*p{R(XRIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVPL58BE>hzEl0u6Z503ls?%w0>9pG(Lm}2;&fTEgu zDjpNExm6+X3O`2Bk0{1PW@w4@Vg|0`>mDAy-bHwp`?)_yubej+;1P)Dn5LV=8^kl4 zrp9@nIK)b#Ongo}q0MN&)jR=w&%l-1_E#Ig>?i5< zwiZ4D`nG|K>$WEC0hc?#;FBimqAmGodJ6^M{fxdT2MpW-J!?*Ht$mz602%6P`35*R z1jdS#z3%ev?#|x+J=5y%2jzis)jC}nn*aa+24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jm1D5)cGL|9jv7000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0006fNklj zsZ=VJN~Kb%R4SE9i1MC7j!wD#t-Jh@bCMl)GVOAvIr>NxlyOfyxKH9gVH&e^mrB31i6Ve=7i2Xn~TaGNzB%)F}-$IFlpA^^230||%$RUw9Qodrac7y_;kg05`BwFQitGDT(C z12G1+eT0e-V^~?h+Na`&_r{kNespju5AJMT8sGnTF8@S8&$pwi4?=$va@}M3#`psY Wi_4^c_*dHi0000{ literal 0 HcmV?d00001 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; + } +}