Compare commits

...

6 Commits

17 changed files with 353 additions and 75 deletions

Binary file not shown.

View File

@@ -40,7 +40,7 @@ public class GamePanel extends JPanel implements Runnable {
public AssetSetter assetSetter = new AssetSetter(this); public AssetSetter assetSetter = new AssetSetter(this);
public UI ui = new UI(this); public UI ui = new UI(this);
public EventHandler eventH = new EventHandler(this); public EventHandler eventH = new EventHandler(this);
Sound se = new Sound(); public Sound se = new Sound();
Sound music = new Sound(); Sound music = new Sound();
Thread gameThread; Thread gameThread;

View File

@@ -6,23 +6,31 @@ import de.miaurizius.jgame2d.entity.item.HeartObj;
import java.awt.*; import java.awt.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.logging.Level;
public class UI { public class UI {
GamePanel panel; GamePanel panel;
Graphics2D graphics2d; Graphics2D graphics2d;
Font arial_40, arial_80B; //TODO: Custom font loader: https://www.youtube.com/watch?v=g-wrebFVP3E Font font;
BufferedImage heart_full, heart_half, heart_blank; BufferedImage heart_full, heart_half, heart_blank;
ArrayList<String> messages = new ArrayList<>(); ArrayList<String> messages = new ArrayList<>();
ArrayList<Integer> messageCounter = new ArrayList<>(); ArrayList<Integer> messageCounter = new ArrayList<>();
public String currentDialogue; public String currentDialogue;
public int commandNum; public int commandNum;
public int slotCol, slotRow;
public UI(GamePanel panel) { public UI(GamePanel panel) {
this.panel = panel; this.panel = panel;
arial_40 = new Font("Arial", Font.PLAIN, 40); font = new Font("Arial", Font.PLAIN, 40);
arial_80B = new Font("Arial", Font.BOLD, 80); try {
font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("assets/font/x12y16pxMaruMonica.ttf"));
} catch (FontFormatException | IOException e) {
Boot.logger.log(Level.WARNING, "Could not load maruMonica.ttf", e);
}
// CREATE HUD OBJECT // CREATE HUD OBJECT
Entity heart = new HeartObj(panel); Entity heart = new HeartObj(panel);
@@ -33,7 +41,7 @@ public class UI {
public void draw(Graphics2D graphics2d) { public void draw(Graphics2D graphics2d) {
this.graphics2d = graphics2d; this.graphics2d = graphics2d;
graphics2d.setFont(arial_40); graphics2d.setFont(font);
graphics2d.setColor(Color.white); graphics2d.setColor(Color.white);
if(panel.gameState == null) return; if(panel.gameState == null) return;
@@ -103,6 +111,113 @@ 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(28F));
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++) {
// EQUIP CURSOR
if(panel.player.inventory.get(i) == panel.player.currentWeapon || panel.player.inventory.get(i) == panel.player.currentShield) {
graphics2d.setColor(new Color(240, 190,90));
graphics2d.fillRoundRect(slotX, slotY, panel.tileSize, panel.tileSize, 10, 10);
}
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 itemIndex = getItemIndex();
int dFrameX = frameX;
int dFrameY = frameY + frameHeight+2;
int dFrameWidth = frameWidth;
int dFrameHeight = panel.tileSize*3;
// DRAW DESCRIPTION
int textX = dFrameX + 20;
int textY = dFrameY + panel.tileSize;
graphics2d.setFont(graphics2d.getFont().deriveFont(28F));
if(itemIndex < panel.player.inventory.size()) {
drawSubWindow(dFrameX, dFrameY, dFrameWidth, dFrameHeight);
for(String line : panel.player.inventory.get(itemIndex).description.split("\n")) {
graphics2d.drawString(line, textX, textY);
textY += 32;
}
}
}
// GAME STATES // GAME STATES
public void drawPauseScreen() { public void drawPauseScreen() {
@@ -121,7 +236,7 @@ public class UI {
int height = panel.tileSize*4; int height = panel.tileSize*4;
drawSubWindow(x, y, width, height); drawSubWindow(x, y, width, height);
graphics2d.setFont(graphics2d.getFont().deriveFont(Font.PLAIN, 28F)); graphics2d.setFont(graphics2d.getFont().deriveFont(Font.PLAIN, 30F));
x += panel.tileSize; x += panel.tileSize;
y += panel.tileSize; y += panel.tileSize;
@@ -169,51 +284,8 @@ public class UI {
if(commandNum == 2) graphics2d.drawString(">", x-panel.tileSize, y); if(commandNum == 2) graphics2d.drawString(">", x-panel.tileSize, y);
} }
public void drawCharacterScreen() { public void drawCharacterScreen() {
// DRAW FRAME drawCharStats();
final int frameX = panel.tileSize; drawInventory();
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 drawPlayScreen() { public void drawPlayScreen() {
drawPlayerLife(); drawPlayerLife();
@@ -232,7 +304,10 @@ public class UI {
return panel.screenWidth / 2 - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2; return panel.screenWidth / 2 - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2;
} }
public int getAlignedToRightX(String text, int tailX) { 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 int getItemIndex() {
return slotCol + slotRow*5;
} }
public void addMessage(String text) { public void addMessage(String text) {
messages.add(text); messages.add(text);

View File

@@ -6,6 +6,13 @@ public enum EntityType {
NPC, NPC,
MONSTER, MONSTER,
ITEM, ITEM,
WORLD WORLD,
WEAPON,
SHIELD;
public enum WeaponType {
SWORD,
AXE
}
} }

View File

@@ -1,6 +1,10 @@
package de.miaurizius.jgame2d.core.handlers; package de.miaurizius.jgame2d.core.handlers;
import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.entity.item.AxeObj;
import de.miaurizius.jgame2d.entity.item.IronShieldObj;
import de.miaurizius.jgame2d.entity.item.KeyObj;
import de.miaurizius.jgame2d.entity.item.PotionObj;
import de.miaurizius.jgame2d.entity.npc.OldManNPC; import de.miaurizius.jgame2d.entity.npc.OldManNPC;
import de.miaurizius.jgame2d.entity.monster.GreenSlimeMON; import de.miaurizius.jgame2d.entity.monster.GreenSlimeMON;
@@ -13,7 +17,31 @@ public class AssetSetter {
} }
public void setObject() { public void setObject() {
int i = 0;
panel.obj[i] = new KeyObj(panel);
panel.obj[i].worldX = panel.tileSize*25;
panel.obj[i].worldY = panel.tileSize*23;
i++;
panel.obj[i] = new KeyObj(panel);
panel.obj[i].worldX = panel.tileSize*21;
panel.obj[i].worldY = panel.tileSize*19;
i++;
panel.obj[i] = new AxeObj(panel);
panel.obj[i].worldX = panel.tileSize*33;
panel.obj[i].worldY = panel.tileSize*21;
i++;
panel.obj[i] = new IronShieldObj(panel);
panel.obj[i].worldX = panel.tileSize*35;
panel.obj[i].worldY = panel.tileSize*21;
i++;
panel.obj[i] = new PotionObj(panel);
panel.obj[i].worldX = panel.tileSize*22;
panel.obj[i].worldY = panel.tileSize*27;
i++;
} }
public void setNPC() { public void setNPC() {

View File

@@ -69,9 +69,41 @@ public class KeyHandler implements KeyListener {
panel.gameState = GameState.PLAY; panel.gameState = GameState.PLAY;
} }
} }
public void handleCharacter(int code) { 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;
case KeyEvent.VK_SPACE:
panel.player.selectItem();
break;
// EXIT STATE // EXIT STATE
if(code == KeyEvent.VK_C) panel.gameState = GameState.PLAY; case KeyEvent.VK_C, KeyEvent.VK_ESCAPE:
panel.gameState = GameState.PLAY;
break;
}
} }
// KEY-LISTENER // KEY-LISTENER
@@ -94,7 +126,11 @@ public class KeyHandler implements KeyListener {
handlePause(code); handlePause(code);
break; break;
case CHARACTER: case CHARACTER:
try {
handleCharacter(code); handleCharacter(code);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
break; break;
} }
} }

View File

@@ -25,6 +25,7 @@ public class Sound {
load(6, "assets/sounds/receivedamage.wav"); load(6, "assets/sounds/receivedamage.wav");
load(7, "assets/sounds/blocked.wav"); load(7, "assets/sounds/blocked.wav");
load(8, "assets/sounds/levelup.wav"); load(8, "assets/sounds/levelup.wav");
load(9, "assets/sounds/cursor.wav");
} }
@Deprecated @Deprecated

View File

@@ -36,6 +36,7 @@ public class Entity {
public boolean alive = true; public boolean alive = true;
public boolean dying; public boolean dying;
public boolean hpBarOn; public boolean hpBarOn;
public boolean consumable;
// COUNTER // COUNTER
public int spriteCounter; public int spriteCounter;
@@ -62,8 +63,10 @@ public class Entity {
public Entity currentShield; public Entity currentShield;
// ITEM ATTRIBUTES // ITEM ATTRIBUTES
public EntityType.WeaponType weaponType;
public int attackValue; public int attackValue;
public int defenseValue; public int defenseValue;
public String description;
public Entity(GamePanel panel) { public Entity(GamePanel panel) {
this.panel = panel; this.panel = panel;
@@ -188,6 +191,8 @@ public class Entity {
alive = false; alive = false;
} }
} }
public void use(Entity entity) {
} //If entity is consumable
// SETTING THINGS UP // SETTING THINGS UP
BufferedImage parseSprite() { BufferedImage parseSprite() {

View File

@@ -9,6 +9,7 @@ import de.miaurizius.jgame2d.entity.item.ShieldWoodObj;
import de.miaurizius.jgame2d.entity.item.SwordNormalObj; import de.miaurizius.jgame2d.entity.item.SwordNormalObj;
import java.awt.*; import java.awt.*;
import java.util.ArrayList;
public class Player extends Entity { public class Player extends Entity {
@@ -18,6 +19,8 @@ public class Player extends Entity {
// STATE // STATE
public boolean attackCancel; public boolean attackCancel;
public ArrayList<Entity> inventory = new ArrayList<>();
public final int maxInvSize = 20;
public Player(GamePanel panel, KeyHandler keyH) { public Player(GamePanel panel, KeyHandler keyH) {
super(panel); super(panel);
@@ -37,9 +40,6 @@ public class Player extends Entity {
solidArea.width = 24; solidArea.width = 24;
solidArea.height = 24; solidArea.height = 24;
attackArea.width = 36;
attackArea.height = 36;
setDefaultValues(); setDefaultValues();
getPlayerImage(); getPlayerImage();
getPlayerAttackImage(); getPlayerAttackImage();
@@ -118,6 +118,14 @@ public class Player extends Entity {
// INTERACTION // INTERACTION
public void pickObject(int index) { public void pickObject(int index) {
if(index == 999) return; if(index == 999) return;
if(inventory.size() == maxInvSize) {
panel.ui.addMessage("Your inventory is full!");
return;
}
inventory.add(panel.obj[index]);
panel.playSE(1);
panel.ui.addMessage("Picked up " + panel.obj[index].name + "!");
panel.obj[index] = null;
} }
public void interactMonster(int index) { public void interactMonster(int index) {
@@ -217,6 +225,24 @@ public class Player extends Entity {
panel.gameState = GameState.DIALOGUE; panel.gameState = GameState.DIALOGUE;
panel.ui.currentDialogue = "You are level " + level + " now!\nYou feel stronger!"; panel.ui.currentDialogue = "You are level " + level + " now!\nYou feel stronger!";
} }
public void selectItem() {
int itemIndex = panel.ui.getItemIndex();
if(itemIndex >= inventory.size()) return;
Entity selectedItem = inventory.get(itemIndex);
if(selectedItem.type == EntityType.WEAPON) {
currentWeapon = selectedItem;
getAttack();
getPlayerAttackImage();
}
if(selectedItem.type == EntityType.SHIELD) {
currentShield = selectedItem;
getDefense();
}
if(selectedItem.consumable) {
selectedItem.use(this);
inventory.remove(itemIndex);
}
}
// SETTING THINGS UP // SETTING THINGS UP
public void setDefaultValues() { public void setDefaultValues() {
@@ -238,8 +264,13 @@ public class Player extends Entity {
currentShield = new ShieldWoodObj(panel); currentShield = new ShieldWoodObj(panel);
attack = getAttack(); attack = getAttack();
defense = getDefense(); defense = getDefense();
// INVENTORY
inventory.add(currentWeapon);
inventory.add(currentShield);
} }
public int getAttack() { public int getAttack() {
attackArea = currentWeapon.attackArea;
return attack = strength * currentWeapon.attackValue; return attack = strength * currentWeapon.attackValue;
} }
public int getDefense() { public int getDefense() {
@@ -256,6 +287,8 @@ public class Player extends Entity {
right2 = initEntitySprites("player/boy_right_2"); right2 = initEntitySprites("player/boy_right_2");
} }
public void getPlayerAttackImage() { public void getPlayerAttackImage() {
switch(currentWeapon.weaponType) {
case SWORD:
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);
attackDown1 = initEntitySprites("player/attack/boy_attack_down_1", panel.tileSize, panel.tileSize * 2); attackDown1 = initEntitySprites("player/attack/boy_attack_down_1", panel.tileSize, panel.tileSize * 2);
@@ -264,6 +297,18 @@ public class Player extends Entity {
attackLeft2 = initEntitySprites("player/attack/boy_attack_left_2", panel.tileSize * 2, panel.tileSize); attackLeft2 = initEntitySprites("player/attack/boy_attack_left_2", panel.tileSize * 2, panel.tileSize);
attackRight1 = initEntitySprites("player/attack/boy_attack_right_1", panel.tileSize * 2, panel.tileSize); attackRight1 = initEntitySprites("player/attack/boy_attack_right_1", panel.tileSize * 2, panel.tileSize);
attackRight2 = initEntitySprites("player/attack/boy_attack_right_2", panel.tileSize * 2, panel.tileSize); attackRight2 = initEntitySprites("player/attack/boy_attack_right_2", panel.tileSize * 2, panel.tileSize);
break;
case AXE:
attackUp1 = initEntitySprites("player/attack/boy_axe_up_1", panel.tileSize, panel.tileSize * 2);
attackUp2 = initEntitySprites("player/attack/boy_axe_up_2", panel.tileSize, panel.tileSize * 2);
attackDown1 = initEntitySprites("player/attack/boy_axe_down_1", panel.tileSize, panel.tileSize * 2);
attackDown2 = initEntitySprites("player/attack/boy_axe_down_2", panel.tileSize, panel.tileSize * 2);
attackLeft1 = initEntitySprites("player/attack/boy_axe_left_1", panel.tileSize * 2, panel.tileSize);
attackLeft2 = initEntitySprites("player/attack/boy_axe_left_2", panel.tileSize * 2, panel.tileSize);
attackRight1 = initEntitySprites("player/attack/boy_axe_right_1", panel.tileSize * 2, panel.tileSize);
attackRight2 = initEntitySprites("player/attack/boy_axe_right_2", panel.tileSize * 2, panel.tileSize);
break;
}
} }
} }

View File

@@ -0,0 +1,22 @@
package de.miaurizius.jgame2d.entity.item;
import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.enums.EntityType;
import de.miaurizius.jgame2d.entity.Entity;
public class AxeObj extends Entity {
public AxeObj(GamePanel panel) {
super(panel);
name = "Woodcutter's Axe";
description = "[" + name + "]\nA bit rusty but still can \ncut some trees.";
type = EntityType.WEAPON;
weaponType = EntityType.WeaponType.AXE;
down1 = initEntitySprites("/objects/axe");
attackValue = 2;
attackArea.width = 30;
attackArea.height = 30;
}
}

View File

@@ -8,7 +8,7 @@ public class BootsObj extends Entity {
public BootsObj(GamePanel panel) { public BootsObj(GamePanel panel) {
super(panel); super(panel);
name = "boots"; name = "Boots";
type = EntityType.ITEM; type = EntityType.ITEM;
down1 = initEntitySprites("objects/boots.png"); down1 = initEntitySprites("objects/boots.png");
} }

View File

@@ -8,7 +8,7 @@ public class HeartObj extends Entity {
public HeartObj(GamePanel panel) { public HeartObj(GamePanel panel) {
super(panel); super(panel);
name = "heart"; name = "Heart Container";
type = EntityType.ITEM; type = EntityType.ITEM;
image = initEntitySprites("objects/heart_full"); image = initEntitySprites("objects/heart_full");
image2 = initEntitySprites("objects/heart_half"); image2 = initEntitySprites("objects/heart_half");

View File

@@ -0,0 +1,19 @@
package de.miaurizius.jgame2d.entity.item;
import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.enums.EntityType;
import de.miaurizius.jgame2d.entity.Entity;
public class IronShieldObj extends Entity {
public IronShieldObj(GamePanel panel) {
super(panel);
name = "Iron Shield";
description = "[" + name + "]\nAn iron shield. It's very\nheavy.";
type = EntityType.SHIELD;
down1 = initEntitySprites("objects/shield_blue");
defenseValue = 2;
}
}

View File

@@ -8,7 +8,8 @@ public class KeyObj extends Entity {
public KeyObj(GamePanel panel) { public KeyObj(GamePanel panel) {
super(panel); super(panel);
name = "key"; name = "Normal Key";
description = "[" + name + "]\nIt opens a door.";
type = EntityType.ITEM; type = EntityType.ITEM;
down1 = initEntitySprites("objects/key"); down1 = initEntitySprites("objects/key");
} }

View File

@@ -0,0 +1,33 @@
package de.miaurizius.jgame2d.entity.item;
import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.enums.EntityType;
import de.miaurizius.jgame2d.core.enums.GameState;
import de.miaurizius.jgame2d.entity.Entity;
public class PotionObj extends Entity {
GamePanel panel;
int value = 2;
public PotionObj(GamePanel panel) {
super(panel);
this.panel = panel;
type = EntityType.ITEM;
consumable = true;
name = "Red Potion";
down1 = initEntitySprites("objects/potion_red");
description = "[" + name + "]\nHeals your life by " + value + ".";
}
public void use(Entity entity) {
panel.gameState = GameState.DIALOGUE;
panel.ui.currentDialogue = "You drank a " + name + "!\n" +
"Your life has been recovered by " + value + ".";
entity.life += value;
if(panel.player.life > panel.player.maxLife) panel.player.life = panel.player.maxLife;
panel.playSE(2);
}
}

View File

@@ -8,8 +8,9 @@ public class ShieldWoodObj extends Entity {
public ShieldWoodObj(GamePanel panel) { public ShieldWoodObj(GamePanel panel) {
super(panel); super(panel);
name = "shield-wood"; name = "Wooden Shield";
type = EntityType.ITEM; description = "[" + name + "]\nAn old shield. It's not\nthat strong but its okay.";
type = EntityType.SHIELD;
down1 = initEntitySprites("objects/shield_wood"); down1 = initEntitySprites("objects/shield_wood");
defenseValue = 1; defenseValue = 1;
} }

View File

@@ -9,10 +9,15 @@ public class SwordNormalObj extends Entity {
public SwordNormalObj(GamePanel panel) { public SwordNormalObj(GamePanel panel) {
super(panel); super(panel);
name = "sword-normal"; name = "Normal Sword";
type = EntityType.ITEM; description = "[" + name + "]\nAn old sword.";
type = EntityType.WEAPON;
weaponType = EntityType.WeaponType.SWORD;
down1 = initEntitySprites("objects/sword_normal"); down1 = initEntitySprites("objects/sword_normal");
attackValue = 1; attackValue = 1;
attackArea.width = 36;
attackArea.height = 36;
} }
} }