arranged large classes

This commit is contained in:
2025-11-29 23:08:20 +01:00
parent 0dde029719
commit b513370152
6 changed files with 84 additions and 86 deletions

View File

@@ -62,18 +62,12 @@ public class GamePanel extends JPanel implements Runnable {
this.setFocusable(true); this.setFocusable(true);
} }
public void setupGame() { // GAME THREAD / CORE
assetSetter.setObject();
assetSetter.setNPC();
assetSetter.setMonster();
gameState = GameState.TITLE;
}
public void startGameThread() { public void startGameThread() {
gameThread = new Thread(this); gameThread = new Thread(this);
gameThread.start(); gameThread.start();
} }
@Override @Override
public void run() { public void run() {
double drawInterval = (double) 1000000000 / FPS; double drawInterval = (double) 1000000000 / FPS;
@@ -103,6 +97,7 @@ public class GamePanel extends JPanel implements Runnable {
} }
} }
// FRAME GENERATION
public void update() { public void update() {
switch(gameState) { switch(gameState) {
case PLAY: case PLAY:
@@ -114,7 +109,6 @@ public class GamePanel extends JPanel implements Runnable {
break; break;
} }
} }
public void paintComponent(Graphics graphics) { public void paintComponent(Graphics graphics) {
super.paintComponent(graphics); super.paintComponent(graphics);
Graphics2D graphics2d = (Graphics2D) graphics; Graphics2D graphics2d = (Graphics2D) graphics;
@@ -159,19 +153,26 @@ public class GamePanel extends JPanel implements Runnable {
graphics.dispose(); graphics.dispose();
} }
// MUSIC
public void playMusic(int i) { public void playMusic(int i) {
music.setFile(i); music.setFile(i);
music.play(); music.play();
music.loop(); music.loop();
} }
public void stopMusic() { public void stopMusic() {
music.stop(); music.stop();
} }
public void playSE(int i) { public void playSE(int i) {
se.setFile(i); se.setFile(i);
se.play(); se.play();
} }
// SETTING THINGS UP
public void setupGame() {
assetSetter.setObject();
assetSetter.setNPC();
assetSetter.setMonster();
gameState = GameState.TITLE;
}
} }

View File

