You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1554 lines
64 KiB
1554 lines
64 KiB
|
|
/*
|
|
* 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.control;
|
|
|
|
import com.badlogic.gdx.ApplicationAdapter;
|
|
import com.badlogic.gdx.Gdx;
|
|
import com.badlogic.gdx.Input;
|
|
import com.badlogic.gdx.InputProcessor;
|
|
import com.badlogic.gdx.graphics.GL20;
|
|
import com.badlogic.gdx.graphics.OrthographicCamera;
|
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
|
import com.badlogic.gdx.maps.MapLayers;
|
|
import com.badlogic.gdx.maps.MapObjects;
|
|
import com.badlogic.gdx.maps.objects.RectangleMapObject;
|
|
import com.badlogic.gdx.math.Intersector;
|
|
import com.badlogic.gdx.math.Rectangle;
|
|
import com.badlogic.gdx.math.Vector2;
|
|
import com.badlogic.gdx.utils.Array;
|
|
import com.badlogic.gdx.utils.viewport.FitViewport;
|
|
import com.badlogic.gdx.utils.viewport.StretchViewport;
|
|
import com.badlogic.gdx.utils.viewport.Viewport;
|
|
import com.dungeoncrawler.view.*;
|
|
import com.dungeoncrawler.model.Dungeon;
|
|
import com.dungeoncrawler.model.DungeonGenerator;
|
|
import com.dungeoncrawler.model.entities.*;
|
|
import com.dungeoncrawler.model.Entity;
|
|
import com.badlogic.gdx.utils.Timer;
|
|
import com.dungeoncrawler.model.ItemContainer;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
public class Controller extends ApplicationAdapter implements InputProcessor{
|
|
|
|
float GAME_WORLD_WIDTH;
|
|
float GAME_WORLD_HEIGHT;
|
|
|
|
boolean shotFrame = false;
|
|
|
|
final boolean TOUCH = true;
|
|
|
|
// CAMERA
|
|
OrthographicCamera camera;
|
|
Viewport viewport;
|
|
|
|
|
|
SpriteBatch batch;
|
|
Dungeon d;
|
|
DungeonGenerator dg;
|
|
Timer tEntities;
|
|
|
|
//SCREENS
|
|
|
|
MainMenuScreen mm;
|
|
GameScreen gs;
|
|
HudContainer hc;
|
|
PauseScreen ps;
|
|
SettingsScreen ss;
|
|
ControlsScreen cs;
|
|
EndScreen es;
|
|
|
|
//
|
|
int tileX;
|
|
int tileY;
|
|
|
|
int roomPosX;
|
|
int roomPosY;
|
|
|
|
int roomX;
|
|
int roomY;
|
|
|
|
int level;
|
|
|
|
int roomAmount;
|
|
float volume;
|
|
|
|
|
|
Timer entityMovement;
|
|
|
|
boolean isPaused;
|
|
|
|
int playerSkin;
|
|
|
|
boolean checkDoor;
|
|
boolean checkDie;
|
|
|
|
boolean end;
|
|
|
|
int kills;
|
|
|
|
@Override
|
|
public void create(){
|
|
GAME_WORLD_WIDTH = 1600;
|
|
GAME_WORLD_HEIGHT = 900;
|
|
camera = null;
|
|
viewport = null;
|
|
camera = new OrthographicCamera();
|
|
camera.update();
|
|
viewport = new FitViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera);
|
|
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
viewport.apply();
|
|
camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0);
|
|
camera.update();
|
|
|
|
checkDoor = true;
|
|
checkDie = true;
|
|
|
|
kills = 0;
|
|
|
|
end = false;
|
|
|
|
playerSkin = 0;
|
|
isPaused = false;
|
|
|
|
volume = 0.05f;
|
|
|
|
roomX = 10;
|
|
roomY = 6;
|
|
|
|
batch = new SpriteBatch();
|
|
mm = new MainMenuScreen(volume);
|
|
dg = new DungeonGenerator();
|
|
gs = null;
|
|
cs = null;
|
|
hc = null;
|
|
es = null;
|
|
|
|
d = dg.generateDungeon(roomX - 1, roomY - 1, 48, new Player());
|
|
dg.ichWillSpielen(d);
|
|
|
|
tileX = roomX / 2;
|
|
tileY = roomY / 2;
|
|
|
|
roomAmount = d.getLevel()[0].getRooms().length;
|
|
|
|
level = 0;
|
|
|
|
roomPosX = roomAmount / 2;
|
|
roomPosY = roomAmount / 2;
|
|
|
|
d.setCurrentLevel(d.getLevel()[level]);
|
|
d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]);
|
|
d.setCurrentEntities(d.getCurrentRoom().getEnemies());
|
|
|
|
d.initVisited(roomAmount);
|
|
d.updateVisited(roomPosX, roomPosY);
|
|
|
|
Gdx.input.setInputProcessor(this);
|
|
|
|
|
|
entityMovement = new Timer();
|
|
|
|
entityMovement.scheduleTask(new Timer.Task() {
|
|
@Override
|
|
public void run() {
|
|
|
|
if(gs != null){
|
|
shotFrame = false;
|
|
if(gs.player.getAttackState() == 2){
|
|
playerAttack(d.getCurrentEntities(), d.getPlayer(), d.getPlayer().getDirection());
|
|
}
|
|
|
|
for(int i = 0; i < d.getCurrentEntities().length; i++){
|
|
|
|
if(d.getCurrentEntities()[i] != null){
|
|
// Gets the collisions relevant sprites
|
|
MapObjects mapObjects = gs.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(0).getObjects();
|
|
MapObjects doors = gs.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(4).getObjects();
|
|
Rectangle playerSprite = gs.getPlayer().getFullCollisionSprite();
|
|
|
|
Entity temp = d.getCurrentEntities()[i];
|
|
|
|
int x = (int) temp.getxPos();
|
|
int y = (int) temp.getyPos();
|
|
|
|
boolean attacks = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos());
|
|
if(d.getPlayer().isToDelete()){
|
|
attacks = false;
|
|
}
|
|
// Attack starts if none is running
|
|
if(attacks && gs.entitySprites[i].getAttackState() == 0){
|
|
gs.entitySprites[i].startAttack();
|
|
}
|
|
|
|
EntitySprite tempObject = gs.entitySprites[i];
|
|
tempObject.update((int) temp.getxPos(), (int) temp.getyPos());
|
|
|
|
boolean overlaps = false;
|
|
boolean delete = false;
|
|
|
|
if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite) && temp.isTargetsPlayer()){
|
|
overlaps = true;
|
|
|
|
if(d.getCurrentEntities()[i].getType() == 2 && d.getCurrentEntities()[i].isTargetsPlayer()){
|
|
delete = true;
|
|
d.getCurrentEntities()[i].attack(d.getPlayer());
|
|
|
|
}
|
|
else{
|
|
if(d.getCurrentEntities()[i].getType() == 0 && !d.getPlayer().isToDelete()){
|
|
switch(gs.entitySprites[i].getAttackState()){
|
|
case 0:
|
|
gs.entitySprites[i].startAttack();
|
|
break;
|
|
case 1:
|
|
break;
|
|
case 2:
|
|
d.getCurrentEntities()[i].attack(d.getPlayer());
|
|
gs.entitySprites[i].resetAttackState();
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
|
|
for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){
|
|
Rectangle rectangle = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(tempObject.getCollisionSprite(), rectangle)){
|
|
overlaps = true;
|
|
|
|
if(d.getCurrentEntities()[i].getType() == 2){
|
|
delete = true;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
for(RectangleMapObject rectangleObject : doors.getByType(RectangleMapObject.class)){
|
|
Rectangle rectangle = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(tempObject.getCollisionSprite(), rectangle)){
|
|
overlaps = true;
|
|
|
|
if(d.getCurrentEntities()[i].getType() == 2){
|
|
delete = true;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(d.getCurrentEntities()[i].getType() != 2){
|
|
for(int j = 0; j < gs.entitySprites.length; j++){
|
|
if(i != j){
|
|
if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getType() != 2 && !d.getCurrentEntities()[j].isToDelete()){
|
|
if(Intersector.overlaps(tempObject.getCollisionSprite(), gs.entitySprites[j].getCollisionSprite())){
|
|
overlaps = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(temp.getType() == 2 && !temp.isTargetsPlayer()){
|
|
for(int j = 0; j < gs.entitySprites.length; j++){
|
|
if(i != j){
|
|
if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getType() != 2 && !d.getCurrentEntities()[j].getToDelete()){
|
|
if(Intersector.overlaps(tempObject.getFullCollisionSprite(), gs.entitySprites[j].getFullCollisionSprite())){
|
|
delete = true;
|
|
boolean isDead = d.getCurrentEntities()[i].attack(d.getCurrentEntities()[j]);
|
|
gs.createDmgFont((int) d.getPlayer().getDmg(),(int) d.getCurrentEntities()[j].getxPos(),(int) d.getCurrentEntities()[j].getyPos());
|
|
if(isDead){
|
|
gs.entitySprites[j].setDie(1);
|
|
d.getCurrentEntities()[j].setToDelete(true);
|
|
kills++;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(d.getCurrentEntities()[i].getType() == 1 && gs.entitySprites[i].getAttackState() == 2){
|
|
Entity arrow = d.getCurrentEntities()[i].shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos());
|
|
|
|
for(int k = 5; k < d.getCurrentEntities().length; k++){
|
|
if(d.getCurrentEntities()[k] == null){
|
|
d.getCurrentEntities()[k] = arrow;
|
|
gs.generateNewEntitySprite(arrow, k);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(gs.entitySprites[i].getAttackState() == 2){
|
|
gs.entitySprites[i].resetAttackState();
|
|
}
|
|
|
|
if(overlaps){
|
|
d.getCurrentEntities()[i].setxPos(x);
|
|
d.getCurrentEntities()[i].setyPos(y);
|
|
|
|
tempObject.update(x, y);
|
|
}
|
|
|
|
gs.entitySprites[i] = tempObject;
|
|
|
|
|
|
|
|
if(delete || d.getCurrentEntities()[i].isToDelete()){
|
|
if(d.getCurrentEntities()[i].getType()== 2){
|
|
d.getPlayer().addExp(d.getCurrentEntities()[i].getExp());
|
|
System.out.println(d.getCurrentEntities()[i].getExp());
|
|
d.getCurrentEntities()[i] = null;
|
|
|
|
gs.deleteEntitySprite(i);
|
|
}
|
|
else{
|
|
if(gs.entitySprites[i].getDie() == 0){
|
|
gs.entitySprites[i].setDie(1);
|
|
}
|
|
else if(gs.entitySprites[i].getDie() == 2){
|
|
//d.getCurrentEntities()[i] = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
gs.updateDamageContainer();
|
|
}
|
|
}
|
|
|
|
if(!hasEnemies()){
|
|
gs.getM().getMaps()[level][roomPosX][roomPosY].raiseDoors();
|
|
}
|
|
}
|
|
}
|
|
},0, 0.03f);
|
|
|
|
}
|
|
|
|
@Override
|
|
public void resize(int width, int height){
|
|
viewport.update(width, height);
|
|
camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0);
|
|
}
|
|
|
|
|
|
@Override
|
|
public void render(){
|
|
Gdx.gl.glClearColor(0, 0, 0, 1);
|
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
|
if(end){
|
|
if(es == null){
|
|
isPaused = true;
|
|
entityMovement.stop();
|
|
gs.end();
|
|
GAME_WORLD_WIDTH = 1600;
|
|
GAME_WORLD_HEIGHT = 900;
|
|
camera = null;
|
|
viewport = null;
|
|
camera = new OrthographicCamera();
|
|
camera.update();
|
|
viewport = new FitViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera);
|
|
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
viewport.apply();
|
|
camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0);
|
|
camera.update();
|
|
batch.setProjectionMatrix(camera.combined);
|
|
gs = null;
|
|
hc = null;
|
|
es = new EndScreen(kills);
|
|
}
|
|
es.render(batch, volume);
|
|
return;
|
|
}
|
|
if(mm != null){
|
|
mm.render(batch);
|
|
}
|
|
if(ss != null){
|
|
ss.render(batch, volume);
|
|
}
|
|
if(cs != null){
|
|
cs.render(batch);
|
|
}
|
|
if(ps != null){
|
|
ps.render(batch, volume, camera);
|
|
}
|
|
|
|
//PASSIERT IN GAMESCREEN
|
|
if(gs != null && mm == null && isPaused == false && es == null){
|
|
|
|
float tempX = d.getPlayer().getxPos();
|
|
float tempY = d.getPlayer().getyPos();
|
|
// Position des Players, etc. werden aktualisiert
|
|
updateObjects(level, roomPosX, roomPosY);
|
|
|
|
|
|
// tile[] beinhaltet die x und y Nummer des tiles, in dem sich der Player befindet
|
|
tileX = (int) d.getPlayer().getxPos() / 48;
|
|
tileY = (int) d.getPlayer().getyPos() / 48;
|
|
|
|
if(tileX == 0 || tileX == roomX || tileY == 0 || tileY == roomY){
|
|
updateRoom((int) tempX, (int) tempY);
|
|
}
|
|
|
|
|
|
|
|
// Render methode zum rendern der einzelnen Sprites wird aufgerufen
|
|
if(gs != null){;
|
|
d.getPlayer().updateItems();
|
|
hc.updateHud(batch, d.getPlayer());
|
|
d.getPlayer().updateStats(level + 1);
|
|
gs.render(batch, d.getPlayer(), d.getCurrentEntities(), tileX, tileY, level, roomPosX, roomPosY, camera, d.getVisited(), TOUCH);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void dispose () {
|
|
batch.dispose();
|
|
}
|
|
|
|
public void updateObjects(int level, int roomPosX, int roomPosY){
|
|
|
|
MapLayers layers = gs.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers();
|
|
MapObjects objects = layers.get(0).getObjects();
|
|
MapObjects exit = layers.get(3).getObjects();
|
|
MapObjects door = layers.get(4).getObjects();
|
|
|
|
updatePlayer(objects, exit, door);
|
|
}
|
|
|
|
public void updatePlayer(MapObjects objects, MapObjects exit, MapObjects door){
|
|
|
|
float x = d.getPlayer().getxPos();
|
|
d.getPlayer().updateX();
|
|
|
|
gs.getPlayer().updateCollisionX((int) d.getPlayer().getxPos());
|
|
|
|
for(RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)){
|
|
Rectangle rectangle = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(rectangle, gs.getPlayer().getCollisionSprite())){
|
|
|
|
d.getPlayer().setxPos(x);
|
|
|
|
}
|
|
}
|
|
|
|
for(RectangleMapObject rectangleObject : exit.getByType(RectangleMapObject.class)){
|
|
Rectangle tempDoor = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(gs.getPlayer().getCollisionSprite(), tempDoor) && !d.getPlayer().checkKey()){
|
|
d.getPlayer().setxPos(x);
|
|
}
|
|
}
|
|
|
|
if(hasEnemies() && checkDoor){
|
|
for(RectangleMapObject rectangleObject : door.getByType(RectangleMapObject.class)){
|
|
Rectangle tempDoor = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(gs.getPlayer().getCollisionSprite(), tempDoor)){
|
|
d.getPlayer().setxPos(x);
|
|
}
|
|
}
|
|
}
|
|
|
|
float y = d.getPlayer().getyPos();
|
|
d.getPlayer().updateY();
|
|
gs.getPlayer().updateCollision((int) d.getPlayer().getxPos(),(int) d.getPlayer().getyPos());
|
|
|
|
for(RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)){
|
|
Rectangle rectangle = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(rectangle, gs.getPlayer().getCollisionSprite())){
|
|
|
|
d.getPlayer().setyPos(y);
|
|
|
|
}
|
|
}
|
|
|
|
for(RectangleMapObject rectangleObject : exit.getByType(RectangleMapObject.class)){
|
|
Rectangle tempDoor = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(gs.getPlayer().getCollisionSprite(), tempDoor) && !d.getPlayer().checkKey()){
|
|
d.getPlayer().setyPos(y);
|
|
|
|
}
|
|
}
|
|
|
|
if(hasEnemies() && checkDoor){
|
|
for(RectangleMapObject rectangleObject : door.getByType(RectangleMapObject.class)){
|
|
Rectangle tempDoor = rectangleObject.getRectangle();
|
|
|
|
if(Intersector.overlaps(gs.getPlayer().getCollisionSprite(), tempDoor)){
|
|
d.getPlayer().setyPos(y);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(d.getPlayer().getHp() <= 0 && checkDie){
|
|
if(gs.player.getDie() == 0){
|
|
gs.player.setDie(1);
|
|
d.getPlayer().setToDelete(true);
|
|
}
|
|
else if(gs.player.getDie() == 2){
|
|
end = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
d.getPlayer().updateDirection();
|
|
}
|
|
|
|
public void updateRoom(int tempX, int tempY){
|
|
|
|
|
|
// Temp variablen werden wieder auf ihre Plätze geschrieben
|
|
|
|
// Entities
|
|
d.getCurrentRoom().setEnemies(d.getCurrentEntities());
|
|
|
|
// Room
|
|
d.getCurrentLevel().setRoom(d.getCurrentRoom(), roomPosX, roomPosY);
|
|
|
|
// Level
|
|
d.setLevel(d.getCurrentLevel(), level);
|
|
|
|
clearEnemies();
|
|
|
|
// oben
|
|
if(tileX == (roomX / 2) && tileY == roomY){
|
|
|
|
roomPosY += 1;
|
|
d.getPlayer().setxPos((roomX / 2)* 48);
|
|
d.getPlayer().setyPos(48);
|
|
}
|
|
|
|
// rechts
|
|
if(tileX == roomX && tileY == (roomY / 2)){
|
|
|
|
roomPosX += 1;
|
|
d.getPlayer().setxPos(48);
|
|
d.getPlayer().setyPos((roomY / 2)*48);
|
|
}
|
|
|
|
// unten
|
|
if(tileX == (roomX / 2) && tileY == 0){
|
|
|
|
roomPosY -= 1;
|
|
d.getPlayer().setxPos((roomX / 2)*48);
|
|
d.getPlayer().setyPos(roomY*48 - 48);
|
|
}
|
|
|
|
// links
|
|
if(tileX == 0 && tileY == (roomY / 2)){
|
|
|
|
roomPosX -= 1;
|
|
d.getPlayer().setxPos((roomX*48) - 48);
|
|
d.getPlayer().setyPos((roomY / 2)*48);
|
|
}
|
|
|
|
if(roomPosX == d.getCurrentLevel().getExit()[0] && roomPosY == d.getCurrentLevel().getExit()[1]){
|
|
if(level < 6){
|
|
|
|
d.getPlayer().deleteKey();
|
|
gs.startUnlockScreen();
|
|
|
|
d.getPlayer().updateStats(level + 1);
|
|
|
|
|
|
level++;
|
|
|
|
tileX = roomX / 2;
|
|
tileY = roomY / 2;
|
|
|
|
int roomAmount = d.getLevel()[level].getRooms().length;
|
|
roomPosX = roomAmount / 2;
|
|
roomPosY = roomAmount / 2;
|
|
|
|
d.initVisited(roomAmount);
|
|
d.updateVisited(roomPosX, roomPosY);
|
|
}
|
|
else{ // Dungeon Exit
|
|
end = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
d.updateVisited(roomPosX, roomPosY);
|
|
|
|
d.setCurrentLevel(d.getLevel()[level]);
|
|
d.setCurrentRoom(d.getCurrentLevel().getRooms()[roomPosX][roomPosY]);
|
|
d.setCurrentEntities(d.getCurrentRoom().getEnemies());
|
|
|
|
|
|
gs.generateEntitySprites(d.getCurrentEntities());
|
|
|
|
gs.startLoadingScreen();
|
|
|
|
if(hasEnemies()){
|
|
gs.getM().getMaps()[level][roomPosX][roomPosY].lowerDoors();
|
|
}
|
|
}
|
|
|
|
|
|
public ArrayList<ItemContainer> playerPickUp(){
|
|
|
|
ArrayList<ItemContainer> tempItems = d.getCurrentRoom().getItems();
|
|
ArrayList<AnimatedObject> tempSprites = gs.getM().getMaps()[level][roomPosX][roomPosY].getMapItems();
|
|
ArrayList<ItemContainer> garbageCollector = new ArrayList<>();
|
|
|
|
for(int i = tempItems.size() - 1; i >= 0; i--){
|
|
if(tempSprites.get(i).getSprite() != null){
|
|
if(Intersector.overlaps(gs.getPlayer().getCollisionSprite(), tempSprites.get(i).getSprite().getBoundingRectangle())){
|
|
garbageCollector.add(tempItems.get(i));
|
|
|
|
|
|
tempItems.remove(i);
|
|
tempSprites.remove(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
d.getCurrentRoom().setItems(tempItems);
|
|
|
|
return garbageCollector;
|
|
|
|
}
|
|
|
|
public Entity[] playerAttack(Entity e[], Player p, int attackDirection){
|
|
EntitySprite player = gs.getPlayer();
|
|
EntitySprite[] entitySprites = gs.entitySprites;
|
|
|
|
if(player.getAttackState() == 0){
|
|
player.startAttack();
|
|
}
|
|
else if(player.getAttackState() == 1){
|
|
player.resetAttackState();
|
|
player.startAttack();
|
|
}
|
|
else if(player.getAttackState() == 2){
|
|
|
|
Rectangle collision = new Rectangle(0, 0, gs.player.getCollisionSprite().getWidth(), gs.player.getFullCollisionSprite().getHeight());
|
|
|
|
if(attackDirection == 0){
|
|
collision.setPosition(p.getxPos() - 32f, p.getyPos());
|
|
}
|
|
else if(attackDirection== 1){
|
|
collision.setPosition(p.getxPos() + 32f, p.getyPos());
|
|
}
|
|
|
|
for(int i = 0; i < e.length ; i++){
|
|
if(entitySprites[i] != null && e[i] != null){
|
|
if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), collision)){
|
|
if(entitySprites[i].getDie() == 0){
|
|
if(e[i].getHp() - p.getDmg() <= 0){
|
|
e[i].setHp(0);
|
|
gs.createDmgFont((int) p.getDmg(),(int)e[i].getxPos() + 10,(int) e[i].getyPos() + 20);
|
|
e[i].setToDelete(true);
|
|
p.addExp(e[i].getExp());
|
|
kills++;
|
|
}
|
|
else{
|
|
e[i].setHp(e[i].getHp() - p.getDmg());
|
|
gs.createDmgFont((int) p.getDmg(),(int)e[i].getxPos() + 10,(int) e[i].getyPos() + 20);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
player.resetAttackState();
|
|
}
|
|
|
|
return e;
|
|
}
|
|
|
|
@Override
|
|
public boolean keyDown(int keycode) {
|
|
|
|
if(keycode == Input.Keys.A){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().setMovementX(-d.getPlayer().getMovementSpeed());
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.D){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().setMovementX(d.getPlayer().getMovementSpeed());
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.S){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().setMovementY(-d.getPlayer().getMovementSpeed());
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.W){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().setMovementY(d.getPlayer().getMovementSpeed());
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.SPACE){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
d.setCurrentEntities(playerAttack(d.getCurrentEntities(), d.getPlayer(), 0));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if(keycode == Input.Keys.F){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
if(!d.getPlayer().inventoryFull()){
|
|
ArrayList<ItemContainer> garbage = playerPickUp();
|
|
|
|
for(ItemContainer item : garbage){
|
|
d.getPlayer().getInv().addItem(item.getItem());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.R){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().equipSlot(0);
|
|
d.getPlayer().updateItems();
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.T){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().equipSlot(1);
|
|
d.getPlayer().updateItems();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if(keycode == Input.Keys.Q){
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
if(d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected()) != null){
|
|
d.getCurrentRoom().spawnItem((int)d.getPlayer().getxPos(), (int)d.getPlayer().getyPos(), d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected()));
|
|
gs.getM().getMaps()[level][roomPosX][roomPosY].addItem(48, 48,(int)d.getPlayer().getxPos(), (int)d.getPlayer().getyPos(), d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected()));
|
|
d.getPlayer().getInv().dropItem();
|
|
d.getPlayer().updateItems();
|
|
}
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.E){
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().useItem(d.getPlayer().getInv().getSelected());
|
|
}
|
|
}
|
|
/*
|
|
if(keycode == Input.Keys.ESCAPE && !end){
|
|
if(gs != null && gs.getIsLoading() == false && isPaused == false){
|
|
stop();
|
|
}
|
|
else if(gs != null && gs.getIsLoading() == false && isPaused == true){
|
|
resume();
|
|
}
|
|
}
|
|
*/
|
|
if(keycode == Input.Keys.LEFT){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() - 1, (int) d.getPlayer().getyPos());
|
|
|
|
for(int k = 5; k < d.getCurrentEntities().length; k++){
|
|
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.UP){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() + 1);
|
|
|
|
for(int k = 5; k < d.getCurrentEntities().length; k++){
|
|
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.RIGHT){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() + 1, (int) d.getPlayer().getyPos());
|
|
|
|
for(int k = 5; k < d.getCurrentEntities().length; k++){
|
|
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.DOWN){
|
|
if(mm != null){}
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() - 1);
|
|
|
|
for(int k = 5; k < d.getCurrentEntities().length; k++){
|
|
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_0){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(0);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_1){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(0);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_2){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(1);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_3){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(2);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_4){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(3);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_5){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(4);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_6){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(5);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_7){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(6);
|
|
}
|
|
}
|
|
if(keycode == Input.Keys.NUM_8){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(7);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean keyUp(int keycode) {
|
|
if(keycode == Input.Keys.A){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null){
|
|
if(d.getPlayer().getMovementX() < 0){
|
|
d.getPlayer().setMovementX(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.D){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null){
|
|
if(d.getPlayer().getMovementX() > 0){
|
|
d.getPlayer().setMovementX(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.S){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null){
|
|
if(d.getPlayer().getMovementY() < 0){
|
|
d.getPlayer().setMovementY(0);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if(keycode == Input.Keys.W){
|
|
if(mm != null){
|
|
}
|
|
if(gs != null){
|
|
if(d.getPlayer().getMovementY() > 0){
|
|
d.getPlayer().setMovementY(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean keyTyped(char c) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean touchDown(int screenX, int screenY, int pointer, int button)
|
|
{
|
|
if(gs == null){
|
|
switch(click(screenX, screenY)){
|
|
case -1: // -1: nothing hit -- 0: go ingame -- 1: EXIT game -- 2: goto settings -- 3: goto controls -- 4: goto MainMenuScreen -- 9: volume down -- 10: volume up -- 11: restart game
|
|
break;
|
|
case 0:
|
|
mm.cleanUp();
|
|
mm = null;
|
|
GAME_WORLD_WIDTH = 700;
|
|
GAME_WORLD_HEIGHT = 394;
|
|
camera = null;
|
|
viewport = null;
|
|
camera = new OrthographicCamera();
|
|
camera.update();
|
|
viewport = new FitViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera);
|
|
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
viewport.apply();
|
|
camera.position.set(GAME_WORLD_WIDTH / 2 - 170, GAME_WORLD_HEIGHT / 2 + 20, 0);
|
|
camera.update();
|
|
batch.setProjectionMatrix(camera.combined);
|
|
gs = new GameScreen(d, volume);
|
|
gs.generateEntitySprites(d.getCurrentEntities());
|
|
hc = new HudContainer();
|
|
gs.startLoadingScreen();
|
|
break;
|
|
|
|
case 1:
|
|
mm.cleanUp();
|
|
mm = null;
|
|
GAME_WORLD_WIDTH = 700;
|
|
GAME_WORLD_HEIGHT = 394;
|
|
camera = null;
|
|
viewport = null;
|
|
camera = new OrthographicCamera();
|
|
camera.update();
|
|
viewport = new FitViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera);
|
|
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
viewport.apply();
|
|
camera.position.set(GAME_WORLD_WIDTH / 2 - 170, GAME_WORLD_HEIGHT / 2 + 20, 0);
|
|
camera.update();
|
|
batch.setProjectionMatrix(camera.combined);
|
|
gs = new GameScreen(d, volume);
|
|
break;
|
|
|
|
case 2:
|
|
mm.hide();
|
|
cs = null;
|
|
GAME_WORLD_WIDTH = 1600;
|
|
GAME_WORLD_HEIGHT = 900;
|
|
camera = null;
|
|
viewport = null;
|
|
camera = new OrthographicCamera();
|
|
camera.update();
|
|
viewport = new FitViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera);
|
|
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
viewport.apply();
|
|
camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0);
|
|
camera.update();
|
|
batch.setProjectionMatrix(camera.combined);
|
|
ss = new SettingsScreen();
|
|
break;
|
|
|
|
case 3:
|
|
if(mm != null){
|
|
mm.hide();
|
|
}
|
|
ss = null;
|
|
cs = new ControlsScreen();
|
|
break;
|
|
|
|
case 4:
|
|
ss = null;
|
|
cs = null;
|
|
mm.show();
|
|
break;
|
|
|
|
case 5:
|
|
resume();
|
|
break;
|
|
|
|
case 6:
|
|
d.getPlayer().setSkin(mm.getSkin());
|
|
d.getPlayer().setGender(mm.getGender());
|
|
break;
|
|
|
|
|
|
case 9:
|
|
if(volume > 0f){
|
|
volume -= 0.05f;
|
|
}
|
|
if(mm != null){
|
|
mm.music.setVolume(volume);
|
|
}
|
|
if(gs != null){
|
|
gs.music.setVolume(volume);
|
|
}
|
|
break;
|
|
case 10:
|
|
if(volume < 1f){
|
|
volume += 0.05f;
|
|
}
|
|
|
|
if(mm != null){
|
|
mm.music.setVolume(volume);
|
|
}
|
|
if(gs != null){
|
|
gs.music.setVolume(volume);
|
|
}
|
|
break;
|
|
case 11:
|
|
|
|
create();
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
if(gs != null){
|
|
if(!d.getPlayer().isToDelete()) {
|
|
ArrayList<Integer> clicked = gs.click(screenX,screenY, viewport);
|
|
d.getPlayer().setMovementX(0);
|
|
d.getPlayer().setMovementY(0);
|
|
for (Integer i : clicked) {
|
|
switch (i) { // -1: nix, 0: left, 1: up, 2: right, 3: down, 4: attackLeft, 5: attackUp, 6: attackRight, 7: attackDown, 8: pickUp
|
|
case 0:
|
|
if(TOUCH)
|
|
d.getPlayer().setMovementX(-d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 1:
|
|
if(TOUCH)
|
|
d.getPlayer().setMovementY(d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 2:
|
|
if(TOUCH)
|
|
d.getPlayer().setMovementX(d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 3:
|
|
if(TOUCH)
|
|
d.getPlayer().setMovementY(-d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 4:
|
|
if(TOUCH)
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
shotFrame = true;
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() - 1, (int) d.getPlayer().getyPos());
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
if(TOUCH)
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
shotFrame = true;
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() + 1);
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 6:
|
|
if(TOUCH)
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
shotFrame = true;
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() + 1, (int) d.getPlayer().getyPos());
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 7:
|
|
if(TOUCH)
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
shotFrame = true;
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() - 1);
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 8:
|
|
if(TOUCH)
|
|
// pickUp
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
if(!d.getPlayer().inventoryFull()){
|
|
ArrayList<ItemContainer> garbage = playerPickUp();
|
|
|
|
for(ItemContainer item : garbage){
|
|
d.getPlayer().getInv().addItem(item.getItem());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 9:
|
|
if(TOUCH)
|
|
// equip1
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().equipSlot(0);
|
|
d.getPlayer().updateItems();
|
|
}
|
|
break;
|
|
case 10:
|
|
// drop
|
|
if(TOUCH)
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
if(d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected()) != null){
|
|
d.getCurrentRoom().spawnItem((int)d.getPlayer().getxPos(), (int)d.getPlayer().getyPos(), d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected()));
|
|
gs.getM().getMaps()[level][roomPosX][roomPosY].addItem(48, 48,(int)d.getPlayer().getxPos(), (int)d.getPlayer().getyPos(), d.getPlayer().getInv().getItem(d.getPlayer().getInv().getSelected()));
|
|
d.getPlayer().getInv().dropItem();
|
|
d.getPlayer().updateItems();
|
|
}
|
|
}
|
|
break;
|
|
case 11:
|
|
// equip2
|
|
if(TOUCH)
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().equipSlot(1);
|
|
d.getPlayer().updateItems();
|
|
}
|
|
break;
|
|
case 12:
|
|
// use
|
|
if(TOUCH)
|
|
if(gs != null && gs.getIsLoading() == false && !d.getPlayer().isToDelete()){
|
|
d.getPlayer().useItem(d.getPlayer().getInv().getSelected());
|
|
}
|
|
break;
|
|
case 20:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(0);
|
|
}
|
|
break;
|
|
case 21:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(1);
|
|
}
|
|
break;
|
|
case 22:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(2);
|
|
}
|
|
break;
|
|
case 23:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(3);
|
|
}
|
|
break;
|
|
case 24:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(4);
|
|
}
|
|
break;
|
|
case 25:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(5);
|
|
}
|
|
break;
|
|
case 26:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(6);
|
|
}
|
|
break;
|
|
case 27:
|
|
if(!d.getPlayer().isToDelete()){
|
|
d.getPlayer().getInv().setSelected(7);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public int click(int x, int y){
|
|
if(es != null){
|
|
return es.click(x, y);
|
|
}
|
|
if(ps != null){
|
|
return ps.click(x,y, viewport);
|
|
}
|
|
if(mm != null && !mm.getHidden()){
|
|
return mm.click(x, y, viewport);
|
|
}
|
|
if(ss != null){
|
|
return ss.click(x, y, viewport);
|
|
}
|
|
if(cs != null){
|
|
return cs.click(x, y);
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean touchUp(int screenX, int screenY, int i2, int i3) {
|
|
if(gs != null){
|
|
ArrayList<Integer> e = gs.click(screenX,screenY, viewport);
|
|
Vector2 mov = new Vector2(d.getPlayer().getMovementX(), d.getPlayer().getMovementY());
|
|
if(e.contains(0) && !shotFrame){
|
|
d.getPlayer().setMovementX(0);
|
|
}
|
|
if(e.contains(1) && !shotFrame){
|
|
d.getPlayer().setMovementY(0);
|
|
}
|
|
if(e.contains(2) && !shotFrame){
|
|
d.getPlayer().setMovementX(0);
|
|
}
|
|
if(e.contains(3) && !shotFrame){
|
|
d.getPlayer().setMovementY(0);
|
|
}
|
|
if(shotFrame){
|
|
d.getPlayer().setMovementX(mov.x);
|
|
d.getPlayer().setMovementY(mov.y);
|
|
}
|
|
/*
|
|
for (Integer i : gs.click(screenX,screenY)) {
|
|
switch (i) { // -1: nix, 0: left, 1: up, 2: right, 3: down, 4: attackLeft, 5: attackUp, 6: attackRight, 7: attackDown
|
|
case 0:
|
|
d.getPlayer().setMovementX(-d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 1:
|
|
d.getPlayer().setMovementY(d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 2:
|
|
d.getPlayer().setMovementX(d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 3:
|
|
d.getPlayer().setMovementY(-d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 4:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() - 1, (int) d.getPlayer().getyPos());
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() + 1);
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 6:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() + 1, (int) d.getPlayer().getyPos());
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 7:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() - 1);
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
*/
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean touchDragged(int screenX, int screenY, int i2) {
|
|
|
|
if(gs != null && TOUCH){
|
|
if(!d.getPlayer().isToDelete()) {
|
|
if(!gs.click(screenX,screenY, viewport).contains(0) && !gs.click(screenX,screenY, viewport).contains(2)) {
|
|
d.getPlayer().setMovementX(0);
|
|
}
|
|
if(!gs.click(screenX,screenY, viewport).contains(1) && !gs.click(screenX,screenY, viewport).contains(3)) {
|
|
d.getPlayer().setMovementY(0);
|
|
}
|
|
for (Integer i : gs.click(screenX,screenY, viewport)) {
|
|
switch (i) { // -1: nix, 0: left, 1: up, 2: right, 3: down, 4: attackLeft, 5: attackUp, 6: attackRight, 7: attackDown
|
|
case 0:
|
|
d.getPlayer().setMovementX(-d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 1:
|
|
d.getPlayer().setMovementY(d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 2:
|
|
d.getPlayer().setMovementX(d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 3:
|
|
d.getPlayer().setMovementY(-d.getPlayer().getMovementSpeed());
|
|
break;
|
|
case 4:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() - 1, (int) d.getPlayer().getyPos());
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() + 1);
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 6:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos() + 1, (int) d.getPlayer().getyPos());
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 7:
|
|
if (!gs.getIsLoading() && !d.getPlayer().isToDelete()) {
|
|
Entity lol = d.getPlayer().shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos() - 1);
|
|
|
|
for (int k = 5; k < d.getCurrentEntities().length; k++) {
|
|
if (d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1) {
|
|
d.getCurrentEntities()[k] = lol;
|
|
gs.generateNewEntitySprite(lol, k);
|
|
gs.player.startSecondaryAttack();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean mouseMoved(int i, int i1) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean scrolled(int i) {
|
|
if(gs != null){
|
|
if(i == -1 && d.getPlayer().getInv().getSelected() == 0){return true;}
|
|
else if(i == 1 && d.getPlayer().getInv().getSelected() == 7){return true;}
|
|
else{
|
|
d.getPlayer().getInv().scroll(i);
|
|
return true;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public void stop(){
|
|
isPaused = true;
|
|
entityMovement.stop();
|
|
gs.stop();
|
|
cs = null;
|
|
GAME_WORLD_WIDTH = 1600;
|
|
GAME_WORLD_HEIGHT = 900;
|
|
camera = null;
|
|
viewport = null;
|
|
camera = new OrthographicCamera();
|
|
camera.update();
|
|
viewport = new FitViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera);
|
|
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
viewport.apply();
|
|
camera.position.set(GAME_WORLD_WIDTH / 2, GAME_WORLD_HEIGHT / 2, 0);
|
|
camera.update();
|
|
ps = new PauseScreen();
|
|
}
|
|
public void resume(){
|
|
GAME_WORLD_WIDTH = 700;
|
|
GAME_WORLD_HEIGHT = 394;
|
|
camera = null;
|
|
viewport = null;
|
|
camera = new OrthographicCamera();
|
|
camera.update();
|
|
viewport = new FitViewport(GAME_WORLD_WIDTH, GAME_WORLD_HEIGHT, camera);
|
|
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
viewport.apply();
|
|
camera.position.set(GAME_WORLD_WIDTH / 2 - 170, GAME_WORLD_HEIGHT / 2 + 20, 0);
|
|
camera.update();
|
|
isPaused = false;
|
|
entityMovement.start();
|
|
gs.resume();
|
|
|
|
|
|
ps = null;
|
|
gs.startLoadingScreen();
|
|
}
|
|
|
|
public boolean hasEnemies(){
|
|
for(Entity e : d.getCurrentEntities()){
|
|
if(e != null && !e.isToDelete()){
|
|
if(e.isTargetsPlayer()){
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void clearEnemies(){
|
|
for(int i = 0; i < d.getCurrentEntities().length; i++){
|
|
Entity e = d.getCurrentEntities()[i];
|
|
|
|
if(e != null && !e.isToDelete()){
|
|
if(!e.isTargetsPlayer()){
|
|
d.getCurrentEntities()[i] = null;
|
|
//gs.deleteEntitySprite(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|