ultra mega laser party

master
Jonathan Hager 6 years ago
parent 45544c3406
commit 958b70dc2a

@ -0,0 +1,57 @@
/*
* 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;
/**
*
* @author jonathan
*/
public class StaticMath {
public static double calculateAngle(int xPos1, int yPos1, int xPos2, int yPos2){
float deltaX = xPos2 - xPos1;
float deltaY = yPos2 - yPos1;
double alpha;
if(deltaY == 0){
if(deltaX < 0){
alpha = Math.PI;
}
else{
alpha = 0;
}
}
else 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;
}
}
return alpha;
}
public static double calculateDistance(int xPos1, int yPos1, int xPos2, int yPos2, double angle){
float deltaX = xPos2 - xPos1;
float deltaY = yPos2 - yPos1;
double distance = Math.abs((deltaY / Math.sin(angle)));
return distance;
}
}

@ -113,6 +113,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
}
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();
@ -136,7 +137,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
boolean overlaps = false;
boolean delete = false;
if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite)){
if(Intersector.overlaps(tempObject.getCollisionSprite(), playerSprite) && temp.isTargetsPlayer()){
overlaps = true;
if(d.getCurrentEntities()[i].getType() == 2 && d.getCurrentEntities()[i].isTargetsPlayer()){
@ -161,6 +162,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
}
}
else{
for(RectangleMapObject rectangleObject : mapObjects.getByType(RectangleMapObject.class)){
Rectangle rectangle = rectangleObject.getRectangle();
@ -178,7 +180,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
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(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;
@ -187,7 +189,24 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
}
}
}
}
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){
if(Intersector.overlaps(tempObject.getFullCollisionSprite(), gs.entitySprites[j].getFullCollisionSprite())){
delete = true;
boolean isDead = d.getCurrentEntities()[i].attack(d.getCurrentEntities()[j]);
if(isDead){
gs.entitySprites[j].setDie(1);
d.getCurrentEntities()[j].setToDelete(true);
}
break;
}
}
}
}
}
if(d.getCurrentEntities()[i].getType() == 1 && gs.entitySprites[i].getAttackState() == 2){
@ -571,9 +590,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
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){
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
d.getCurrentEntities()[k] = lol;
gs.generateNewEntitySprite(lol, k);
gs.player.startSecondaryAttack();
break;
}
}
@ -586,9 +606,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
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){
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
d.getCurrentEntities()[k] = lol;
gs.generateNewEntitySprite(lol, k);
gs.player.startSecondaryAttack();
break;
}
}
@ -600,9 +621,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
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){
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
d.getCurrentEntities()[k] = lol;
gs.generateNewEntitySprite(lol, k);
gs.player.startSecondaryAttack();
break;
}
}
@ -614,9 +636,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{
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){
if(d.getCurrentEntities()[k] == null && gs.player.getSecondaryAttackState() != 1){
d.getCurrentEntities()[k] = lol;
gs.generateNewEntitySprite(lol, k);
gs.player.startSecondaryAttack();
break;
}
}

