From 6be99277526c9ce987d77db3dc6fd07f4a51c868 Mon Sep 17 00:00:00 2001 From: Maurice Date: Mon, 15 Dec 2025 18:11:57 +0100 Subject: [PATCH] implement knockback mechanics and adjust attack detection for OrcMON --- src/de/miaurizius/jgame2d/entity/Player.java | 40 +++++++++++++++++-- .../jgame2d/entity/monster/OrcMON.java | 2 +- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/de/miaurizius/jgame2d/entity/Player.java b/src/de/miaurizius/jgame2d/entity/Player.java index 7c8f74a..6770997 100644 --- a/src/de/miaurizius/jgame2d/entity/Player.java +++ b/src/de/miaurizius/jgame2d/entity/Player.java @@ -52,8 +52,40 @@ public class Player extends Entity { public void update() { if(life > maxLife) life = maxLife; - // ATTACKING - if(attacking) { + if(knockback) { + collisionOn = false; + panel.collisionH.checkTile(this); + panel.collisionH.checkObject(this, false); + panel.collisionH.checkEntity(this, panel.npc[panel.currentMap.getIndex()]); +// panel.collisionH.checkEntity(this, panel.monster[panel.currentMap.getIndex()]); + panel.collisionH.checkEntity(this, panel.iTile[panel.currentMap.getIndex()]); + if(collisionOn) { + knockbackCount = 0; + knockback = false; + speed = defaultSpeed; + invincibleCounting(); + return; + } + + switch(knockbackDirection) { + case UP -> worldY -= speed; + case DOWN -> worldY += speed; + case LEFT -> worldX -= speed; + case RIGHT -> worldX += speed; + } + + knockbackCount++; + if(knockbackCount != 10) { + invincibleCounting(); + return; + } + + knockback = false; + knockbackCount = 0; + speed = defaultSpeed; + invincibleCounting(); + return; + } else if(attacking) { attacking(); invincibleCounting(); return; @@ -62,6 +94,7 @@ public class Player extends Entity { // BLOCKING if(keyH.CTLKeyPressed) { guarding = true; + transparent = false; invincibleCounting(); return; } @@ -101,7 +134,7 @@ public class Player extends Entity { switch (direction) { case UP -> worldY -= speed; case DOWN -> worldY += speed; - case LEFT ->worldX -= speed; + case LEFT -> worldX -= speed; case RIGHT -> worldX += speed; } } @@ -144,6 +177,7 @@ public class Player extends Entity { if(life <= 0) { panel.gameState = GameState.GAMEOVER; + invincibleCount = 0; panel.ui.commandNum = -1; panel.stopMusic(); panel.playSE(12); diff --git a/src/de/miaurizius/jgame2d/entity/monster/OrcMON.java b/src/de/miaurizius/jgame2d/entity/monster/OrcMON.java index 8e6ff0a..d08a24c 100644 --- a/src/de/miaurizius/jgame2d/entity/monster/OrcMON.java +++ b/src/de/miaurizius/jgame2d/entity/monster/OrcMON.java @@ -42,7 +42,7 @@ public class OrcMON extends Entity { if(!onPath) checkStartChasing(panel.player, 10 ,100); else followPlayer(); checkStopChasing(panel.player, 15, 100); setRandomDirection(); - if(!attacking) checkAttack(30, panel.tileSize*4, panel.tileSize); + if(!attacking) checkAttack(50, panel.tileSize*4, panel.tileSize); } public void damageReaction() { actionLock = 0;