diff --git a/src/de/miaurizius/jgame2d/core/GamePanel.java b/src/de/miaurizius/jgame2d/core/GamePanel.java index 51e6d56..c6f1c3b 100644 --- a/src/de/miaurizius/jgame2d/core/GamePanel.java +++ b/src/de/miaurizius/jgame2d/core/GamePanel.java @@ -62,18 +62,12 @@ public class GamePanel extends JPanel implements Runnable { this.setFocusable(true); } - public void setupGame() { - assetSetter.setObject(); - assetSetter.setNPC(); - assetSetter.setMonster(); - gameState = GameState.TITLE; - } + // GAME THREAD / CORE public void startGameThread() { gameThread = new Thread(this); gameThread.start(); } - @Override public void run() { double drawInterval = (double) 1000000000 / FPS; @@ -103,6 +97,7 @@ public class GamePanel extends JPanel implements Runnable { } } + // FRAME GENERATION public void update() { switch(gameState) { case PLAY: @@ -114,7 +109,6 @@ public class GamePanel extends JPanel implements Runnable { break; } } - public void paintComponent(Graphics graphics) { super.paintComponent(graphics); Graphics2D graphics2d = (Graphics2D) graphics; @@ -159,19 +153,26 @@ public class GamePanel extends JPanel implements Runnable { graphics.dispose(); } + // MUSIC public void playMusic(int i) { music.setFile(i); music.play(); music.loop(); } - public void stopMusic() { music.stop(); } - public void playSE(int i) { se.setFile(i); se.play(); } + // SETTING THINGS UP + public void setupGame() { + assetSetter.setObject(); + assetSetter.setNPC(); + assetSetter.setMonster(); + gameState = GameState.TITLE; + } + } diff --git a/src/de/miaurizius/jgame2d/core/UI.java b/src/de/miaurizius/jgame2d/core/UI.java index f9a4c2b..f7a8735 100644 --- a/src/de/miaurizius/jgame2d/core/UI.java +++ b/src/de/miaurizius/jgame2d/core/UI.java @@ -52,6 +52,7 @@ public class UI { } } + // HUD public void drawPlayerLife() { int x = panel.tileSize / 2; int y = panel.tileSize / 2; @@ -78,13 +79,13 @@ public class UI { } } + // GAME STATES public void drawPauseScreen() { graphics2d.setFont(graphics2d.getFont().deriveFont(Font.PLAIN, 80)); String text = "PAUSED"; int y = panel.screenHeight / 2; graphics2d.drawString(text, getCenteredX(text), y); } - public void drawDialogueScreen() { // WINDOW int x = panel.tileSize*2; @@ -102,7 +103,6 @@ public class UI { y += 40; } } - public void drawTitleScreen() { graphics2d.setColor(new Color(0, 0, 0)); graphics2d.fillRect(0, 0, panel.screenWidth, panel.screenHeight); @@ -142,6 +142,7 @@ public class UI { if(commandNum == 2) graphics2d.drawString(">", x-panel.tileSize, y); } + // UTILITY public void drawSubWindow(int x, int y, int width, int height) { graphics2d.setColor(new Color(0,0,0,210)); graphics2d.fillRoundRect(x, y, width, height, 35, 35); @@ -149,7 +150,6 @@ public class UI { graphics2d.setStroke(new BasicStroke(5)); graphics2d.drawRoundRect(x+5, y+5, width-10, height-10, 25, 25); } - public int getCenteredX(String text) { return panel.screenWidth / 2 - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2; } diff --git a/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java b/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java index f035628..8c98a25 100644 --- a/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java +++ b/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java @@ -11,6 +11,7 @@ public class CollisionHandler { this.panel = panel; } + // WORLD COLLISION public void checkTile(Entity entity) { int entityLeftWorldX = entity.worldX + entity.solidArea.x; int entityRightWorldX = entity.worldX + entity.solidArea.x + entity.solidArea.width; @@ -51,7 +52,6 @@ public class CollisionHandler { break; } } - public int checkObject(Entity entity, boolean player) { int index = 999; int c = -1; @@ -112,7 +112,6 @@ public class CollisionHandler { } return index; } - public boolean checkPlayer(Entity entity) { boolean contactPlayer = false; entity.solidArea.x += entity.worldX; @@ -135,6 +134,7 @@ public class CollisionHandler { return contactPlayer; } + // UTILITY private void parseSolidArea(Entity entity) { switch (entity.direction) { case UP -> entity.solidArea.y -= entity.speed; diff --git a/src/de/miaurizius/jgame2d/entity/Entity.java b/src/de/miaurizius/jgame2d/entity/Entity.java index a15d5b3..c85b0cc 100644 --- a/src/de/miaurizius/jgame2d/entity/Entity.java +++ b/src/de/miaurizius/jgame2d/entity/Entity.java @@ -50,21 +50,7 @@ public class Entity { this.panel = panel; } - public void setAction() {} - - public void speak() { - if(dialogue[dialogueIndex] == null) dialogueIndex = 0; - panel.ui.currentDialogue = dialogue[dialogueIndex]; - dialogueIndex++; - - switch(panel.player.direction) { - case UP -> direction = Direction.DOWN; - case DOWN -> direction = Direction.UP; - case LEFT -> direction = Direction.RIGHT; - case RIGHT -> direction = Direction.LEFT; - } - } - + // DEFAULT public void update() { setAction(); collisionOn = false; @@ -97,7 +83,6 @@ public class Entity { spriteCounter = 0; } } - public void draw(Graphics2D graphics2d) { int screenX = worldX - panel.player.worldX + panel.player.screenX; int screenY = worldY - panel.player.worldY + panel.player.screenY; @@ -111,6 +96,22 @@ public class Entity { } } + // INTERACTION + public void speak() { + if(dialogue[dialogueIndex] == null) dialogueIndex = 0; + panel.ui.currentDialogue = dialogue[dialogueIndex]; + dialogueIndex++; + + switch(panel.player.direction) { + case UP -> direction = Direction.DOWN; + case DOWN -> direction = Direction.UP; + case LEFT -> direction = Direction.RIGHT; + case RIGHT -> direction = Direction.LEFT; + } + } + public void setAction() {} + + // SETTING THINGS UP BufferedImage parseSprite() { return switch (direction) { case UP -> (spriteNum == 1) ? up1 : up2; @@ -119,7 +120,6 @@ public class Entity { case RIGHT -> (spriteNum == 1) ? right1 : right2; }; } - BufferedImage parseSpriteATK() { return switch (direction) { case UP -> (spriteNum == 1) ? attackUp1 : attackUp2; @@ -128,7 +128,6 @@ public class Entity { case RIGHT -> (spriteNum == 1) ? attackRight1 : attackRight2; }; } - public BufferedImage initEntitySprites(String name) { try { return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/" + name + ".png")), panel.tileSize, panel.tileSize); @@ -137,7 +136,6 @@ public class Entity { } return null; } - public BufferedImage initEntitySprites(String name, int width, int height) { try { return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/" + name + ".png")), width, height); diff --git a/src/de/miaurizius/jgame2d/entity/Player.java b/src/de/miaurizius/jgame2d/entity/Player.java index fb8566f..b558015 100644 --- a/src/de/miaurizius/jgame2d/entity/Player.java +++ b/src/de/miaurizius/jgame2d/entity/Player.java @@ -38,17 +38,7 @@ public class Player extends Entity { getPlayerAttackImage(); } - public void setDefaultValues() { - worldX = panel.tileSize * 23; - worldY = panel.tileSize * 21; - speed = 4; - direction = Direction.DOWN; - - // PLAYER STATUS (1 heart = 2 lives) - maxLife = 6; - life = maxLife; - } - + // DEFAULT public void update() { if(attacking) { attacking(); @@ -108,7 +98,33 @@ public class Player extends Entity { invincibleCount = 0; } } + public void draw(Graphics2D graphics2d) { + int screenX = worldX - panel.player.worldX + panel.player.screenX; + int screenY = worldY - panel.player.worldY + panel.player.screenY; + if(invincible) { + graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f)); + } + + if(attacking) graphics2d.drawImage(parseSpriteATK(), + (direction == Direction.LEFT) ? screenX - panel.tileSize : screenX, + (direction == Direction.UP) ? screenY - panel.tileSize : screenY, null); + else graphics2d.drawImage(parseSprite(), screenX, screenY, null); + + graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); + } + + // INTERACTION + public void pickObject(int index) { + if(index == 999) return; + } + + public void interactMonster(int index) { + if(index == 999) return; + if(invincible) return; + life -= 1; + invincible = true; + } public void attacking() { spriteCounter++; if(spriteCounter <= 5) spriteNum = 1; @@ -143,31 +159,10 @@ public class Player extends Entity { attacking = false; } } - public void damageMonster(int index) { if(index == 999) return; } - public void draw(Graphics2D graphics2d) { - int screenX = worldX - panel.player.worldX + panel.player.screenX; - int screenY = worldY - panel.player.worldY + panel.player.screenY; - - if(invincible) { - graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f)); - } - - if(attacking) graphics2d.drawImage(parseSpriteATK(), - (direction == Direction.LEFT) ? screenX - panel.tileSize : screenX, - (direction == Direction.UP) ? screenY - panel.tileSize : screenY, null); - else graphics2d.drawImage(parseSprite(), screenX, screenY, null); - - graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); - } - - public void pickObject(int index) { - if(index == 999) return; - } - public void interactNPC(int index) { if(index == 999) { if(panel.keyH.spacePressed) attacking = true; @@ -177,19 +172,22 @@ public class Player extends Entity { panel.gameState = GameState.DIALOGUE; panel.npc[index].speak(); } - - public void interactMonster(int index) { - if(index == 999) return; - if(invincible) return; - life -= 1; - invincible = true; - } - public void speak() { //This method only exists for character specific things later... super.speak(); } + // SETTING THINGS UP + public void setDefaultValues() { + worldX = panel.tileSize * 23; + worldY = panel.tileSize * 21; + speed = 4; + direction = Direction.DOWN; + + // PLAYER STATUS (1 heart = 2 lives) + maxLife = 6; + life = maxLife; + } public void getPlayerImage() { up1 = initEntitySprites("player/boy_up_1"); up2 = initEntitySprites("player/boy_up_2"); @@ -200,7 +198,6 @@ public class Player extends Entity { right1 = initEntitySprites("player/boy_right_1"); right2 = initEntitySprites("player/boy_right_2"); } - public void getPlayerAttackImage() { attackUp1 = initEntitySprites("player/attack/boy_attack_up_1", panel.tileSize, panel.tileSize*2); attackUp2 = initEntitySprites("player/attack/boy_attack_up_2", panel.tileSize, panel.tileSize*2); diff --git a/src/de/miaurizius/jgame2d/entity/monster/GreenSlimeMON.java b/src/de/miaurizius/jgame2d/entity/monster/GreenSlimeMON.java index 6cad048..beb00e9 100644 --- a/src/de/miaurizius/jgame2d/entity/monster/GreenSlimeMON.java +++ b/src/de/miaurizius/jgame2d/entity/monster/GreenSlimeMON.java @@ -27,17 +27,7 @@ public class GreenSlimeMON extends Entity { getImage(); } - public void getImage() { - up1 = initEntitySprites("monster/greenslime_down_1"); - up2 = initEntitySprites("monster/greenslime_down_2"); - down1 = initEntitySprites("monster/greenslime_down_1"); - down2 = initEntitySprites("monster/greenslime_down_2"); - left1 = initEntitySprites("monster/greenslime_down_1"); - left2 = initEntitySprites("monster/greenslime_down_2"); - right1 = initEntitySprites("monster/greenslime_down_1"); - right2 = initEntitySprites("monster/greenslime_down_2"); - } - + // INTERACTION public void setAction() { actionLock++; if(actionLock != 120) return; //lock action for x frames @@ -50,4 +40,16 @@ public class GreenSlimeMON extends Entity { actionLock = 0; } + // SETTING THINGS UP + public void getImage() { + up1 = initEntitySprites("monster/greenslime_down_1"); + up2 = initEntitySprites("monster/greenslime_down_2"); + down1 = initEntitySprites("monster/greenslime_down_1"); + down2 = initEntitySprites("monster/greenslime_down_2"); + left1 = initEntitySprites("monster/greenslime_down_1"); + left2 = initEntitySprites("monster/greenslime_down_2"); + right1 = initEntitySprites("monster/greenslime_down_1"); + right2 = initEntitySprites("monster/greenslime_down_2"); + } + }