Compare commits
6 Commits
46b8c66ff5
...
d639e65c15
| Author | SHA1 | Date | |
|---|---|---|---|
|
d639e65c15
|
|||
|
51c262d9ac
|
|||
|
fb96035c99
|
|||
|
02d6672114
|
|||
|
bbeba11fb9
|
|||
|
cfea57e542
|
BIN
assets/font/x12y16pxMaruMonica.ttf
Normal file
BIN
assets/font/x12y16pxMaruMonica.ttf
Normal file
Binary file not shown.
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -6,6 +6,13 @@ public enum EntityType {
|
|||||||
NPC,
|
NPC,
|
||||||
MONSTER,
|
MONSTER,
|
||||||
ITEM,
|
ITEM,
|
||||||
WORLD
|
WORLD,
|
||||||
|
WEAPON,
|
||||||
|
SHIELD;
|
||||||
|
|
||||||
|
public enum WeaponType {
|
||||||
|
SWORD,
|
||||||
|
AXE
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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 {
|
||||||
// EXIT STATE
|
switch (code) {
|
||||||
if(code == KeyEvent.VK_C) panel.gameState = GameState.PLAY;
|
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
|
||||||
|
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:
|
||||||
handleCharacter(code);
|
try {
|
||||||
|
handleCharacter(code);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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,14 +287,28 @@ public class Player extends Entity {
|
|||||||
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);
|
switch(currentWeapon.weaponType) {
|
||||||
attackUp2 = initEntitySprites("player/attack/boy_attack_up_2", panel.tileSize, panel.tileSize*2);
|
case SWORD:
|
||||||
attackDown1 = initEntitySprites("player/attack/boy_attack_down_1", panel.tileSize, panel.tileSize*2);
|
attackUp1 = initEntitySprites("player/attack/boy_attack_up_1", panel.tileSize, panel.tileSize * 2);
|
||||||
attackDown2 = initEntitySprites("player/attack/boy_attack_down_2", panel.tileSize, panel.tileSize*2);
|
attackUp2 = initEntitySprites("player/attack/boy_attack_up_2", panel.tileSize, panel.tileSize * 2);
|
||||||
attackLeft1 = initEntitySprites("player/attack/boy_attack_left_1", panel.tileSize*2, panel.tileSize);
|
attackDown1 = initEntitySprites("player/attack/boy_attack_down_1", panel.tileSize, panel.tileSize * 2);
|
||||||
attackLeft2 = initEntitySprites("player/attack/boy_attack_left_2", panel.tileSize*2, panel.tileSize);
|
attackDown2 = initEntitySprites("player/attack/boy_attack_down_2", panel.tileSize, panel.tileSize * 2);
|
||||||
attackRight1 = initEntitySprites("player/attack/boy_attack_right_1", panel.tileSize*2, panel.tileSize);
|
attackLeft1 = initEntitySprites("player/attack/boy_attack_left_1", panel.tileSize * 2, panel.tileSize);
|
||||||
attackRight2 = initEntitySprites("player/attack/boy_attack_right_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);
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
22
src/de/miaurizius/jgame2d/entity/item/AxeObj.java
Normal file
22
src/de/miaurizius/jgame2d/entity/item/AxeObj.java
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
19
src/de/miaurizius/jgame2d/entity/item/IronShieldObj.java
Normal file
19
src/de/miaurizius/jgame2d/entity/item/IronShieldObj.java
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
33
src/de/miaurizius/jgame2d/entity/item/PotionObj.java
Normal file
33
src/de/miaurizius/jgame2d/entity/item/PotionObj.java
Normal 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user