From 9aae9ad20f665ba9d51e1d7bf787c4a671268cac Mon Sep 17 00:00:00 2001 From: Maurice Date: Sun, 30 Nov 2025 00:13:54 +0100 Subject: [PATCH] add death animation to dying monsters --- src/de/miaurizius/jgame2d/core/GamePanel.java | 8 ++++- src/de/miaurizius/jgame2d/entity/Entity.java | 31 +++++++++++++++---- src/de/miaurizius/jgame2d/entity/Player.java | 3 +- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/de/miaurizius/jgame2d/core/GamePanel.java b/src/de/miaurizius/jgame2d/core/GamePanel.java index 0e78c8b..1443996 100644 --- a/src/de/miaurizius/jgame2d/core/GamePanel.java +++ b/src/de/miaurizius/jgame2d/core/GamePanel.java @@ -100,7 +100,13 @@ public class GamePanel extends JPanel implements Runnable { case PLAY: player.update(); for(Entity entity : npc) if(entity != null) entity.update(); - for(Entity entity : monster) if(entity != null) entity.update(); + for(int i = 0; i < monster.length; i++) { + Entity m = monster[i]; + if(m != null) { + if(m.alive && !m.dying) m.update(); + if(!m.alive) monster[i] = null; + } + } break; case PAUSE: break; diff --git a/src/de/miaurizius/jgame2d/entity/Entity.java b/src/de/miaurizius/jgame2d/entity/Entity.java index 1e5a5c4..79e019b 100644 --- a/src/de/miaurizius/jgame2d/entity/Entity.java +++ b/src/de/miaurizius/jgame2d/entity/Entity.java @@ -33,8 +33,8 @@ public class Entity { public boolean collisionOn; public boolean invincible; boolean attacking; - boolean alive = true; - boolean dying; + public boolean alive = true; + public boolean dying; // COUNTER public int spriteCounter; @@ -103,9 +103,9 @@ public class Entity { worldY + panel.tileSize > panel.player.worldY - panel.player.screenY && worldY - panel.tileSize < panel.player.worldY + panel.player.screenY ) { - if(invincible) { - graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f)); - } + if(invincible) graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f)); + + if(dying) dyingAnimation(graphics2d); // only modify sprite render position for player because I dont know yet how monster attack sprite are gonna look if(type == EntityType.PLAYER) { @@ -120,6 +120,7 @@ public class Entity { } // INTERACTION + public void setAction() {} public void speak() { if(dialogue[dialogueIndex] == null) dialogueIndex = 0; panel.ui.currentDialogue = dialogue[dialogueIndex]; @@ -132,7 +133,22 @@ public class Entity { case RIGHT -> direction = Direction.LEFT; } } - public void setAction() {} + public void dyingAnimation(Graphics2D graphics2d) { + dyingCount++; + int incr = 5; + if(dyingCount <= incr) changeOpacity(graphics2d, 0f); + if(dyingCount > incr && dyingCount <= incr*2) changeOpacity(graphics2d, 1f); + if(dyingCount > incr*2 && dyingCount <= incr*3) changeOpacity(graphics2d, 0f); + if(dyingCount > incr*3 && dyingCount <= incr*4) changeOpacity(graphics2d, 1f); + if(dyingCount > incr*4 && dyingCount <= incr*5) changeOpacity(graphics2d, 0f); + if(dyingCount > incr*5 && dyingCount <= incr*6) changeOpacity(graphics2d, 1f); + if(dyingCount > incr*6 && dyingCount <= incr*7) changeOpacity(graphics2d, 0f); + if(dyingCount > incr*7 && dyingCount <= incr*8) changeOpacity(graphics2d, 1f); + if(dyingCount > incr*8) { + dying = false; + alive = false; + } + } // SETTING THINGS UP BufferedImage parseSprite() { @@ -167,5 +183,8 @@ public class Entity { } return null; } + public void changeOpacity(Graphics2D graphics2d, float opacity) { + graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity)); + } } diff --git a/src/de/miaurizius/jgame2d/entity/Player.java b/src/de/miaurizius/jgame2d/entity/Player.java index aeb7e93..d9a7601 100644 --- a/src/de/miaurizius/jgame2d/entity/Player.java +++ b/src/de/miaurizius/jgame2d/entity/Player.java @@ -11,7 +11,6 @@ import java.awt.*; public class Player extends Entity { KeyHandler keyH; - public final int screenX; public final int screenY; @@ -156,7 +155,7 @@ public class Player extends Entity { panel.monster[index].life -= 1; panel.playSE(5); panel.monster[index].invincible = true; - if(panel.monster[index].life <= 0) panel.monster[index] = null; + if(panel.monster[index].life <= 0) panel.monster[index].dying = true; } public void interactNPC(int index) {