From e5fd6fa10664d1aaf5ff34b8883f4ec90a0710a4 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sat, 16 May 2020 21:38:00 +0200 Subject: [PATCH] =?UTF-8?q?t=C3=BCren=20sind=20da?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dungeoncrawler/control/Controller.java | 11 ++- .../dungeoncrawler/view/AnimatedObject.java | 55 +++++++++++-- .../com/dungeoncrawler/view/GameScreen.java | 8 +- .../com/dungeoncrawler/view/MapContainer.java | 77 +++++++++++++++++++ .../com/dungeoncrawler/view/MapGenerator.java | 43 ++++++++++- 5 files changed, 184 insertions(+), 10 deletions(-) diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 689e6b7..31bbfe3 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -270,7 +270,11 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ gs.updateDamageContainer(); } - } + } + + if(!hasEnemies()){ + gs.getM().getMaps()[level][roomPosX][roomPosY].raiseDoors(); + } } } },0, 0.03f); @@ -435,6 +439,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().setxPos((roomX / 2)* 48); d.getPlayer().setyPos(48); gs.startLoadingScreen(); + gs.getM().getMaps()[level][roomPosX][roomPosY].lowerDoors(); clearEnemies(); } @@ -446,6 +451,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().setxPos(48); d.getPlayer().setyPos((roomY / 2)*48); gs.startLoadingScreen(); + gs.getM().getMaps()[level][roomPosX][roomPosY].lowerDoors(); clearEnemies(); } @@ -457,6 +463,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().setxPos((roomX / 2)*48); d.getPlayer().setyPos(roomY*48 - 48); gs.startLoadingScreen(); + gs.getM().getMaps()[level][roomPosX][roomPosY].lowerDoors(); clearEnemies(); } @@ -468,6 +475,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().setxPos((roomX*48) - 48); d.getPlayer().setyPos((roomY / 2)*48); gs.startLoadingScreen(); + gs.getM().getMaps()[level][roomPosX][roomPosY].lowerDoors(); clearEnemies(); } @@ -479,6 +487,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().updateStats(level + 1); gs.startLoadingScreen(); + gs.getM().getMaps()[level][roomPosX][roomPosY].lowerDoors(); level++; diff --git a/core/src/com/dungeoncrawler/view/AnimatedObject.java b/core/src/com/dungeoncrawler/view/AnimatedObject.java index bb66ca8..7e7baf7 100644 --- a/core/src/com/dungeoncrawler/view/AnimatedObject.java +++ b/core/src/com/dungeoncrawler/view/AnimatedObject.java @@ -25,21 +25,36 @@ public class AnimatedObject { frame = (int) (Math.random()*texture[0].length); row = (int) (Math.random()*texture.length); - sprite = new Sprite(texture[row][frame]); + sprite = new Sprite(texture[getRow()][getFrame()]); } - public void updateTexture(){ - if(frame >= texture[0].length - 1){ - frame = 0; + public void updateAnimation(){ + if(getFrame() >= texture[0].length - 1){ + setFrame(0); } else{ - frame++; + setFrame(getFrame() + 1); } - sprite.setRegion(texture[row][frame]); + sprite.setRegion(texture[getRow()][getFrame()]); } + public void updateTexture(){ + sprite.setRegion(texture[getRow()][getFrame()]); + } + + public void updateBackwards(){ + if(getFrame() <= 0){ + setFrame(texture[0].length - 1); + } + else{ + setFrame(getFrame() - 1); + } + + sprite.setRegion(texture[getRow()][getFrame()]); + } + /** * @return the sprite */ @@ -71,4 +86,32 @@ public class AnimatedObject { public void setTexture(TextureRegion[][] texture) { this.texture = texture; } + + /** + * @return the frame + */ + public int getFrame() { + return frame; + } + + /** + * @param frame the frame to set + */ + public void setFrame(int frame) { + this.frame = frame; + } + + /** + * @return the row + */ + public int getRow() { + return row; + } + + /** + * @param row the row to set + */ + public void setRow(int row) { + this.row = row; + } } diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index 9c3a713..f878219 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -42,6 +42,7 @@ public class GameScreen { OrthographicCamera camera; public ArrayList objects; public ArrayList mapItems; + public ArrayList doors; Timer animations; Timer animatePlayer; @@ -162,7 +163,7 @@ public class GameScreen { public void run() { if(objects != null){ for(AnimatedObject object : objects){ - object.updateTexture(); + object.updateAnimation(); } } } @@ -237,6 +238,7 @@ public class GameScreen { tm = getM().getMaps()[level][roomPosX][roomPosY].getMap(); objects = getM().getMaps()[level][roomPosX][roomPosY].getObjects(); mapItems = getM().getMaps()[level][roomPosX][roomPosY].getMapItems(); + doors = getM().getMaps()[level][roomPosX][roomPosY].getDoors(); if(tm != null){ tmr = new OrthogonalTiledMapRenderer(tm); @@ -283,6 +285,10 @@ public class GameScreen { mapItem.getSprite().draw(batch); } + for(AnimatedObject door : doors){ + door.getSprite().draw(batch); + } + for(EntitySprite eSprite : renderArray){ eSprite.getSprites()[0].draw(batch); } diff --git a/core/src/com/dungeoncrawler/view/MapContainer.java b/core/src/com/dungeoncrawler/view/MapContainer.java index 17ea922..d3675b9 100644 --- a/core/src/com/dungeoncrawler/view/MapContainer.java +++ b/core/src/com/dungeoncrawler/view/MapContainer.java @@ -7,6 +7,7 @@ package com.dungeoncrawler.view; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.maps.tiled.TiledMap; +import com.badlogic.gdx.utils.Timer; import com.dungeoncrawler.model.Item; import java.util.ArrayList; @@ -18,13 +19,22 @@ public class MapContainer { private TiledMap map; private ArrayList objects; private ArrayList mapItems; + private ArrayList doors; + private boolean doorsDown; private EntitySprite[] enemies; + private Timer doorTimer; + private int doorState; public MapContainer(TiledMap map){ this.map = map; this.objects = new ArrayList<>(); this.mapItems = new ArrayList<>(); this.enemies = new EntitySprite[15]; + doors = new ArrayList<>(); + doorTimer = new Timer(); + + // 0: up, 1: animation, 2: down + doorState = 0; } @@ -48,6 +58,52 @@ public class MapContainer { } } + + public void lowerDoors(){ + if(doorState == 0){ + doorState = 1; + + for(AnimatedObject door : doors){ + door.setFrame(9); + } + + doorTimer.scheduleTask(new Timer.Task() { + @Override + public void run() { + for(AnimatedObject door : doors){ + door.updateBackwards(); + } + if(doors.get(0).getFrame() == 0){ + doorState = 2; + doorTimer.clear(); + } + } + }, 0, 0.08f); + } + } + + public void raiseDoors(){ + if(doorState == 2){ + doorState = 1; + + for(AnimatedObject door : doors){ + door.setFrame(0); + } + + doorTimer.scheduleTask(new Timer.Task() { + @Override + public void run() { + for(AnimatedObject door : doors){ + door.updateAnimation(); + } + if(doors.get(0).getFrame() >= 9){ + doorState = 0; + doorTimer.clear(); + } + } + }, 0, 0.08f); + } + } /** * @return the map @@ -109,5 +165,26 @@ public class MapContainer { public void setEnemies(EntitySprite enemy, int i) { this.enemies[i] = enemy; } + + /** + * @return the doorsDown + */ + public boolean isDoorsDown() { + return doorsDown; + } + + /** + * @return the doors + */ + public ArrayList getDoors() { + return doors; + } + + /** + * @param doors the doors to set + */ + public void setDoors(ArrayList doors) { + this.doors = doors; + } } diff --git a/core/src/com/dungeoncrawler/view/MapGenerator.java b/core/src/com/dungeoncrawler/view/MapGenerator.java index 18679b9..1185dd8 100644 --- a/core/src/com/dungeoncrawler/view/MapGenerator.java +++ b/core/src/com/dungeoncrawler/view/MapGenerator.java @@ -30,6 +30,9 @@ public class MapGenerator { Texture amulet; Texture key; Texture potion; + Texture doorTop; + Texture doorLeft; + Texture doorRight; public MapGenerator(Texture[] tiles){ allTiles = new TextureRegion[7][][]; @@ -41,6 +44,10 @@ public class MapGenerator { amulet = new Texture("sprites/amulet.png"); key = new Texture("sprites/key.png"); potion = new Texture("sprites/potion.png"); + doorTop = new Texture("sprites/door.png"); + doorLeft = new Texture("sprites/doorleft.png"); + doorRight = new Texture("sprites/doorright.png"); + } public Map generateMap(Dungeon d){ @@ -115,6 +122,14 @@ public class MapGenerator { staticLayer.getCell((tempX / 2) + 1, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[0][0])); //oben3 staticLayer.getCell((tempX / 2) + 0, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[3][5])); //oben3-1 staticLayer.getCell((tempX / 2) + 2, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[2][5])); //oben3+1 + + AnimatedObject door = new AnimatedObject(this.doorTop, 48, 144); + + door.setSpritePosition(((tempX / 2) + 1) * 48, (tempY + 1) * 48); + door.setFrame(9); + door.updateTexture(); + + temp.getDoors().add(door); } collisionLayer.getObjects().remove(top); @@ -150,8 +165,13 @@ public class MapGenerator { tempObject.getSprite().setPosition((tempX + 1) * 48, ((tempY / 2) + 2) * 48); temp.getObjects().add(tempObject); - RectangleMapObject door = new RectangleMapObject(mapDimensionX*48 - 48, (mapDimensionY / 2) * 48, 48, 48); - doorLayer.getObjects().add(door); + AnimatedObject door = new AnimatedObject(this.doorRight, 48, 144); + door.setSpritePosition((tempX + 1) * 48, ((tempY / 2) + 1) * 48); + + door.setFrame(9); + door.updateTexture(); + + temp.getDoors().add(door); } collisionLayer.getObjects().remove(right); @@ -161,6 +181,9 @@ public class MapGenerator { collisionLayer.getObjects().add(tempTop); collisionLayer.getObjects().add(tempBottom); + + RectangleMapObject door = new RectangleMapObject(mapDimensionX*48 - 48, (mapDimensionY / 2) * 48, 48, 48); + doorLayer.getObjects().add(door); } // Ausgang unten @@ -177,6 +200,14 @@ public class MapGenerator { staticLayer.getCell((tempX / 2) + 0, 0).setTile(new StaticTiledMapTile(splitTiles[4][5])); //unten-1 staticLayer.getCell((tempX / 2) + 1, 0).setTile(new StaticTiledMapTile(splitTiles[0][0])); //unten1 staticLayer.getCell((tempX / 2) + 2, 0).setTile(new StaticTiledMapTile(splitTiles[4][4])); //unten2 + + AnimatedObject door = new AnimatedObject(this.doorTop, 48, 144); + + door.setSpritePosition(((tempX / 2) + 1) * 48, -2 * 48); + door.setFrame(9); + door.updateTexture(); + + temp.getDoors().add(door); } collisionLayer.getObjects().remove(bottom); @@ -211,6 +242,14 @@ public class MapGenerator { AnimatedObject tempObject = new AnimatedObject(torchT, 48, 96); tempObject.getSprite().setPosition(0, ((tempY / 2) + 2) * 48); temp.getObjects().add(tempObject); + + AnimatedObject door = new AnimatedObject(this.doorLeft, 48, 144); + + door.setSpritePosition(0, ((tempY / 2) + 1) * 48); + door.setFrame(9); + door.updateTexture(); + + temp.getDoors().add(door); } collisionLayer.getObjects().remove(left);