all entity arrays are now two-dimensional (with map index so entities won't be rendered on any map anymore)

This commit is contained in:
2025-12-12 13:20:14 +01:00
parent 67309a6e28
commit 4aabe84d59
7 changed files with 113 additions and 109 deletions

View File

@@ -58,10 +58,10 @@ public class GamePanel extends JPanel implements Runnable {
// ENTITY AND OBJECT // ENTITY AND OBJECT
public Player player = new Player(this, keyH); public Player player = new Player(this, keyH);
public Entity[] obj = new Entity[20]; public Entity[][] obj = new Entity[Map.values().length][20];
public Entity[] npc = new Entity[10]; public Entity[][] npc = new Entity[Map.values().length][10];
public Entity[] monster = new Entity[20]; public Entity[][] monster = new Entity[Map.values().length][20];
public InteractiveTile[] iTile = new InteractiveTile[50]; public InteractiveTile[][] iTile = new InteractiveTile[Map.values().length][50];
public ArrayList<Entity> projectileList = new ArrayList<>(); public ArrayList<Entity> projectileList = new ArrayList<>();
public ArrayList<Entity> particleList = new ArrayList<>(); public ArrayList<Entity> particleList = new ArrayList<>();
ArrayList<Entity> entityList = new ArrayList<>(); ArrayList<Entity> entityList = new ArrayList<>();
@@ -118,14 +118,14 @@ public class GamePanel extends JPanel implements Runnable {
switch(gameState) { switch(gameState) {
case PLAY: case PLAY:
player.update(); player.update();
for(Entity entity : npc) if(entity != null) entity.update(); for(Entity entity : npc[currentMap.getIndex()]) if(entity != null) entity.update();
for(int i = 0; i < monster.length; i++) { for(int i = 0; i < monster[currentMap.getIndex()].length; i++) {
Entity m = monster[i]; Entity m = monster[currentMap.getIndex()][i];
if(m != null) { if(m != null) {
if(m.alive && !m.dying) m.update(); if(m.alive && !m.dying) m.update();
if(!m.alive) { if(!m.alive) {
monster[i].checkDrop(); monster[currentMap.getIndex()][i].checkDrop();
monster[i] = null; monster[currentMap.getIndex()][i] = null;
} }
} }
} }
@@ -143,7 +143,7 @@ public class GamePanel extends JPanel implements Runnable {
else particleList.remove(i); else particleList.remove(i);
} }
} }
for(Entity entity : iTile) if(entity != null) entity.update(); for(Entity entity : iTile[currentMap.getIndex()]) if(entity != null) entity.update();
break; break;
case PAUSE: case PAUSE:
break; break;
@@ -162,13 +162,13 @@ public class GamePanel extends JPanel implements Runnable {
// GAME // GAME
tileM.draw(fg2); tileM.draw(fg2);
for(Entity entity : iTile) if(entity != null) entity.draw(fg2); for(Entity entity : iTile[currentMap.getIndex()]) if(entity != null) entity.draw(fg2);
// ENTITY RENDER SYSTEM // ENTITY RENDER SYSTEM
entityList.add(player); entityList.add(player);
for(Entity entity : npc) if(entity != null) entityList.add(entity); for(Entity entity : npc[currentMap.getIndex()]) if(entity != null) entityList.add(entity);
for(Entity entity : obj) if(entity != null) entityList.add(entity); for(Entity entity : obj[currentMap.getIndex()]) if(entity != null) entityList.add(entity);
for(Entity entity : monster) if(entity != null) entityList.add(entity); for(Entity entity : monster[currentMap.getIndex()]) if(entity != null) entityList.add(entity);
for(Entity entity : projectileList) if(entity != null) entityList.add(entity); for(Entity entity : projectileList) if(entity != null) entityList.add(entity);
for(Entity entity : particleList) if(entity != null) entityList.add(entity); for(Entity entity : particleList) if(entity != null) entityList.add(entity);
entityList.sort(Comparator.comparingInt(o -> o.worldY)); entityList.sort(Comparator.comparingInt(o -> o.worldY));

View File

@@ -1,6 +1,7 @@
package de.miaurizius.jgame2d.core.handlers; package de.miaurizius.jgame2d.core.handlers;
import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.enums.Map;
import de.miaurizius.jgame2d.entity.item.*; import de.miaurizius.jgame2d.entity.item.*;
import de.miaurizius.jgame2d.entity.npc.OldManNPC; import de.miaurizius.jgame2d.entity.npc.OldManNPC;
import de.miaurizius.jgame2d.entity.monster.GreenSlimeMON; import de.miaurizius.jgame2d.entity.monster.GreenSlimeMON;
@@ -16,86 +17,86 @@ public class AssetSetter {
public void setObject() { public void setObject() {
int i = 0; int i = 0;
panel.obj[i] = new HeartObj(panel); panel.obj[Map.OVERWORLD.getIndex()][i] = new HeartObj(panel);
panel.obj[i].worldX = panel.tileSize*25; panel.obj[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*25;
panel.obj[i].worldY = panel.tileSize*23; panel.obj[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*23;
i++; i++;
panel.obj[i] = new CoinObj(panel); panel.obj[Map.OVERWORLD.getIndex()][i] = new CoinObj(panel);
panel.obj[i].worldX = panel.tileSize*21; panel.obj[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*21;
panel.obj[i].worldY = panel.tileSize*19; panel.obj[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*19;
i++; i++;
panel.obj[i] = new AxeObj(panel); panel.obj[Map.OVERWORLD.getIndex()][i] = new AxeObj(panel);
panel.obj[i].worldX = panel.tileSize*33; panel.obj[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*33;
panel.obj[i].worldY = panel.tileSize*21; panel.obj[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*21;
i++; i++;
panel.obj[i] = new IronShieldObj(panel); panel.obj[Map.OVERWORLD.getIndex()][i] = new IronShieldObj(panel);
panel.obj[i].worldX = panel.tileSize*35; panel.obj[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*35;
panel.obj[i].worldY = panel.tileSize*21; panel.obj[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*21;
i++; i++;
panel.obj[i] = new PotionObj(panel); panel.obj[Map.OVERWORLD.getIndex()][i] = new PotionObj(panel);
panel.obj[i].worldX = panel.tileSize*22; panel.obj[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*22;
panel.obj[i].worldY = panel.tileSize*27; panel.obj[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*27;
i++; i++;
} }
public void setNPC() { public void setNPC() {
panel.npc[0] = new OldManNPC(panel); panel.npc[Map.OVERWORLD.getIndex()][0] = new OldManNPC(panel);
panel.npc[0].worldX = panel.tileSize*21; panel.npc[Map.OVERWORLD.getIndex()][0].worldX = panel.tileSize*21;
panel.npc[0].worldY = panel.tileSize*21; panel.npc[Map.OVERWORLD.getIndex()][0].worldY = panel.tileSize*21;
} }
public void setMonster() { public void setMonster() {
int i = 0; int i = 0;
panel.monster[i] = new GreenSlimeMON(panel); panel.monster[Map.OVERWORLD.getIndex()][i] = new GreenSlimeMON(panel);
panel.monster[i].worldX = panel.tileSize*23; panel.monster[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*23;
panel.monster[i].worldY = panel.tileSize*36; panel.monster[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*36;
i++; i++;
panel.monster[i] = new GreenSlimeMON(panel); panel.monster[Map.OVERWORLD.getIndex()][i] = new GreenSlimeMON(panel);
panel.monster[i].worldX = panel.tileSize*23; panel.monster[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*23;
panel.monster[i].worldY = panel.tileSize*37; panel.monster[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*37;
i++; i++;
panel.monster[i] = new GreenSlimeMON(panel); panel.monster[Map.OVERWORLD.getIndex()][i] = new GreenSlimeMON(panel);
panel.monster[i].worldX = panel.tileSize*24; panel.monster[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*24;
panel.monster[i].worldY = panel.tileSize*37; panel.monster[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*37;
i++; i++;
panel.monster[i] = new GreenSlimeMON(panel); panel.monster[Map.OVERWORLD.getIndex()][i] = new GreenSlimeMON(panel);
panel.monster[i].worldX = panel.tileSize*34; panel.monster[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*34;
panel.monster[i].worldY = panel.tileSize*42; panel.monster[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*42;
i++; i++;
panel.monster[i] = new GreenSlimeMON(panel); panel.monster[Map.OVERWORLD.getIndex()][i] = new GreenSlimeMON(panel);
panel.monster[i].worldX = panel.tileSize*38; panel.monster[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*38;
panel.monster[i].worldY = panel.tileSize*42; panel.monster[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*42;
} }
public void setITiles() { public void setITiles() {
int i = 0; int i = 0;
panel.iTile[i] = new DryTreeTI(panel,27,12);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,27,12);i++;
panel.iTile[i] = new DryTreeTI(panel,28,12);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,28,12);i++;
panel.iTile[i] = new DryTreeTI(panel,29,12);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,29,12);i++;
panel.iTile[i] = new DryTreeTI(panel,30,12);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,30,12);i++;
panel.iTile[i] = new DryTreeTI(panel,31,12);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,31,12);i++;
panel.iTile[i] = new DryTreeTI(panel,32,12);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,32,12);i++;
panel.iTile[i] = new DryTreeTI(panel,33,12);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,33,12);i++;
panel.iTile[i] = new DryTreeTI(panel,18,40);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,18,40);i++;
panel.iTile[i] = new DryTreeTI(panel,17,40);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,17,40);i++;
panel.iTile[i] = new DryTreeTI(panel,16,40);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,16,40);i++;
panel.iTile[i] = new DryTreeTI(panel,15,40);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,15,40);i++;
panel.iTile[i] = new DryTreeTI(panel,14,40);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,14,40);i++;
panel.iTile[i] = new DryTreeTI(panel,13,40);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,13,40);i++;
panel.iTile[i] = new DryTreeTI(panel,13,41);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,13,41);i++;
panel.iTile[i] = new DryTreeTI(panel,12,41);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,12,41);i++;
panel.iTile[i] = new DryTreeTI(panel,11,41);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,11,41);i++;
panel.iTile[i] = new DryTreeTI(panel,10,41);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,10,41);i++;
panel.iTile[i] = new DryTreeTI(panel,10,40);i++; panel.iTile[Map.OVERWORLD.getIndex()][i] = new DryTreeTI(panel,10,40);i++;
} }
} }

View File

@@ -56,7 +56,7 @@ public class CollisionHandler {
int index = 999; int index = 999;
int c = -1; int c = -1;
for(Entity obj : panel.obj) { for(Entity obj : panel.obj[panel.currentMap.getIndex()]) {
c++; c++;
if (obj != null) { if (obj != null) {

View File

@@ -3,6 +3,7 @@ package de.miaurizius.jgame2d.core.handlers;
import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.UI; import de.miaurizius.jgame2d.core.UI;
import de.miaurizius.jgame2d.core.enums.GameState; import de.miaurizius.jgame2d.core.enums.GameState;
import de.miaurizius.jgame2d.core.enums.Map;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
@@ -54,7 +55,7 @@ public class KeyHandler implements KeyListener {
// DEBUG OPTIONS // DEBUG OPTIONS
case KeyEvent.VK_T -> debug = !debug; case KeyEvent.VK_T -> debug = !debug;
case KeyEvent.VK_R -> panel.tileM.loadMap(panel.currentMap); case KeyEvent.VK_R -> {for(Map m : Map.values()) panel.tileM.loadMap(m);}
// GAME STATES // GAME STATES
case KeyEvent.VK_ESCAPE -> { case KeyEvent.VK_ESCAPE -> {

View File

@@ -85,9 +85,9 @@ public class Entity {
collisionOn = false; collisionOn = false;
panel.collisionH.checkTile(this); panel.collisionH.checkTile(this);
panel.collisionH.checkObject(this, false); panel.collisionH.checkObject(this, false);
panel.collisionH.checkEntity(this, panel.npc); panel.collisionH.checkEntity(this, panel.npc[panel.currentMap.getIndex()]);
panel.collisionH.checkEntity(this, panel.monster); panel.collisionH.checkEntity(this, panel.monster[panel.currentMap.getIndex()]);
panel.collisionH.checkEntity(this, panel.iTile); panel.collisionH.checkEntity(this, panel.iTile[panel.currentMap.getIndex()]);
boolean contactPlayer = panel.collisionH.checkPlayer(this); boolean contactPlayer = panel.collisionH.checkPlayer(this);
if(this.type == EntityType.MONSTER && contactPlayer) damagePlayer(attack); if(this.type == EntityType.MONSTER && contactPlayer) damagePlayer(attack);
@@ -205,11 +205,11 @@ public class Entity {
} }
public void dropItem(Entity droppedItem) { public void dropItem(Entity droppedItem) {
for(int i = 0; i < panel.obj.length; i++) { for(int i = 0; i < panel.obj[panel.currentMap.getIndex()].length; i++) {
if(panel.obj[i] == null) { if(panel.obj[panel.currentMap.getIndex()][i] == null) {
panel.obj[i] = droppedItem; panel.obj[panel.currentMap.getIndex()][i] = droppedItem;
panel.obj[i].worldX = worldX; panel.obj[panel.currentMap.getIndex()][i].worldX = worldX;
panel.obj[i].worldY = worldY; panel.obj[panel.currentMap.getIndex()][i].worldY = worldY;
break; break;
} }
} }

View File

@@ -72,15 +72,15 @@ public class Player extends Entity {
pickObject(objIndex); pickObject(objIndex);
// CHECK ENTITY COLLISION // CHECK ENTITY COLLISION
int npcIndex = panel.collisionH.checkEntity(this, panel.npc); int npcIndex = panel.collisionH.checkEntity(this, panel.npc[panel.currentMap.getIndex()]);
interactNPC(npcIndex); interactNPC(npcIndex);
// CHECK MONSTER COLLISION // CHECK MONSTER COLLISION
int monsterIndex = panel.collisionH.checkEntity(this, panel.monster); int monsterIndex = panel.collisionH.checkEntity(this, panel.monster[panel.currentMap.getIndex()]);
interactMonster(monsterIndex); interactMonster(monsterIndex);
// CHECK INTERACTIVE TILE COLLISION // CHECK INTERACTIVE TILE COLLISION
int iTileIndex = panel.collisionH.checkEntity(this, panel.iTile); int iTileIndex = panel.collisionH.checkEntity(this, panel.iTile[panel.currentMap.getIndex()]);
// CHECK EVENT // CHECK EVENT
panel.eventH.checkEvent(); panel.eventH.checkEvent();
@@ -136,11 +136,11 @@ public class Player extends Entity {
// INTERACTION // INTERACTION
public void pickObject(int index) { public void pickObject(int index) {
if(index == 999 || panel.obj[index] == null) return; if(index == 999 || panel.obj[panel.currentMap.getIndex()][index] == null) return;
// PICKUP ONLY // PICKUP ONLY
if(panel.obj[index].type == EntityType.PICKUP) { if(panel.obj[panel.currentMap.getIndex()][index].type == EntityType.PICKUP) {
panel.obj[index].use(this); panel.obj[panel.currentMap.getIndex()][index].use(this);
} }
// INVENTORY ITEMS // INVENTORY ITEMS
else { else {
@@ -148,18 +148,18 @@ public class Player extends Entity {
panel.ui.addMessage("Your inventory is full!"); panel.ui.addMessage("Your inventory is full!");
return; return;
} }
inventory.add(panel.obj[index]); inventory.add(panel.obj[panel.currentMap.getIndex()][index]);
panel.playSE(1); panel.playSE(1);
panel.ui.addMessage("Picked up " + panel.obj[index].name + "!"); panel.ui.addMessage("Picked up " + panel.obj[panel.currentMap.getIndex()][index].name + "!");
} }
panel.obj[index] = null; panel.obj[panel.currentMap.getIndex()][index] = null;
} }
public void interactMonster(int index) { public void interactMonster(int index) {
if(index == 999) return; if(index == 999) return;
if(invincible || panel.monster[index].dying || !panel.monster[index].alive) return; if(invincible || panel.monster[panel.currentMap.getIndex()][index].dying || !panel.monster[panel.currentMap.getIndex()][index].alive) return;
int damage = panel.monster[index].attack - defense; int damage = panel.monster[panel.currentMap.getIndex()][index].attack - defense;
if(damage > 0) { if(damage > 0) {
panel.playSE(6); panel.playSE(6);
@@ -188,10 +188,10 @@ public class Player extends Entity {
solidArea.width = attackArea.width; solidArea.width = attackArea.width;
solidArea.height = attackArea.height; solidArea.height = attackArea.height;
int monsterIndex = panel.collisionH.checkEntity(this, panel.monster); int monsterIndex = panel.collisionH.checkEntity(this, panel.monster[panel.currentMap.getIndex()]);
damageMonster(monsterIndex, attack); damageMonster(monsterIndex, attack);
int iTileIndex = panel.collisionH.checkEntity(this, panel.iTile); int iTileIndex = panel.collisionH.checkEntity(this, panel.iTile[panel.currentMap.getIndex()]);
interactTile(iTileIndex); interactTile(iTileIndex);
worldX = currentWorldX; worldX = currentWorldX;
@@ -208,32 +208,32 @@ public class Player extends Entity {
} }
public void damageMonster(int index, int attack) { public void damageMonster(int index, int attack) {
if(index == 999) return; if(index == 999) return;
if(panel.monster[index].invincible) return; if(panel.monster[panel.currentMap.getIndex()][index].invincible) return;
int damage = attack - panel.monster[index].defense; int damage = attack - panel.monster[panel.currentMap.getIndex()][index].defense;
if(damage > 0) { if(damage > 0) {
panel.playSE(5); panel.playSE(5);
panel.monster[index].life -= damage; panel.monster[panel.currentMap.getIndex()][index].life -= damage;
panel.monster[index].invincible = true; panel.monster[panel.currentMap.getIndex()][index].invincible = true;
} }
panel.monster[index].damageReaction(); panel.monster[panel.currentMap.getIndex()][index].damageReaction();
if(panel.monster[index].life <= 0) { if(panel.monster[panel.currentMap.getIndex()][index].life <= 0) {
panel.monster[index].dying = true; panel.monster[panel.currentMap.getIndex()][index].dying = true;
panel.ui.addMessage("Gained +" + panel.monster[index].exp + " XP!"); panel.ui.addMessage("Gained +" + panel.monster[panel.currentMap.getIndex()][index].exp + " XP!");
exp += panel.monster[index].exp; exp += panel.monster[panel.currentMap.getIndex()][index].exp;
checkLevelUp(); checkLevelUp();
} }
} }
public void interactTile(int index) { public void interactTile(int index) {
if(index == 999 || !panel.iTile[index].destructible || panel.iTile[index].invincible) return; if(index == 999 || !panel.iTile[panel.currentMap.getIndex()][index].destructible || panel.iTile[panel.currentMap.getIndex()][index].invincible) return;
if(!panel.iTile[index].meetItemReq(this)) return; if(!panel.iTile[panel.currentMap.getIndex()][index].meetItemReq(this)) return;
panel.iTile[index].playSE(); panel.iTile[panel.currentMap.getIndex()][index].playSE();
panel.iTile[index].life--; panel.iTile[panel.currentMap.getIndex()][index].life--;
panel.iTile[index].invincible = true; panel.iTile[panel.currentMap.getIndex()][index].invincible = true;
generateParticle(panel.iTile[index], panel.iTile[index]); generateParticle(panel.iTile[panel.currentMap.getIndex()][index], panel.iTile[panel.currentMap.getIndex()][index]);
if(panel.iTile[index].life == 0) panel.iTile[index] = panel.iTile[index].getDestroyedForm(); if(panel.iTile[panel.currentMap.getIndex()][index].life == 0) panel.iTile[panel.currentMap.getIndex()][index] = panel.iTile[panel.currentMap.getIndex()][index].getDestroyedForm();
} }
public void interactNPC(int index) { public void interactNPC(int index) {
@@ -241,7 +241,7 @@ public class Player extends Entity {
//if(!panel.keyH.spacePressed) return; //Only uncomment if text should only appear if player hits space //if(!panel.keyH.spacePressed) return; //Only uncomment if text should only appear if player hits space
attackCancel = true; attackCancel = true;
panel.gameState = GameState.DIALOGUE; panel.gameState = GameState.DIALOGUE;
panel.npc[index].speak(); panel.npc[panel.currentMap.getIndex()][index].speak();
} }
public void speak() { public void speak() {
//This method only exists for character specific things later... //This method only exists for character specific things later...
@@ -293,8 +293,10 @@ public class Player extends Entity {
// SETTING THINGS UP // SETTING THINGS UP
public void setDefaultValues() { public void setDefaultValues() {
worldX = panel.tileSize * 23; // worldX = panel.tileSize * 23;
worldY = panel.tileSize * 21; // worldY = panel.tileSize * 21;
worldX = panel.tileSize * 12;
worldY = panel.tileSize * 13;
speed = 4; speed = 4;
direction = Direction.DOWN; direction = Direction.DOWN;

View File

@@ -25,10 +25,10 @@ public class Projectile extends Entity {
public void update() { public void update() {
if(user.type == EntityType.PLAYER) { if(user.type == EntityType.PLAYER) {
int monsterIndex = panel.collisionH.checkEntity(this, panel.monster); int monsterIndex = panel.collisionH.checkEntity(this, panel.monster[panel.currentMap.getIndex()]);
if(monsterIndex != 999) { if(monsterIndex != 999) {
panel.player.damageMonster(monsterIndex, attack); panel.player.damageMonster(monsterIndex, attack);
generateParticle(user.projectile, panel.monster[monsterIndex]); generateParticle(user.projectile, panel.monster[panel.currentMap.getIndex()][monsterIndex]);
alive = false; alive = false;
} }
} }