added player inventory
This commit is contained in:
@@ -40,7 +40,7 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
public AssetSetter assetSetter = new AssetSetter(this);
|
||||
public UI ui = new UI(this);
|
||||
public EventHandler eventH = new EventHandler(this);
|
||||
Sound se = new Sound();
|
||||
public Sound se = new Sound();
|
||||
Sound music = new Sound();
|
||||
Thread gameThread;
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import de.miaurizius.jgame2d.entity.item.HeartObj;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class UI {
|
||||
|
||||
@@ -18,6 +19,7 @@ public class UI {
|
||||
ArrayList<Integer> messageCounter = new ArrayList<>();
|
||||
public String currentDialogue;
|
||||
public int commandNum;
|
||||
public int slotCol, slotRow;
|
||||
|
||||
public UI(GamePanel panel) {
|
||||
this.panel = panel;
|
||||
@@ -103,6 +105,106 @@ public class UI {
|
||||
}
|
||||
}
|
||||
}
|
||||
public void drawCharStats() {
|
||||
// DRAW FRAME
|
||||
final int frameX = panel.tileSize;
|
||||
final int frameY = panel.tileSize;
|
||||
final int frameWidth = panel.tileSize*5;
|
||||
final int frameHeight = panel.tileSize*10;
|
||||
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
|
||||
|
||||
// TEXT
|
||||
graphics2d.setColor(Color.white);
|
||||
graphics2d.setFont(graphics2d.getFont().deriveFont(22F));
|
||||
|
||||
int textX = frameX + 20;
|
||||
int textY = frameY + panel.tileSize;
|
||||
final int lineHeight = 35;
|
||||
|
||||
// NAMES
|
||||
String[] names = {"Level", "Life", "Strength", "Dexterity", "Attack", "Defense", "Exp", "Next Level", "Coins", "Weapon", "Shield"};
|
||||
for(String name : names) {
|
||||
graphics2d.drawString(name, textX, textY);
|
||||
textY += lineHeight + (name.equals("Coins") ? 20 : (name.equals("Weapon") ? 15 : 0));
|
||||
}
|
||||
|
||||
// VALUES
|
||||
int tailX = (frameX + frameWidth) - 30;
|
||||
textY = frameY + panel.tileSize;
|
||||
String[] values = {
|
||||
String.valueOf(panel.player.level),
|
||||
(panel.player.life + "/" + panel.player.maxLife),
|
||||
String.valueOf(panel.player.strength),
|
||||
String.valueOf(panel.player.dexterity),
|
||||
String.valueOf(panel.player.attack),
|
||||
String.valueOf(panel.player.defense),
|
||||
String.valueOf(panel.player.exp),
|
||||
String.valueOf(panel.player.nextLevelExp),
|
||||
String.valueOf(panel.player.coins)
|
||||
};
|
||||
for(String value : values) {
|
||||
textX = getAlignedToRightX(value, tailX);
|
||||
graphics2d.drawString(value, textX, textY);
|
||||
textY += lineHeight;
|
||||
}
|
||||
|
||||
graphics2d.drawImage(panel.player.currentWeapon.down1, tailX - panel.tileSize, textY-14, null);
|
||||
textY += panel.tileSize;
|
||||
graphics2d.drawImage(panel.player.currentShield.down1, tailX - panel.tileSize, textY-14, null);
|
||||
}
|
||||
public void drawInventory() {
|
||||
// DRAW FRAME
|
||||
int frameX = panel.tileSize*9;
|
||||
int frameY = panel.tileSize;
|
||||
int frameWidth = panel.tileSize*6;
|
||||
int frameHeight = panel.tileSize*5;
|
||||
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
|
||||
|
||||
// SLOT
|
||||
final int slotXStart = frameX + 20;
|
||||
final int slotYStart = frameY + 20;
|
||||
int slotX = slotXStart;
|
||||
int slotY = slotYStart;
|
||||
int slotSize = panel.tileSize+3;
|
||||
|
||||
// DRAW PLAYER ITEMS
|
||||
for(int i = 0; i < panel.player.inventory.size(); i++) {
|
||||
graphics2d.drawImage(panel.player.inventory.get(i).down1, slotX, slotY, null);
|
||||
slotX += slotSize;
|
||||
if (i == 4 || i == 9 || i == 14) {
|
||||
slotX = slotXStart;
|
||||
slotY += slotSize;
|
||||
}
|
||||
}
|
||||
|
||||
// CURSOR
|
||||
int curserX = slotXStart + (slotSize*slotCol);
|
||||
int curserY = slotYStart + (slotSize*slotRow);
|
||||
int curserHeight = panel.tileSize;
|
||||
int curserWidth = panel.tileSize;
|
||||
|
||||
graphics2d.setColor(Color.white);
|
||||
graphics2d.setStroke(new BasicStroke(3));
|
||||
graphics2d.drawRoundRect(curserX, curserY, curserWidth, curserHeight, 10, 10);
|
||||
|
||||
// DESCRIPTION FRAME
|
||||
int dFrameX = frameX;
|
||||
int dFrameY = frameY + frameHeight;
|
||||
int dFrameWidth = frameWidth;
|
||||
int dFrameHeight = panel.tileSize*3;
|
||||
drawSubWindow(dFrameX, dFrameY, dFrameWidth, dFrameHeight);
|
||||
|
||||
// DRAW DESCRIPTION
|
||||
int textX = dFrameX + 20;
|
||||
int textY = dFrameY + panel.tileSize;
|
||||
graphics2d.setFont(graphics2d.getFont().deriveFont(23F));
|
||||
int itemIndex = getItemIndex();
|
||||
if(itemIndex < panel.player.inventory.size())
|
||||
for(String line : panel.player.inventory.get(itemIndex).description.split("\n")) {
|
||||
graphics2d.drawString(line, textX, textY);
|
||||
textY += 32;
|
||||
}
|
||||
}
|
||||
|
||||
// GAME STATES
|
||||
public void drawPauseScreen() {
|
||||
@@ -169,51 +271,8 @@ public class UI {
|
||||
if(commandNum == 2) graphics2d.drawString(">", x-panel.tileSize, y);
|
||||
}
|
||||
public void drawCharacterScreen() {
|
||||
// DRAW FRAME
|
||||
final int frameX = panel.tileSize;
|
||||
final int frameY = panel.tileSize;
|
||||
final int frameWidth = panel.tileSize*5;
|
||||
final int frameHeight = panel.tileSize*10;
|
||||
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
|
||||
|
||||
// TEXT
|
||||
graphics2d.setColor(Color.white);
|
||||
graphics2d.setFont(graphics2d.getFont().deriveFont(22F));
|
||||
|
||||
int textX = frameX + 20;
|
||||
int textY = frameY + panel.tileSize;
|
||||
final int lineHeight = 35;
|
||||
|
||||
// NAMES
|
||||
String[] names = {"Level", "Life", "Strength", "Dexterity", "Attack", "Defense", "Exp", "Next Level", "Coins", "Weapon", "Shield"};
|
||||
for(String name : names) {
|
||||
graphics2d.drawString(name, textX, textY);
|
||||
textY += lineHeight + (name.equals("Coins") ? 20 : (name.equals("Weapon") ? 15 : 0));
|
||||
}
|
||||
|
||||
// VALUES
|
||||
int tailX = (frameX + frameWidth) - 30;
|
||||
textY = frameY + panel.tileSize;
|
||||
String[] values = {
|
||||
String.valueOf(panel.player.level),
|
||||
(panel.player.life + "/" + panel.player.maxLife),
|
||||
String.valueOf(panel.player.strength),
|
||||
String.valueOf(panel.player.dexterity),
|
||||
String.valueOf(panel.player.attack),
|
||||
String.valueOf(panel.player.defense),
|
||||
String.valueOf(panel.player.exp),
|
||||
String.valueOf(panel.player.nextLevelExp),
|
||||
String.valueOf(panel.player.coins)
|
||||
};
|
||||
for(String value : values) {
|
||||
textX = getAlignedToRightX(value, tailX);
|
||||
graphics2d.drawString(value, textX, textY);
|
||||
textY += lineHeight;
|
||||
}
|
||||
|
||||
graphics2d.drawImage(panel.player.currentWeapon.down1, tailX - panel.tileSize, textY-14, null);
|
||||
textY += panel.tileSize;
|
||||
graphics2d.drawImage(panel.player.currentShield.down1, tailX - panel.tileSize, textY-14, null);
|
||||
drawCharStats();
|
||||
drawInventory();
|
||||
}
|
||||
public void drawPlayScreen() {
|
||||
drawPlayerLife();
|
||||
@@ -232,11 +291,14 @@ public class UI {
|
||||
return panel.screenWidth / 2 - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2;
|
||||
}
|
||||
public int getAlignedToRightX(String text, int tailX) {
|
||||
return tailX - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2;
|
||||
return tailX - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth();
|
||||
}
|
||||
public void addMessage(String text) {
|
||||
messages.add(text);
|
||||
messageCounter.add(0);
|
||||
}
|
||||
public int getItemIndex() {
|
||||
return slotCol + slotRow*5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -69,9 +69,37 @@ public class KeyHandler implements KeyListener {
|
||||
panel.gameState = GameState.PLAY;
|
||||
}
|
||||
}
|
||||
public void handleCharacter(int code) {
|
||||
// EXIT STATE
|
||||
if(code == KeyEvent.VK_C) panel.gameState = GameState.PLAY;
|
||||
public void handleCharacter(int code) throws InterruptedException {
|
||||
switch (code) {
|
||||
case KeyEvent.VK_UP:
|
||||
if(panel.ui.slotRow == 0) break;
|
||||
if(panel.se.clips[9].isRunning()) break;
|
||||
panel.ui.slotRow--;
|
||||
panel.playSE(9);
|
||||
break;
|
||||
case KeyEvent.VK_DOWN:
|
||||
if(panel.ui.slotRow == 3) break;
|
||||
if(panel.se.clips[9].isRunning()) break;
|
||||
panel.ui.slotRow++;
|
||||
panel.playSE(9);
|
||||
break;
|
||||
case KeyEvent.VK_LEFT:
|
||||
if(panel.ui.slotCol == 0) break;
|
||||
if(panel.se.clips[9].isRunning()) break;
|
||||
panel.ui.slotCol--;
|
||||
panel.playSE(9);
|
||||
break;
|
||||
case KeyEvent.VK_RIGHT:
|
||||
if(panel.ui.slotCol == 4) break;
|
||||
if(panel.se.clips[9].isRunning()) break;
|
||||
panel.ui.slotCol++;
|
||||
panel.playSE(9);
|
||||
break;
|
||||
// EXIT STATE
|
||||
case KeyEvent.VK_C:
|
||||
panel.gameState = GameState.PLAY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// KEY-LISTENER
|
||||
@@ -94,7 +122,11 @@ public class KeyHandler implements KeyListener {
|
||||
handlePause(code);
|
||||
break;
|
||||
case CHARACTER:
|
||||
handleCharacter(code);
|
||||
try {
|
||||
handleCharacter(code);
|
||||
} catch (InterruptedException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ public class Sound {
|
||||
load(6, "assets/sounds/receivedamage.wav");
|
||||
load(7, "assets/sounds/blocked.wav");
|
||||
load(8, "assets/sounds/levelup.wav");
|
||||
load(9, "assets/sounds/cursor.wav");
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
||||
@@ -64,6 +64,7 @@ public class Entity {
|
||||
// ITEM ATTRIBUTES
|
||||
public int attackValue;
|
||||
public int defenseValue;
|
||||
public String description;
|
||||
|
||||
public Entity(GamePanel panel) {
|
||||
this.panel = panel;
|
||||
|
||||
@@ -5,10 +5,12 @@ import de.miaurizius.jgame2d.core.enums.Direction;
|
||||
import de.miaurizius.jgame2d.core.enums.EntityType;
|
||||
import de.miaurizius.jgame2d.core.enums.GameState;
|
||||
import de.miaurizius.jgame2d.core.handlers.KeyHandler;
|
||||
import de.miaurizius.jgame2d.entity.item.KeyObj;
|
||||
import de.miaurizius.jgame2d.entity.item.ShieldWoodObj;
|
||||
import de.miaurizius.jgame2d.entity.item.SwordNormalObj;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Player extends Entity {
|
||||
|
||||
@@ -18,6 +20,7 @@ public class Player extends Entity {
|
||||
|
||||
// STATE
|
||||
public boolean attackCancel;
|
||||
public ArrayList<Entity> inventory = new ArrayList<>();
|
||||
|
||||
public Player(GamePanel panel, KeyHandler keyH) {
|
||||
super(panel);
|
||||
@@ -238,6 +241,16 @@ public class Player extends Entity {
|
||||
currentShield = new ShieldWoodObj(panel);
|
||||
attack = getAttack();
|
||||
defense = getDefense();
|
||||
|
||||
// INVENTORY
|
||||
inventory.add(currentWeapon);
|
||||
inventory.add(currentShield);
|
||||
inventory.add(new KeyObj(panel));
|
||||
inventory.add(new KeyObj(panel));
|
||||
inventory.add(new KeyObj(panel));
|
||||
inventory.add(new KeyObj(panel));
|
||||
inventory.add(new KeyObj(panel));
|
||||
inventory.add(new KeyObj(panel));
|
||||
}
|
||||
public int getAttack() {
|
||||
return attack = strength * currentWeapon.attackValue;
|
||||
|
||||
@@ -8,7 +8,8 @@ public class KeyObj extends Entity {
|
||||
|
||||
public KeyObj(GamePanel panel) {
|
||||
super(panel);
|
||||
name = "key";
|
||||
name = "Normal Key";
|
||||
description = "[" + name + "]\nIt opens a door.";
|
||||
type = EntityType.ITEM;
|
||||
down1 = initEntitySprites("objects/key");
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@ public class ShieldWoodObj extends Entity {
|
||||
|
||||
public ShieldWoodObj(GamePanel panel) {
|
||||
super(panel);
|
||||
name = "shield-wood";
|
||||
name = "Wooden Shield";
|
||||
description = "[" + name + "]\nAn old shield.\nIt's not that strong but\nit does its job.";
|
||||
type = EntityType.ITEM;
|
||||
down1 = initEntitySprites("objects/shield_wood");
|
||||
defenseValue = 1;
|
||||
|
||||
@@ -9,7 +9,8 @@ public class SwordNormalObj extends Entity {
|
||||
public SwordNormalObj(GamePanel panel) {
|
||||
super(panel);
|
||||
|
||||
name = "sword-normal";
|
||||
name = "Normal Sword";
|
||||
description = "[" + name + "]\nAn old sword.";
|
||||
type = EntityType.ITEM;
|
||||
down1 = initEntitySprites("objects/sword_normal");
|
||||
attackValue = 1;
|
||||
|
||||
Reference in New Issue
Block a user