diff --git a/src/de/miaurizius/jgame2d/core/GamePanel.java b/src/de/miaurizius/jgame2d/core/GamePanel.java index 392e947..f3d32ad 100644 --- a/src/de/miaurizius/jgame2d/core/GamePanel.java +++ b/src/de/miaurizius/jgame2d/core/GamePanel.java @@ -52,6 +52,7 @@ public class GamePanel extends JPanel implements Runnable { public Entity[] monster = new Entity[20]; public InteractiveTile[] iTile = new InteractiveTile[50]; public ArrayList projectileList = new ArrayList<>(); + public ArrayList particleList = new ArrayList<>(); ArrayList entityList = new ArrayList<>(); // GAME STATE @@ -122,6 +123,13 @@ public class GamePanel extends JPanel implements Runnable { else projectileList.remove(i); } } + for(int i = 0; i < particleList.size(); i++) { + Entity m = particleList.get(i); + if(m != null) { + if(m.alive) m.update(); + else particleList.remove(i); + } + } for(Entity entity : iTile) if(entity != null) entity.update(); break; case PAUSE: @@ -152,6 +160,7 @@ public class GamePanel extends JPanel implements Runnable { for(Entity entity : obj) if(entity != null) entityList.add(entity); for(Entity entity : monster) 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); entityList.sort(Comparator.comparingInt(o -> o.worldY)); for(Entity entity : entityList) entity.draw(graphics2d); entityList.clear(); diff --git a/src/de/miaurizius/jgame2d/entity/Entity.java b/src/de/miaurizius/jgame2d/entity/Entity.java index 060f3a7..f4c4084 100644 --- a/src/de/miaurizius/jgame2d/entity/Entity.java +++ b/src/de/miaurizius/jgame2d/entity/Entity.java @@ -5,6 +5,7 @@ import de.miaurizius.jgame2d.core.enums.Direction; import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.Utility; import de.miaurizius.jgame2d.core.enums.EntityType; +import de.miaurizius.jgame2d.entity.particle.Particle; import de.miaurizius.jgame2d.entity.projectile.Projectile; import javax.imageio.ImageIO; @@ -214,6 +215,35 @@ public class Entity { } } + // PARTICLE SETUP + public Color getParticleColor() { + return null; + } + public int getParticleSize() { + return -1; + } + public int getParticleSpeed() { + return -1; + } + public int getParticleMaxLife() { + return -1; + } + public void generateParticle(Entity generator, Entity target) { + Color color = generator.getParticleColor(); + int size = generator.getParticleSize(); + int speed = generator.getParticleSpeed(); + int maxLife = generator.getParticleMaxLife(); + + Particle p1 = new Particle(panel, generator, color, size, speed, maxLife, -2, -1); + Particle p2 = new Particle(panel, generator, color, size, speed, maxLife, 2, -1); + Particle p3 = new Particle(panel, generator, color, size, speed, maxLife, -2, 1); + Particle p4 = new Particle(panel, generator, color, size, speed, maxLife, 2, 1); + panel.particleList.add(p1); + panel.particleList.add(p2); + panel.particleList.add(p3); + panel.particleList.add(p4); + } + // SETTING THINGS UP BufferedImage parseSprite() { return switch (direction) { diff --git a/src/de/miaurizius/jgame2d/entity/Player.java b/src/de/miaurizius/jgame2d/entity/Player.java index 1594979..5f7c1ed 100644 --- a/src/de/miaurizius/jgame2d/entity/Player.java +++ b/src/de/miaurizius/jgame2d/entity/Player.java @@ -225,6 +225,7 @@ public class Player extends Entity { panel.iTile[index].playSE(); panel.iTile[index].life--; panel.iTile[index].invincible = true; + generateParticle(panel.iTile[index], panel.iTile[index]); if(panel.iTile[index].life == 0) panel.iTile[index] = panel.iTile[index].getDestroyedForm(); } diff --git a/src/de/miaurizius/jgame2d/entity/particle/Particle.java b/src/de/miaurizius/jgame2d/entity/particle/Particle.java new file mode 100644 index 0000000..5de7373 --- /dev/null +++ b/src/de/miaurizius/jgame2d/entity/particle/Particle.java @@ -0,0 +1,50 @@ +package de.miaurizius.jgame2d.entity.particle; + +import de.miaurizius.jgame2d.core.GamePanel; +import de.miaurizius.jgame2d.entity.Entity; + +import java.awt.*; + +public class Particle extends Entity { + + GamePanel panel; + Entity generator; + Color color; + int size; + int xd, yd; + + public Particle(GamePanel panel, Entity generator, Color color, int size, int speed, int maxLife, int xd, int yd) { + super(panel); + this.panel = panel; + this.generator = generator; + this.color = color; + this.size = size; + this.speed = speed; + this.maxLife = maxLife; + this.xd = xd; + this.yd = yd; + + life = maxLife; + int offset = (panel.tileSize/2) - (size/2); + worldX = generator.worldX + offset; + worldY = generator.worldY + offset; + } + + @Override + public void update() { + life--; + if(life < maxLife/3) yd++; + worldX += xd*speed; + worldY += yd*speed; + alive = (life != 0); + } + + @Override + public void draw(Graphics2D graphics2d) { + int screenX = worldX - panel.player.worldX + panel.player.screenX; + int screenY = worldY - panel.player.worldY + panel.player.screenY; + + graphics2d.setColor(color); + graphics2d.fillRect(screenX, screenY, size, size); + } +} diff --git a/src/de/miaurizius/jgame2d/tile/interactive/DryTreeTI.java b/src/de/miaurizius/jgame2d/tile/interactive/DryTreeTI.java index 5b19473..b5b37db 100644 --- a/src/de/miaurizius/jgame2d/tile/interactive/DryTreeTI.java +++ b/src/de/miaurizius/jgame2d/tile/interactive/DryTreeTI.java @@ -4,6 +4,8 @@ import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.enums.EntityType; import de.miaurizius.jgame2d.entity.Entity; +import java.awt.*; + public class DryTreeTI extends InteractiveTile{ GamePanel panel; @@ -31,4 +33,16 @@ public class DryTreeTI extends InteractiveTile{ public InteractiveTile getDestroyedForm() { return new TrunkIT(panel, worldX/panel.tileSize, worldY/panel.tileSize); } + public Color getParticleColor() { + return new Color(65, 50,30); + } + public int getParticleSize() { + return 6; //in pixels + } + public int getParticleSpeed() { + return 1; + } + public int getParticleMaxLife() { + return 20; + } } diff --git a/src/de/miaurizius/jgame2d/tile/interactive/InteractiveTile.java b/src/de/miaurizius/jgame2d/tile/interactive/InteractiveTile.java index 7968f79..60475f1 100644 --- a/src/de/miaurizius/jgame2d/tile/interactive/InteractiveTile.java +++ b/src/de/miaurizius/jgame2d/tile/interactive/InteractiveTile.java @@ -1,8 +1,12 @@ package de.miaurizius.jgame2d.tile.interactive; import de.miaurizius.jgame2d.core.GamePanel; +import de.miaurizius.jgame2d.core.enums.Direction; +import de.miaurizius.jgame2d.core.enums.EntityType; import de.miaurizius.jgame2d.entity.Entity; +import java.awt.*; + public class InteractiveTile extends Entity { GamePanel panel; @@ -14,6 +18,7 @@ public class InteractiveTile extends Entity { } // GENERAL + @Override public void update() { // INVINCIBLE COUNTER if(!invincible) return; @@ -23,6 +28,20 @@ public class InteractiveTile extends Entity { invincibleCount = 0; } } + @Override + public void draw(Graphics2D graphics2D) { + int screenX = worldX - panel.player.worldX + panel.player.screenX; + int screenY = worldY - panel.player.worldY + panel.player.screenY; + + if(worldX + panel.tileSize > panel.player.worldX - panel.player.screenX && + worldX - panel.tileSize < panel.player.worldX + panel.player.screenX && + worldY + panel.tileSize > panel.player.worldY - panel.player.screenY && + worldY - panel.tileSize < panel.player.worldY + panel.player.screenY + ) { + graphics2D.drawImage(down1, screenX, screenY, null); + } + + } // PRE-CONFIGURED public void playSE() {}