Merge branch 'jonathan2'

lol
master
Jonathan Hager 6 years ago
commit 797347e1ee

@ -103,143 +103,140 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
entityMovement = new Timer();
entityMovement.scheduleTask(new Timer.Task() {
@Override
public void run() {
if(gs != null){
//m.updateEntitySprite(d.getCurrentEntities());
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();
Rectangle playerSprite = gs.getPlayer().getCollisionSprite();
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(attacks && gs.entitySprites[i].getAttackState() == 0){
gs.entitySprites[i].startAttack();
}
@Override
public void run() {
if(gs != null){
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();
Rectangle playerSprite = gs.getPlayer().getFullCollisionSprite();
Entity temp = d.getCurrentEntities()[i];
EntitySprite tempObject = gs.entitySprites[i];
tempObject.update((int) temp.getxPos(), (int) temp.getyPos());
int x = (int) temp.getxPos();
int y = (int) temp.getyPos();
boolean overlaps = false;
boolean delete = false;
if(d.getCurrentEntities()[i].getId() == 2){
if(Intersector.overlaps(tempObject.getCollisionSprite(), gs.getPlayer().getFullCollisionSprite())){
overlaps = true;
delete = true;
boolean attacks = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos());
// Attacke wird gestartet, wenn noch keine laueft
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)){
overlaps = true;
if(d.getCurrentEntities()[i].getType() == 2){
delete = true;
d.getCurrentEntities()[i].attack(d.getPlayer());
}
else{
if(d.getCurrentEntities()[i].getType() == 0){
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 if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite)){
overlaps = true;
if(d.getCurrentEntities()[i].getId() != 0){
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;
}
else{
for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){
Rectangle rectangle = rectangleObject.getRectangle();
if(Intersector.overlaps(tempObject.getCollisionSprite(), rectangle)){
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].getId() != 2){
if(Intersector.overlaps(tempObject.getCollisionSprite(), gs.entitySprites[j].getCollisionSprite())){
overlaps = true;
if(d.getCurrentEntities()[i].getId() == 2){
delete = true;
}
break;
}
}
if(d.getCurrentEntities()[i].getId() != 2){
for(int j = 0; j < gs.entitySprites.length; j++){
if(i != j){
if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getId() != 2){
if(Intersector.overlaps(tempObject.getCollisionSprite(), gs.entitySprites[j].getCollisionSprite())){
overlaps = true;
break;
}
}
}
}
}
}
}
if(gs.entitySprites[i].getAttackState() == 2 && d.getCurrentEntities()[i].getId() != 0){
gs.entitySprites[i].resetAttackState();
}
if(gs.player.getAttackState() == 2){
playerAttack(d.getCurrentEntities(), d.getPlayer(), d.getPlayer().getDirection());
}
if(overlaps){
d.getCurrentEntities()[i].setxPos(x);
d.getCurrentEntities()[i].setyPos(y);
}
}
tempObject.update(x, y);
}
}
gs.entitySprites[i] = tempObject;
if(d.getCurrentEntities()[i].getId() == 0 && gs.entitySprites[i].getAttackState() == 2){
for(int k = 5; k < d.getCurrentEntities().length; k++){
if(d.getCurrentEntities()[k] == null){
Entity arrow = d.getCurrentEntities()[i].shoot((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos());
arrow.setxPos(d.getCurrentEntities()[i].getxPos() + 32);
arrow.setyPos(d.getCurrentEntities()[i].getyPos() + 32);
d.getCurrentEntities()[k] = arrow;
gs.generateNewEntitySprite(arrow, k);
gs.entitySprites[i].resetAttackState();
break;
}
}
}
if(delete || d.getCurrentEntities()[i].isToDelete()){
if(d.getCurrentEntities()[i].getId() == 2){
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;
}
}
}
if(gs.entitySprites[i].getAttackState() == 2 && d.getCurrentEntities()[i].getType() != 0){
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(d.getCurrentEntities()[i].getType()== 0 && 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);
gs.entitySprites[i].resetAttackState();
break;
}
}
}
}
}
if(delete || d.getCurrentEntities()[i].isToDelete()){
if(d.getCurrentEntities()[i].getId() == 2){
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;
}
}
}
}
},0, 0.03f);
}
}
}
},0, 0.03f);
}
@ -455,42 +452,23 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
}
else if(player.getAttackState() == 2){
if(attackDirection== 0){
Texture attackTexture = new Texture("sprites/AttackVert.png");
Sprite attackSprite = new Sprite(attackTexture);
attackSprite.setX(p.getxPos() - 32f);
attackSprite.setY(p.getyPos() - 8f);
for(int i = 0; i < e.length ; i++){
if(entitySprites[i] != null){
if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){
if(e[i] != null){
if(e[i].getHp() - p.getDmg() <= 0){
e[i].setToDelete(true);
}
else{
e[i].setHp(e[i].getHp() - p.getDmg());
}
}
}
}
}
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){
Texture attackTexture = new Texture("sprites/AttackVert.png");
Sprite attackSprite = new Sprite(attackTexture);
attackSprite.setX(p.getxPos()+ 32f);
attackSprite.setY(p.getyPos()- 2f);
for(int i = 0; i< e.length ; i++){
if(entitySprites[i] != null){
if(Intersector.overlaps(entitySprites[i].getCollisionSprite(), attackSprite.getBoundingRectangle())){
if(e[i] != null){
if(e[i].getHp() - p.getDmg() <= 0){
e[i].setToDelete(true);
}
else{
e[i].setHp(e[i].getHp() - p.getDmg());
}
}
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(e[i].getHp() - p.getDmg() <= 0){
e[i].setToDelete(true);
}
else{
e[i].setHp(e[i].getHp() - p.getDmg());
}
}
}

@ -298,6 +298,10 @@ public class DungeonGenerator {
temp = new Swordsman(xPos, yPos, lvl);
break;
case 2:
temp = new Wizard(xPos, yPos, lvl);
break;
default:
temp = null;
}

@ -11,6 +11,7 @@ public abstract class Entity {
protected float movementX;
protected float movementY;
protected int id;
protected int type;
protected int direction;
protected Inventory inv;
private boolean toDelete;
@ -177,5 +178,12 @@ public abstract class Entity {
public void setToDelete(boolean toDelete) {
this.toDelete = toDelete;
}
/**
* @return the type
*/
public int getType() {
return type;
}
}

@ -11,9 +11,10 @@ public class Archer extends Entity{
this.maxhp = 5*lvl;
this.hp = this.maxhp;
this.direction = 2;
this.direction = 1;
this.dmg = 3*lvl;
this.id = 0;
this.type = 1;
counter = 0;
// TODO: Sinnvolle Werte finden
@ -113,7 +114,7 @@ public class Archer extends Entity{
alpha = 2*Math.PI - alpha;
}
}
a = new Arrow(this.xPos, this.yPos, this.lvl, 0);
a = new Arrow(this.xPos + 32, this.yPos + 32, this.lvl, 0);
movementX = (int) (6 * Math.cos(alpha));
movementY = (int) (6 * Math.sin(alpha));

@ -21,6 +21,7 @@ public class Arrow extends Entity{
this.direction = direction;
this.dmg = 3*lvl;
this.id = 2;
type = 2;
this.lifetime = 0;
}

@ -27,6 +27,7 @@ public class Player extends Entity {
this.dmg = 3*lvl;
this.standartDmg = dmg;
id = -1;
type = -1;
inv = new Inventory(3,2);
// TODO: Sinnvolle Werte finden

@ -9,9 +9,10 @@ public class Swordsman extends Entity {
this.maxhp = 5*lvl;
this.hp = this.maxhp;
this.direction = 2;
this.direction = 1;
this.dmg = 3*lvl;
this.id = 1;
this.type = 0;
// TODO: Sinnvolle Werte finden
direction = 2;

@ -0,0 +1,143 @@
/*
* 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.model.entities;
import com.dungeoncrawler.model.Entity;
/**
*
* @author jonathan
*/
public class Wizard extends Entity{
int counter;
public Wizard(float xPos, float yPos, int lvl) {
super(xPos, yPos, lvl);
this.maxhp = 5*lvl;
this.hp = this.maxhp;
this.direction = 1;
this.dmg = 3*lvl;
this.id = 3;
this.type = 1;
counter = 0;
// TODO: Sinnvolle Werte finden
direction = 1;
}
@Override
public boolean move(int xPosPlayer, int yPosPlayer) {
if(!isToDelete()){
float deltaX = xPosPlayer - (int) xPos;
float deltaY = yPosPlayer - (int) yPos;
double alpha;
if(deltaX == 0 && deltaY >= 0){
alpha = Math.PI / 2;
}
else if(deltaX == 0 && deltaY < 0){
alpha = Math.PI / -2;
}
else{
alpha = Math.abs(Math.atan(deltaY / deltaX));
if(deltaX < 0 && deltaY < 0){
alpha = Math.PI + alpha;
}
else if(deltaX < 0 && deltaY > 0){
alpha = Math.PI - alpha;
}
else if(deltaX > 0 && deltaY < 0){
alpha = 2*Math.PI - alpha;
}
}
int distance = (int) Math.abs((deltaY / Math.sin(alpha)));
if(distance >= 104 && distance <= 184 && counter % 40 == 0){
return true;
}
else{
movementX = (int) (3 * Math.cos(alpha));
movementY = (int) (3 * Math.sin(alpha));
System.out.println(distance);
if(distance < 124){
movementX *= -1;
movementY *= -1;
}
else if(distance >= 124 && distance <= 164){
movementX = 0;
movementY = 0;
}
xPos += movementX;
yPos += movementY;
}
if(alpha >= Math.PI / -2 && alpha <= Math.PI / 2){
setDirection(1);
}
else{
setDirection(0);
}
counter++;
}
return false;
}
@Override
public Entity shoot(int xPosPlayer, int yPosPlayer){
Arrow a = null;
if(!isToDelete()){
float deltaX = xPosPlayer - (int) xPos;
float deltaY = yPosPlayer - (int) yPos;
double alpha;
if(deltaX == 0 && deltaY >= 0){
alpha = Math.PI / 2;
}
else if(deltaX == 0 && deltaY < 0){
alpha = Math.PI / -2;
}
else{
alpha = Math.abs(Math.atan(deltaY / deltaX));
if(deltaX < 0 && deltaY < 0){
alpha = Math.PI + alpha;
}
else if(deltaX < 0 && deltaY > 0){
alpha = Math.PI - alpha;
}
else if(deltaX > 0 && deltaY < 0){
alpha = 2*Math.PI - alpha;
}
}
a = new Arrow(this.xPos + 32, this.yPos + 32, this.lvl, 0);
movementX = (int) (6 * Math.cos(alpha));
movementY = (int) (6 * Math.sin(alpha));
a.setMovementX(movementX);
a.setMovementY(movementY);
a.setAngle(alpha);
if((alpha >= 0 && alpha <= Math.PI / 2) || (alpha <= 2 * Math.PI && alpha >= 2 * Math.PI - Math.PI / 2)){
setDirection(1);
}
else{
setDirection(0);
}
}
return a;
}
}

@ -249,17 +249,28 @@ public class GameScreen {
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/archer.png");
entitySprites[i] = new EntitySprite(tx, 64, 64);
}
if(e.getId() == 1){
tx[0] = new Texture("sprites/swordsman.png");
entitySprites[i] = new EntitySprite(tx, 64, 64);
}
if(e.getId() == 2){
tx[0] = new Texture("sprites/arrow.png");
entitySprites[i] = new EntitySprite(tx, 36, 15);
//nimmt entity ID -> 0 = Archer || 1 = Swordsman || 2 = Arrow || 3 = Wizard
switch(e.getId()){
case 0:
tx[0] = new Texture("sprites/archer.png");
entitySprites[i] = new EntitySprite(tx, 64, 64);
break;
case 1:
tx[0] = new Texture("sprites/swordsman.png");
entitySprites[i] = new EntitySprite(tx, 64, 64);
break;
case 2:
tx[0] = new Texture("sprites/arrow.png");
entitySprites[i] = new EntitySprite(tx, 36, 15);
break;
case 3:
tx[0] = new Texture("sprites/wizard.png");
entitySprites[i] = new EntitySprite(tx, 64, 64);
break;
}
entitySprites[i].update((int) e.getxPos() + 32, (int) e.getyPos() + 32);

Loading…
Cancel
Save