@@ -52,6 +52,7 @@ public class UI {
} }
} }
// HUD
public void drawPlayerLife() { public void drawPlayerLife() {
int x = panel.tileSize / 2; int x = panel.tileSize / 2;
int y = panel.tileSize / 2; int y = panel.tileSize / 2;
@@ -78,13 +79,13 @@ public class UI {
} }
} }
// GAME STATES
public void drawPauseScreen() { public void drawPauseScreen() {
graphics2d.setFont(graphics2d.getFont().deriveFont(Font.PLAIN, 80)); graphics2d.setFont(graphics2d.getFont().deriveFont(Font.PLAIN, 80));
String text = "PAUSED"; String text = "PAUSED";
int y = panel.screenHeight / 2; int y = panel.screenHeight / 2;
graphics2d.drawString(text, getCenteredX(text), y); graphics2d.drawString(text, getCenteredX(text), y);
} }
public void drawDialogueScreen() { public void drawDialogueScreen() {
// WINDOW // WINDOW
int x = panel.tileSize*2; int x = panel.tileSize*2;
@@ -102,7 +103,6 @@ public class UI {
y += 40; y += 40;
} }
} }
public void drawTitleScreen() { public void drawTitleScreen() {
graphics2d.setColor(new Color(0, 0, 0)); graphics2d.setColor(new Color(0, 0, 0));
graphics2d.fillRect(0, 0, panel.screenWidth, panel.screenHeight); graphics2d.fillRect(0, 0, panel.screenWidth, panel.screenHeight);
@@ -142,6 +142,7 @@ public class UI {
if(commandNum == 2) graphics2d.drawString(">", x-panel.tileSize, y); if(commandNum == 2) graphics2d.drawString(">", x-panel.tileSize, y);
} }
// UTILITY
public void drawSubWindow(int x, int y, int width, int height) { public void drawSubWindow(int x, int y, int width, int height) {
graphics2d.setColor(new Color(0,0,0,210)); graphics2d.setColor(new Color(0,0,0,210));
graphics2d.fillRoundRect(x, y, width, height, 35, 35); graphics2d.fillRoundRect(x, y, width, height, 35, 35);
@@ -149,7 +150,6 @@ public class UI {
graphics2d.setStroke(new BasicStroke(5)); graphics2d.setStroke(new BasicStroke(5));
graphics2d.drawRoundRect(x+5, y+5, width-10, height-10, 25, 25); graphics2d.drawRoundRect(x+5, y+5, width-10, height-10, 25, 25);
} }
public int getCenteredX(String text) { public int getCenteredX(String text) {
return panel.screenWidth / 2 - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2; return panel.screenWidth / 2 - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2;
} }

View File

@@ -11,6 +11,7 @@ public class CollisionHandler {
this.panel = panel; this.panel = panel;
} }
// WORLD COLLISION
public void checkTile(Entity entity) { public void checkTile(Entity entity) {
int entityLeftWorldX = entity.worldX + entity.solidArea.x; int entityLeftWorldX = entity.worldX + entity.solidArea.x;
int entityRightWorldX = entity.worldX + entity.solidArea.x + entity.solidArea.width; int entityRightWorldX = entity.worldX + entity.solidArea.x + entity.solidArea.width;
@@ -51,7 +52,6 @@ public class CollisionHandler {
break; break;
} }
} }
public int checkObject(Entity entity, boolean player) { public int checkObject(Entity entity, boolean player) {
int index = 999; int index = 999;
int c = -1; int c = -1;
@@ -112,7 +112,6 @@ public class CollisionHandler {
} }
return index; return index;
} }
public boolean checkPlayer(Entity entity) { public boolean checkPlayer(Entity entity) {
boolean contactPlayer = false; boolean contactPlayer = false;
entity.solidArea.x += entity.worldX; entity.solidArea.x += entity.worldX;
@@ -135,6 +134,7 @@ public class CollisionHandler {
return contactPlayer; return contactPlayer;
} }
// UTILITY
private void parseSolidArea(Entity entity) { private void parseSolidArea(Entity entity) {
switch (entity.direction) { switch (entity.direction) {
case UP -> entity.solidArea.y -= entity.speed; case UP -> entity.solidArea.y -= entity.speed;

View File

@@ -50,21 +50,7 @@ public class Entity {
this.panel = panel; this.panel = panel;
} }
public void setAction() {} // DEFAULT
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 update() { public void update() {
setAction(); setAction();
collisionOn = false; collisionOn = false;
@@ -97,7 +83,6 @@ public class Entity {
spriteCounter = 0; spriteCounter = 0;
} }
} }
public void draw(Graphics2D graphics2d) { public void draw(Graphics2D graphics2d) {
int screenX = worldX - panel.player.worldX + panel.player.screenX; int screenX = worldX - panel.player.worldX + panel.player.screenX;
int screenY = worldY - panel.player.worldY + panel.player.screenY; 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() { BufferedImage parseSprite() {
return switch (direction) { return switch (direction) {
case UP -> (spriteNum == 1) ? up1 : up2; case UP -> (spriteNum == 1) ? up1 : up2;
@@ -119,7 +120,6 @@ public class Entity {
case RIGHT -> (spriteNum == 1) ? right1 : right2; case RIGHT -> (spriteNum == 1) ? right1 : right2;
}; };
} }
BufferedImage parseSpriteATK() { BufferedImage parseSpriteATK() {
return switch (direction) { return switch (direction) {
case UP -> (spriteNum == 1) ? attackUp1 : attackUp2; case UP -> (spriteNum == 1) ? attackUp1 : attackUp2;
@@ -128,7 +128,6 @@ public class Entity {
case RIGHT -> (spriteNum == 1) ? attackRight1 : attackRight2; case RIGHT -> (spriteNum == 1) ? attackRight1 : attackRight2;
}; };
} }
public BufferedImage initEntitySprites(String name) { public BufferedImage initEntitySprites(String name) {
try { try {
return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/" + name + ".png")), panel.tileSize, panel.tileSize); return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/" + name + ".png")), panel.tileSize, panel.tileSize);
@@ -137,7 +136,6 @@ public class Entity {
} }
return null; return null;
} }
public BufferedImage initEntitySprites(String name, int width, int height) { public BufferedImage initEntitySprites(String name, int width, int height) {
try { try {
return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/" + name + ".png")), width, height); return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/" + name + ".png")), width, height);

View File

@@ -38,17 +38,7 @@ public class Player extends Entity {
getPlayerAttackImage(); getPlayerAttackImage();
} }
public void setDefaultValues() { // DEFAULT
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 update() { public void update() {
if(attacking) { if(attacking) {
attacking(); attacking();
@@ -108,7 +98,33 @@ public class Player extends Entity {
invincibleCount = 0; 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() { public void attacking() {
spriteCounter++; spriteCounter++;
if(spriteCounter <= 5) spriteNum = 1; if(spriteCounter <= 5) spriteNum = 1;
@@ -143,31 +159,10 @@ public class Player extends Entity {
attacking = false; attacking = false;
} }
} }
public void damageMonster(int index) { public void damageMonster(int index) {
if(index == 999) return; 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) { public void interactNPC(int index) {
if(index == 999) { if(index == 999) {
if(panel.keyH.spacePressed) attacking = true; if(panel.keyH.spacePressed) attacking = true;
@@ -177,19 +172,22 @@ public class Player extends Entity {
panel.gameState = GameState.DIALOGUE; panel.gameState = GameState.DIALOGUE;
panel.npc[index].speak(); panel.npc[index].speak();
} }
public void interactMonster(int index) {
if(index == 999) return;
if(invincible) return;
life -= 1;
invincible = true;
}
public void speak() { public void speak() {
//This method only exists for character specific things later... //This method only exists for character specific things later...
super.speak(); 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() { public void getPlayerImage() {
up1 = initEntitySprites("player/boy_up_1"); up1 = initEntitySprites("player/boy_up_1");
up2 = initEntitySprites("player/boy_up_2"); up2 = initEntitySprites("player/boy_up_2");
@@ -200,7 +198,6 @@ public class Player extends Entity {
right1 = initEntitySprites("player/boy_right_1"); right1 = initEntitySprites("player/boy_right_1");
right2 = initEntitySprites("player/boy_right_2"); right2 = initEntitySprites("player/boy_right_2");
} }
public void getPlayerAttackImage() { public void getPlayerAttackImage() {
attackUp1 = initEntitySprites("player/attack/boy_attack_up_1", panel.tileSize, panel.tileSize*2); 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); attackUp2 = initEntitySprites("player/attack/boy_attack_up_2", panel.tileSize, panel.tileSize*2);

View File

@@ -27,17 +27,7 @@ public class GreenSlimeMON extends Entity {
getImage(); getImage();
} }
public void getImage() { // INTERACTION
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");
}
public void setAction() { public void setAction() {
actionLock++; actionLock++;
if(actionLock != 120) return; //lock action for x frames if(actionLock != 120) return; //lock action for x frames
@@ -50,4 +40,16 @@ public class GreenSlimeMON extends Entity {
actionLock = 0; 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");
}
} }