@ -31,12 +31,14 @@ public abstract class Entity {
this.targetsPlayer = true;
}
public void attack(Entity e){
public boolean attack(Entity e){
if(e.getHp() - this.dmg < 0){
e.setHp(1);
return true;
}
else{
e.setHp(e.getHp() - this.dmg);
return false;
}
}

@ -1,5 +1,6 @@
package com.dungeoncrawler.model.entities;
import com.dungeoncrawler.StaticMath;
import com.dungeoncrawler.model.Entity;
public class Archer extends Entity{
@ -25,31 +26,9 @@ public class Archer extends Entity{
@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)));
double alpha = StaticMath.calculateAngle((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer);
int distance = (int) StaticMath.calculateDistance((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer, alpha);
if(distance >= 104 && distance <= 184 && counter % 40 == 0){
return true;
@ -91,35 +70,14 @@ public class Archer extends Entity{
Projectile a = null;
if(!isToDelete()){
float deltaX = xPosPlayer - (int) xPos;
float deltaY = yPosPlayer - (int) yPos;
double alpha = StaticMath.calculateAngle((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer);
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 Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 2, true);
movementX = (int) (6 * Math.cos(alpha));
movementY = (int) (6 * Math.sin(alpha));
int tempX = (int) (6 * Math.cos(alpha));
int tempY = (int) (6 * Math.sin(alpha));
a.setMovementX(movementX);
a.setMovementY(movementY);
a.setMovementX(tempX);
a.setMovementY(tempY);
a.setAngle(alpha);
if((alpha >= 0 && alpha <= Math.PI / 2) || (alpha <= 2 * Math.PI && alpha >= 2 * Math.PI - Math.PI / 2)){

@ -5,6 +5,7 @@
*/
package com.dungeoncrawler.model.entities;
import com.dungeoncrawler.StaticMath;
import com.dungeoncrawler.model.Entity;
import com.dungeoncrawler.model.Inventory;
import com.dungeoncrawler.model.Item;
@ -20,9 +21,9 @@ public class Player extends Entity {
public Player() {
super(200, 200, 1);
this.maxhp = 20 * (lvl + 1);
this.maxhp = 20 * lvl;
this.hp = this.maxhp;
this.standartMaxHp = 5 * (lvl + 1);
this.standartMaxHp = 5 * lvl;
this.dmg = 3*lvl;
this.standartDmg = dmg;
@ -61,40 +62,11 @@ public class Player extends Entity {
Projectile a = null;
if(!isToDelete()){
float deltaX = xPosPlayer - (int) xPos;
float deltaY = yPosPlayer - (int) yPos;
double alpha;
if(deltaY == 0){
if(deltaX < 0){
alpha = Math.PI;
}
else{
alpha = 0;
}
}
else 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 Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 2, false);
int tempMovementX = (int) (6 * Math.cos(alpha));
int tempMovementY = (int) (6 * Math.sin(alpha));
double alpha = StaticMath.calculateAngle((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer);
a = new Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 5, false);
int tempMovementX = (int) (8 * Math.cos(alpha));
int tempMovementY = (int) (8 * Math.sin(alpha));
a.setMovementX(tempMovementX);
a.setMovementY(tempMovementY);

@ -1,5 +1,6 @@
package com.dungeoncrawler.model.entities;
import com.dungeoncrawler.StaticMath;
import com.dungeoncrawler.model.Entity;
public class Swordsman extends Entity {
@ -21,29 +22,7 @@ public class Swordsman extends Entity {
@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;
}
}
double alpha = StaticMath.calculateAngle((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer);
movementX = (int) (3 * Math.cos(alpha));
movementY = (int) (3 * Math.sin(alpha));

@ -5,6 +5,7 @@
*/
package com.dungeoncrawler.model.entities;
import com.dungeoncrawler.StaticMath;
import com.dungeoncrawler.model.Entity;
/**
@ -33,31 +34,9 @@ public class Wizard extends Entity{
@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)));
double alpha = StaticMath.calculateAngle((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer);
int distance = (int) StaticMath.calculateDistance((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer, alpha);
if(distance >= 104 && distance <= 184 && counter % 40 == 0){
return true;
@ -99,35 +78,14 @@ public class Wizard extends Entity{
Projectile a = null;
if(!isToDelete()){
float deltaX = xPosPlayer - (int) xPos;
float deltaY = yPosPlayer - (int) yPos;
double alpha = StaticMath.calculateAngle((int) this.xPos, (int) this.yPos, xPosPlayer, yPosPlayer);
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 Projectile(this.xPos + 32, this.yPos + 32, this.lvl, 4, true);
movementX = (int) (6 * Math.cos(alpha));
movementY = (int) (6 * Math.sin(alpha));
int tempX = (int) (6 * Math.cos(alpha));
int tempY = (int) (6 * Math.sin(alpha));
a.setMovementX(movementX);
a.setMovementY(movementY);
a.setMovementX(tempX);
a.setMovementY(tempY);
a.setAngle(alpha);
if((alpha >= 0 && alpha <= Math.PI / 2) || (alpha <= 2 * Math.PI && alpha >= 2 * Math.PI - Math.PI / 2)){

@ -24,6 +24,7 @@ public class EntitySprite implements Comparable<EntitySprite> {
private TextureRegion[][][] regions;
private int[] frames;
private int attackState;
private int secondaryAttackState;
private int die;
// 0: links, 1: rechts
@ -33,19 +34,20 @@ public class EntitySprite implements Comparable<EntitySprite> {
sprites = new Sprite[1];
regions = new TextureRegion[1][][];
// 0: idle, 1: walking, 2: attack, 3: die
frames = new int[4];
// 0: idle, 1: walking, 2: attack, 3: die, 4: secondaryAttack
frames = new int[5];
direction = 0;
attackState = 0;
secondaryAttackState = 0;
die = 0;
for(int i = 0; i < sprites.length; i++){
regions[i] = TextureRegion.split(textures[i], width, height);
sprites[i] = new Sprite(regions[i][0][0]);
collisionSprite = new Rectangle(0, 0, 32, 16);
collisionSprite = new Rectangle(0, 0, sprites[0].getWidth() / 2, sprites[0].getHeight() / 4);
}
this.fullCollisionSprite = new Rectangle(0,0,32,64);
this.fullCollisionSprite = new Rectangle(0, 0, collisionSprite.getWidth(), sprites[0].getHeight());
}
public void updateAnimation(Entity e){
@ -62,6 +64,9 @@ public class EntitySprite implements Comparable<EntitySprite> {
else if(attackState == 1){
updateAttack();
}
else if(secondaryAttackState == 1){
updateSecondaryAttack();
}
else if(moves){
updateWalking();
}
@ -89,6 +94,7 @@ public class EntitySprite implements Comparable<EntitySprite> {
public void updateAttack(){
frames[0] = 0;
frames[1] = 0;
frames[4] = 0;
if(frames[2] >= 6){
frames[2] = 0;
@ -102,11 +108,27 @@ public class EntitySprite implements Comparable<EntitySprite> {
}
}
public void updateSecondaryAttack(){
frames[0] = 0;
frames[1] = 0;
frames[2] = 0;
if(frames[4] >= 3){
frames[4] = 0;
secondaryAttackState = 2;
}
else{
frames[4]++;
sprites[0].setRegion(regions[0][1][frames[4]]);
updateFlip();
}
}
public void updateIdle(){
frames[1] = 0;
frames[2] = 0;
frames[4] = 0;
if(frames[0] >= 9){
frames[0] = 0;
@ -122,6 +144,7 @@ public class EntitySprite implements Comparable<EntitySprite> {
public void updateWalking(){
frames[0] = 0;
frames[2] = 0;
frames[4] = 0;
if(frames[1] >= 9){
frames[1] = 0;
@ -146,7 +169,7 @@ public class EntitySprite implements Comparable<EntitySprite> {
public void update(int xPos, int yPos){
for(int i = 0; i < sprites.length; i++){
sprites[i].setPosition(xPos - 16, yPos);
sprites[i].setPosition(xPos - sprites[0].getWidth() / 4, yPos);
}
updateCollision(xPos, yPos);
@ -254,6 +277,19 @@ public class EntitySprite implements Comparable<EntitySprite> {
this.attackState = 1;
}
public int getSecondaryAttackState(){
return this.secondaryAttackState;
}
public void resetSecondaryAttackState(){
this.secondaryAttackState = 0;
frames[4] = 0;
}
public void startSecondaryAttack(){
this.secondaryAttackState = 1;
}
/**
* @return the die
*/

@ -287,6 +287,11 @@ public class GameScreen {
tx[0] = new Texture("sprites/spell.png");
entitySprites[i] = new EntitySprite(tx, 16, 16);
break;
case 5:
tx[0] = new Texture("sprites/laser.png");
entitySprites[i] = new EntitySprite(tx, 36, 15);
break;
}
entitySprites[i].update((int) e.getxPos() + 32, (int) e.getyPos() + 32);

Loading…
Cancel
Save