Compare commits
3 Commits
d546d302c6
...
580775bf30
| Author | SHA1 | Date | |
|---|---|---|---|
|
580775bf30
|
|||
|
eb2c435671
|
|||
|
484abf4f9b
|
@@ -2,6 +2,7 @@ package de.miaurizius.jgame2d.core;
|
|||||||
|
|
||||||
import de.miaurizius.jgame2d.core.enums.GameState;
|
import de.miaurizius.jgame2d.core.enums.GameState;
|
||||||
import de.miaurizius.jgame2d.entity.Entity;
|
import de.miaurizius.jgame2d.entity.Entity;
|
||||||
|
import de.miaurizius.jgame2d.entity.item.CoinObj;
|
||||||
import de.miaurizius.jgame2d.entity.item.HeartObj;
|
import de.miaurizius.jgame2d.entity.item.HeartObj;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -16,13 +17,19 @@ public class UI {
|
|||||||
GamePanel panel;
|
GamePanel panel;
|
||||||
Graphics2D graphics2d;
|
Graphics2D graphics2d;
|
||||||
Font font;
|
Font font;
|
||||||
BufferedImage heart_full, heart_half, heart_blank;
|
BufferedImage heart_full, heart_half, heart_blank, coin;
|
||||||
ArrayList<String> messages = new ArrayList<>();
|
ArrayList<String> messages = new ArrayList<>();
|
||||||
ArrayList<Integer> messageCounter = new ArrayList<>();
|
ArrayList<Integer> messageCounter = new ArrayList<>();
|
||||||
public OptionState optionState;
|
|
||||||
public String currentDialogue;
|
public String currentDialogue;
|
||||||
|
public Entity tradingNPC;
|
||||||
public int commandNum;
|
public int commandNum;
|
||||||
public int slotCol, slotRow;
|
public int playerSlotCol, playerSlotRow;
|
||||||
|
public int npcSlotCol, npcSlotRow;
|
||||||
|
private int transCounter;
|
||||||
|
|
||||||
|
// SUB-STATES
|
||||||
|
public TradeState tradeState = TradeState.SELECT;
|
||||||
|
public OptionState optionState;
|
||||||
|
|
||||||
public UI(GamePanel panel) {
|
public UI(GamePanel panel) {
|
||||||
this.panel = panel;
|
this.panel = panel;
|
||||||
@@ -38,6 +45,8 @@ public class UI {
|
|||||||
heart_full = heart.image;
|
heart_full = heart.image;
|
||||||
heart_half = heart.image2;
|
heart_half = heart.image2;
|
||||||
heart_blank = heart.image3;
|
heart_blank = heart.image3;
|
||||||
|
Entity coin = new CoinObj(panel);
|
||||||
|
this.coin = coin.down1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void draw(Graphics2D graphics2d) {
|
public void draw(Graphics2D graphics2d) {
|
||||||
@@ -47,12 +56,14 @@ public class UI {
|
|||||||
|
|
||||||
if(panel.gameState == null) return;
|
if(panel.gameState == null) return;
|
||||||
switch (panel.gameState) {
|
switch (panel.gameState) {
|
||||||
case GameState.PLAY -> drawPlayScreen();
|
case PLAY -> drawPlayScreen();
|
||||||
case GameState.PAUSE -> drawPauseScreen();
|
case PAUSE -> drawPauseScreen();
|
||||||
case GameState.DIALOGUE -> drawDialogueScreen();
|
case DIALOGUE -> drawDialogueScreen();
|
||||||
case TITLE -> drawTitleScreen();
|
case TITLE -> drawTitleScreen();
|
||||||
case CHARACTER -> drawCharacterScreen();
|
case CHARACTER -> drawCharacterScreen();
|
||||||
case GAMEOVER -> drawGameOverScreen();
|
case GAMEOVER -> drawGameOverScreen();
|
||||||
|
case TRANSITION -> drawTransitionScreen();
|
||||||
|
case TRADE -> drawTradeScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,12 +161,26 @@ public class UI {
|
|||||||
textY += panel.tileSize;
|
textY += panel.tileSize;
|
||||||
graphics2d.drawImage(panel.player.currentShield.down1, tailX - panel.tileSize, textY-14, null);
|
graphics2d.drawImage(panel.player.currentShield.down1, tailX - panel.tileSize, textY-14, null);
|
||||||
}
|
}
|
||||||
private void drawInventory() {
|
private void drawInventory(Entity entity, boolean cursor) {
|
||||||
|
int frameX, frameY, frameWidth, frameHeight;
|
||||||
|
int slotCol, slotRow;
|
||||||
|
|
||||||
// DRAW FRAME
|
// DRAW FRAME
|
||||||
int frameX = panel.tileSize*12;
|
if(entity == panel.player) {
|
||||||
int frameY = panel.tileSize;
|
frameX = panel.tileSize*12;
|
||||||
int frameWidth = panel.tileSize*6;
|
frameY = panel.tileSize;
|
||||||
int frameHeight = panel.tileSize*5;
|
frameWidth = panel.tileSize*6;
|
||||||
|
frameHeight = panel.tileSize*5;
|
||||||
|
slotCol = playerSlotCol;
|
||||||
|
slotRow = playerSlotRow;
|
||||||
|
} else {
|
||||||
|
frameX = panel.tileSize*2;
|
||||||
|
frameY = panel.tileSize;
|
||||||
|
frameWidth = panel.tileSize*6;
|
||||||
|
frameHeight = panel.tileSize*5;
|
||||||
|
slotCol = npcSlotCol;
|
||||||
|
slotRow = npcSlotRow;
|
||||||
|
}
|
||||||
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
|
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
|
||||||
|
|
||||||
// SLOT
|
// SLOT
|
||||||
@@ -165,15 +190,15 @@ public class UI {
|
|||||||
int slotY = slotYStart;
|
int slotY = slotYStart;
|
||||||
int slotSize = panel.tileSize+3;
|
int slotSize = panel.tileSize+3;
|
||||||
|
|
||||||
// DRAW PLAYER ITEMS
|
// DRAW ITEMS
|
||||||
for(int i = 0; i < panel.player.inventory.size(); i++) {
|
for(int i = 0; i < entity.inventory.size(); i++) {
|
||||||
|
|
||||||
// EQUIP CURSOR
|
// EQUIP CURSOR
|
||||||
if(panel.player.inventory.get(i) == panel.player.currentWeapon || panel.player.inventory.get(i) == panel.player.currentShield) {
|
if(entity.inventory.get(i) == entity.currentWeapon || entity.inventory.get(i) == entity.currentShield) {
|
||||||
graphics2d.setColor(new Color(240, 190,90));
|
graphics2d.setColor(new Color(240, 190,90));
|
||||||
graphics2d.fillRoundRect(slotX, slotY, panel.tileSize, panel.tileSize, 10, 10);
|
graphics2d.fillRoundRect(slotX, slotY, panel.tileSize, panel.tileSize, 10, 10);
|
||||||
}
|
}
|
||||||
graphics2d.drawImage(panel.player.inventory.get(i).down1, slotX, slotY, null);
|
graphics2d.drawImage(entity.inventory.get(i).down1, slotX, slotY, null);
|
||||||
slotX += slotSize;
|
slotX += slotSize;
|
||||||
if (i == 4 || i == 9 || i == 14) {
|
if (i == 4 || i == 9 || i == 14) {
|
||||||
slotX = slotXStart;
|
slotX = slotXStart;
|
||||||
@@ -182,17 +207,17 @@ public class UI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CURSOR
|
// CURSOR
|
||||||
|
if(!cursor) return;
|
||||||
int curserX = slotXStart + (slotSize*slotCol);
|
int curserX = slotXStart + (slotSize*slotCol);
|
||||||
int curserY = slotYStart + (slotSize*slotRow);
|
int curserY = slotYStart + (slotSize*slotRow);
|
||||||
int curserHeight = panel.tileSize;
|
int curserHeight = panel.tileSize;
|
||||||
int curserWidth = panel.tileSize;
|
int curserWidth = panel.tileSize;
|
||||||
|
|
||||||
graphics2d.setColor(Color.white);
|
graphics2d.setColor(Color.white);
|
||||||
graphics2d.setStroke(new BasicStroke(3));
|
graphics2d.setStroke(new BasicStroke(3));
|
||||||
graphics2d.drawRoundRect(curserX, curserY, curserWidth, curserHeight, 10, 10);
|
graphics2d.drawRoundRect(curserX, curserY, curserWidth, curserHeight, 10, 10);
|
||||||
|
|
||||||
// DESCRIPTION FRAME
|
// DESCRIPTION FRAME
|
||||||
int itemIndex = getItemIndex();
|
int itemIndex = getItemIndex(slotCol, slotRow);
|
||||||
int dFrameX = frameX;
|
int dFrameX = frameX;
|
||||||
int dFrameY = frameY + frameHeight+2;
|
int dFrameY = frameY + frameHeight+2;
|
||||||
int dFrameWidth = frameWidth;
|
int dFrameWidth = frameWidth;
|
||||||
@@ -202,9 +227,9 @@ public class UI {
|
|||||||
int textX = dFrameX + 20;
|
int textX = dFrameX + 20;
|
||||||
int textY = dFrameY + panel.tileSize;
|
int textY = dFrameY + panel.tileSize;
|
||||||
graphics2d.setFont(graphics2d.getFont().deriveFont(28F));
|
graphics2d.setFont(graphics2d.getFont().deriveFont(28F));
|
||||||
if(itemIndex < panel.player.inventory.size()) {
|
if(itemIndex < entity.inventory.size()) {
|
||||||
drawSubWindow(dFrameX, dFrameY, dFrameWidth, dFrameHeight);
|
drawSubWindow(dFrameX, dFrameY, dFrameWidth, dFrameHeight);
|
||||||
for(String line : panel.player.inventory.get(itemIndex).description.split("\n")) {
|
for(String line : entity.inventory.get(itemIndex).description.split("\n")) {
|
||||||
graphics2d.drawString(line, textX, textY);
|
graphics2d.drawString(line, textX, textY);
|
||||||
textY += 32;
|
textY += 32;
|
||||||
}
|
}
|
||||||
@@ -289,7 +314,7 @@ public class UI {
|
|||||||
}
|
}
|
||||||
private void drawCharacterScreen() {
|
private void drawCharacterScreen() {
|
||||||
drawCharStats();
|
drawCharStats();
|
||||||
drawInventory();
|
drawInventory(panel.player, true);
|
||||||
}
|
}
|
||||||
private void drawPlayScreen() {
|
private void drawPlayScreen() {
|
||||||
drawPlayerLife();
|
drawPlayerLife();
|
||||||
@@ -327,6 +352,157 @@ public class UI {
|
|||||||
graphics2d.drawString(text, x, y);
|
graphics2d.drawString(text, x, y);
|
||||||
if(commandNum == 1) graphics2d.drawString(">", x-panel.tileSize, y);
|
if(commandNum == 1) graphics2d.drawString(">", x-panel.tileSize, y);
|
||||||
}
|
}
|
||||||
|
private void drawTransitionScreen() {
|
||||||
|
transCounter++;
|
||||||
|
graphics2d.setColor(new Color(0,0,0, transCounter*5));
|
||||||
|
graphics2d.fillRect(0, 0, panel.screenWidth, panel.screenHeight);
|
||||||
|
if(transCounter != 50) return;
|
||||||
|
transCounter = 0;
|
||||||
|
panel.gameState = GameState.PLAY;
|
||||||
|
panel.currentMap = panel.eventH.tempMap;
|
||||||
|
panel.player.worldX = panel.tileSize * panel.eventH.tempCol;
|
||||||
|
panel.player.worldY = panel.tileSize * panel.eventH.tempRow;
|
||||||
|
panel.eventH.prevEventX = panel.player.worldX;
|
||||||
|
panel.eventH.prevEventY = panel.player.worldY;
|
||||||
|
}
|
||||||
|
private void drawTradeScreen() {
|
||||||
|
switch(tradeState) {
|
||||||
|
case SELECT -> tradeSelect();
|
||||||
|
case BUY -> tradeBuy();
|
||||||
|
case SELL -> tradeSell();
|
||||||
|
}
|
||||||
|
panel.keyH.spacePressed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TRADING
|
||||||
|
private void tradeSelect() {
|
||||||
|
drawDialogueScreen();
|
||||||
|
|
||||||
|
int x = panel.tileSize*15;
|
||||||
|
int y = panel.tileSize*4;
|
||||||
|
int width = panel.tileSize*3;
|
||||||
|
int height = (int)(panel.tileSize*3.5);
|
||||||
|
drawSubWindow(x, y, width, height);
|
||||||
|
|
||||||
|
// DRAW TEXTS
|
||||||
|
x += panel.tileSize;
|
||||||
|
y += panel.tileSize;
|
||||||
|
graphics2d.drawString("Buy",x , y);
|
||||||
|
if(commandNum == 0) {
|
||||||
|
graphics2d.drawString(">", x-panel.tileSize/2, y);
|
||||||
|
if(panel.keyH.spacePressed) tradeState = TradeState.BUY;
|
||||||
|
}
|
||||||
|
y += panel.tileSize;
|
||||||
|
|
||||||
|
graphics2d.drawString("Sell",x , y);
|
||||||
|
if(commandNum == 1) {
|
||||||
|
graphics2d.drawString(">", x-panel.tileSize/2, y);
|
||||||
|
if(panel.keyH.spacePressed) tradeState = TradeState.SELL;
|
||||||
|
}
|
||||||
|
y += panel.tileSize;
|
||||||
|
|
||||||
|
graphics2d.drawString("Leave",x , y);
|
||||||
|
if(commandNum == 2) {
|
||||||
|
graphics2d.drawString(">", x-panel.tileSize/2, y);
|
||||||
|
if(panel.keyH.spacePressed) {
|
||||||
|
commandNum = 0;
|
||||||
|
tradeState = TradeState.SELECT;
|
||||||
|
panel.gameState = GameState.DIALOGUE;
|
||||||
|
currentDialogue = "Come again, hehe!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void tradeBuy() {
|
||||||
|
drawInventory(panel.player, false);
|
||||||
|
drawInventory(tradingNPC, true);
|
||||||
|
|
||||||
|
// HINT WINDOW
|
||||||
|
int x = panel.tileSize*2;
|
||||||
|
int y = panel.tileSize*9;
|
||||||
|
int width = panel.tileSize*6;
|
||||||
|
int height = panel.tileSize*2;
|
||||||
|
drawSubWindow(x, y, width, height);
|
||||||
|
graphics2d.drawString("[ESC] Back", x+panel.tileSize, y+60);
|
||||||
|
|
||||||
|
// PLAYER COINS
|
||||||
|
x = panel.tileSize*12;
|
||||||
|
drawSubWindow(x, y, width, height);
|
||||||
|
graphics2d.drawString("Your Coins: " + panel.player.coins, x+panel.tileSize, y+60);
|
||||||
|
|
||||||
|
// PRICE WINDOW
|
||||||
|
int itemIndex = getItemIndex(npcSlotCol, npcSlotRow);
|
||||||
|
if(itemIndex < tradingNPC.inventory.size()) {
|
||||||
|
x = (int)(panel.tileSize*5.5);
|
||||||
|
y = (int)(panel.tileSize*5.5);
|
||||||
|
width = (int)(panel.tileSize*2.5);
|
||||||
|
height = panel.tileSize;
|
||||||
|
drawSubWindow(x, y, width, height);
|
||||||
|
graphics2d.drawImage(coin, x+10, y+8, 32, 32, null);
|
||||||
|
String price = String.valueOf(tradingNPC.inventory.get(itemIndex).price);
|
||||||
|
graphics2d.drawString(price, getAlignedToRightX(price, panel.tileSize*8-20), y+34);
|
||||||
|
|
||||||
|
// BUY
|
||||||
|
if(!panel.keyH.spacePressed) return;
|
||||||
|
if(tradingNPC.inventory.get(itemIndex).price > panel.player.coins) {
|
||||||
|
tradeState = TradeState.SELECT;
|
||||||
|
panel.gameState = GameState.DIALOGUE;
|
||||||
|
currentDialogue = "You need more coins to buy that!";
|
||||||
|
drawDialogueScreen();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(panel.player.inventory.size() == panel.player.maxInvSize) {
|
||||||
|
tradeState = TradeState.SELECT;
|
||||||
|
panel.gameState = GameState.DIALOGUE;
|
||||||
|
currentDialogue = "Your inventory is full!";
|
||||||
|
drawDialogueScreen();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
panel.player.coins -= tradingNPC.inventory.get(itemIndex).price;
|
||||||
|
panel.player.inventory.add(tradingNPC.inventory.get(itemIndex));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void tradeSell() {
|
||||||
|
drawInventory(panel.player, true);
|
||||||
|
int x, y, width, height;
|
||||||
|
|
||||||
|
// HINT WINDOW
|
||||||
|
x = panel.tileSize*2;
|
||||||
|
y = panel.tileSize*9;
|
||||||
|
width = panel.tileSize*6;
|
||||||
|
height = panel.tileSize*2;
|
||||||
|
drawSubWindow(x, y, width, height);
|
||||||
|
graphics2d.drawString("[ESC] Back", x+panel.tileSize, y+60);
|
||||||
|
|
||||||
|
// PLAYER COINS
|
||||||
|
x = panel.tileSize*12;
|
||||||
|
drawSubWindow(x, y, width, height);
|
||||||
|
graphics2d.drawString("Your Coins: " + panel.player.coins, x+panel.tileSize, y+60);
|
||||||
|
|
||||||
|
// PRICE WINDOW
|
||||||
|
int itemIndex = getItemIndex(playerSlotCol, playerSlotRow);
|
||||||
|
if(itemIndex < panel.player.inventory.size()) {
|
||||||
|
x = (int)(panel.tileSize*15.5);
|
||||||
|
y = (int)(panel.tileSize*5.5);
|
||||||
|
width = (int)(panel.tileSize*2.5);
|
||||||
|
height = panel.tileSize;
|
||||||
|
drawSubWindow(x, y, width, height);
|
||||||
|
graphics2d.drawImage(coin, x+10, y+8, 32, 32, null);
|
||||||
|
String price = String.valueOf(panel.player.inventory.get(itemIndex).price/2);
|
||||||
|
graphics2d.drawString(price, getAlignedToRightX(price, panel.tileSize*18-20), y+34);
|
||||||
|
|
||||||
|
// SELL
|
||||||
|
if(!panel.keyH.spacePressed) return;
|
||||||
|
if(panel.player.inventory.get(itemIndex) == panel.player.currentWeapon || panel.player.inventory.get(itemIndex) == panel.player.currentShield) {
|
||||||
|
commandNum = 0;
|
||||||
|
tradeState = TradeState.SELECT;
|
||||||
|
panel.gameState = GameState.DIALOGUE;
|
||||||
|
currentDialogue = "You cannot sell an equipped item!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
panel.player.inventory.remove(itemIndex);
|
||||||
|
panel.player.coins += Integer.parseInt(price);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UTILITY
|
// UTILITY
|
||||||
private void drawSubWindow(int x, int y, int width, int height) {
|
private void drawSubWindow(int x, int y, int width, int height) {
|
||||||
@@ -342,8 +518,8 @@ public class UI {
|
|||||||
private int getAlignedToRightX(String text, int tailX) {
|
private int getAlignedToRightX(String text, int tailX) {
|
||||||
return tailX - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth();
|
return tailX - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth();
|
||||||
}
|
}
|
||||||
public int getItemIndex() {
|
public int getItemIndex(int slotCol, int slotRow) {
|
||||||
return slotCol + slotRow*5;
|
return slotCol + slotRow *5;
|
||||||
}
|
}
|
||||||
public void addMessage(String text) {
|
public void addMessage(String text) {
|
||||||
messages.add(text);
|
messages.add(text);
|
||||||
@@ -526,5 +702,9 @@ public class UI {
|
|||||||
CONTROLS,
|
CONTROLS,
|
||||||
QUITNF;
|
QUITNF;
|
||||||
}
|
}
|
||||||
|
public enum TradeState {
|
||||||
|
SELECT,
|
||||||
|
BUY,
|
||||||
|
SELL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,16 @@ package de.miaurizius.jgame2d.core.enums;
|
|||||||
|
|
||||||
public enum GameState {
|
public enum GameState {
|
||||||
|
|
||||||
|
// SCENES
|
||||||
PLAY,
|
PLAY,
|
||||||
PAUSE,
|
PAUSE,
|
||||||
DIALOGUE,
|
|
||||||
TITLE,
|
TITLE,
|
||||||
CHARACTER,
|
|
||||||
|
// IN-GAME
|
||||||
|
CHARACTER, //inventory
|
||||||
|
DIALOGUE,
|
||||||
GAMEOVER,
|
GAMEOVER,
|
||||||
|
TRANSITION,
|
||||||
|
TRADE,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package de.miaurizius.jgame2d.core.handlers;
|
|||||||
import de.miaurizius.jgame2d.core.GamePanel;
|
import de.miaurizius.jgame2d.core.GamePanel;
|
||||||
import de.miaurizius.jgame2d.core.enums.Map;
|
import de.miaurizius.jgame2d.core.enums.Map;
|
||||||
import de.miaurizius.jgame2d.entity.item.*;
|
import de.miaurizius.jgame2d.entity.item.*;
|
||||||
|
import de.miaurizius.jgame2d.entity.npc.MerchantNPC;
|
||||||
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;
|
||||||
import de.miaurizius.jgame2d.tile.interactive.DryTreeTI;
|
import de.miaurizius.jgame2d.tile.interactive.DryTreeTI;
|
||||||
@@ -48,7 +49,7 @@ public class AssetSetter {
|
|||||||
panel.npc[Map.OVERWORLD.getIndex()][0].worldX = panel.tileSize*21;
|
panel.npc[Map.OVERWORLD.getIndex()][0].worldX = panel.tileSize*21;
|
||||||
panel.npc[Map.OVERWORLD.getIndex()][0].worldY = panel.tileSize*21;
|
panel.npc[Map.OVERWORLD.getIndex()][0].worldY = panel.tileSize*21;
|
||||||
|
|
||||||
panel.npc[Map.HUT.getIndex()][0] = new OldManNPC(panel);
|
panel.npc[Map.HUT.getIndex()][0] = new MerchantNPC(panel);
|
||||||
panel.npc[Map.HUT.getIndex()][0].worldX = panel.tileSize*12;
|
panel.npc[Map.HUT.getIndex()][0].worldX = panel.tileSize*12;
|
||||||
panel.npc[Map.HUT.getIndex()][0].worldY = panel.tileSize*7;
|
panel.npc[Map.HUT.getIndex()][0].worldY = panel.tileSize*7;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import de.miaurizius.jgame2d.core.GamePanel;
|
|||||||
import de.miaurizius.jgame2d.core.enums.Direction;
|
import de.miaurizius.jgame2d.core.enums.Direction;
|
||||||
import de.miaurizius.jgame2d.core.enums.GameState;
|
import de.miaurizius.jgame2d.core.enums.GameState;
|
||||||
import de.miaurizius.jgame2d.core.enums.Map;
|
import de.miaurizius.jgame2d.core.enums.Map;
|
||||||
|
import de.miaurizius.jgame2d.entity.Entity;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
@@ -11,9 +12,13 @@ public class EventHandler {
|
|||||||
|
|
||||||
GamePanel panel;
|
GamePanel panel;
|
||||||
EventRect[][][] eventRect;
|
EventRect[][][] eventRect;
|
||||||
int prevEventX, prevEventY;
|
public int prevEventX, prevEventY;
|
||||||
boolean canTouchEvent = true;
|
boolean canTouchEvent = true;
|
||||||
|
|
||||||
|
// TMP VARS FOR TRANSITION
|
||||||
|
public int tempCol, tempRow;
|
||||||
|
public Map tempMap;
|
||||||
|
|
||||||
public EventHandler(GamePanel panel) {
|
public EventHandler(GamePanel panel) {
|
||||||
this.panel = panel;
|
this.panel = panel;
|
||||||
eventRect = new EventRect[Map.values().length][panel.maxWorldCol][panel.maxWorldRow];
|
eventRect = new EventRect[Map.values().length][panel.maxWorldCol][panel.maxWorldRow];
|
||||||
@@ -49,18 +54,22 @@ public class EventHandler {
|
|||||||
if(distance > panel.tileSize) canTouchEvent = true;
|
if(distance > panel.tileSize) canTouchEvent = true;
|
||||||
if(!canTouchEvent) return;
|
if(!canTouchEvent) return;
|
||||||
|
|
||||||
if(hit(Map.OVERWORLD, 27,16, Direction.RIGHT)) damagePit(GameState.DIALOGUE);
|
// PIT/POOL TESTS
|
||||||
else if(hit(Map.OVERWORLD, 23,12, null)) healingPool(GameState.DIALOGUE);
|
if(hit(Map.OVERWORLD, 27,16, Direction.RIGHT)) damagePit();
|
||||||
|
else if(hit(Map.OVERWORLD, 23,12, null)) healingPool();
|
||||||
|
|
||||||
// HUT
|
// HUT
|
||||||
else if(hit(Map.OVERWORLD, 10, 39, null)) changeMap(Map.HUT, 12, 13);
|
else if(hit(Map.OVERWORLD, 10, 39, null)) changeMap(Map.HUT, 12, 13);
|
||||||
else if(hit(Map.HUT, 12, 13, null)) changeMap(Map.OVERWORLD, 10, 39);
|
else if(hit(Map.HUT, 12, 13, null)) changeMap(Map.OVERWORLD, 10, 39);
|
||||||
|
|
||||||
|
// ADVANCED SPEAKING
|
||||||
|
else if(hit(Map.HUT, 12, 9, Direction.UP)) speak(panel.npc[Map.HUT.getIndex()][0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param reqDirection Set to null if no direction is required
|
* @param reqDirection Set to null if no direction is required
|
||||||
*/
|
*/
|
||||||
public boolean hit(Map map, int eventCol, int eventRow, Direction reqDirection) {
|
private boolean hit(Map map, int eventCol, int eventRow, Direction reqDirection) {
|
||||||
boolean hit = false;
|
boolean hit = false;
|
||||||
panel.player.solidArea.x = panel.player.worldX + panel.player.solidArea.x;
|
panel.player.solidArea.x = panel.player.worldX + panel.player.solidArea.x;
|
||||||
panel.player.solidArea.y = panel.player.worldY + panel.player.solidArea.y;
|
panel.player.solidArea.y = panel.player.worldY + panel.player.solidArea.y;
|
||||||
@@ -82,16 +91,16 @@ public class EventHandler {
|
|||||||
return hit;
|
return hit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void damagePit(GameState gameState) {
|
private void damagePit() {
|
||||||
panel.gameState = gameState;
|
panel.gameState = GameState.DIALOGUE;
|
||||||
panel.playSE(6);
|
panel.playSE(6);
|
||||||
panel.ui.currentDialogue = "You have fallen into a pit!";
|
panel.ui.currentDialogue = "You have fallen into a pit!";
|
||||||
panel.player.life -= 1;
|
panel.player.life -= 1;
|
||||||
canTouchEvent = false;
|
canTouchEvent = false;
|
||||||
}
|
}
|
||||||
public void healingPool(GameState gameState) {
|
private void healingPool() {
|
||||||
if(!panel.keyH.spacePressed) return;
|
if(!panel.keyH.spacePressed) return;
|
||||||
panel.gameState = gameState;
|
panel.gameState = GameState.DIALOGUE;
|
||||||
panel.player.attackCancel = true;
|
panel.player.attackCancel = true;
|
||||||
panel.playSE(2);
|
panel.playSE(2);
|
||||||
panel.ui.currentDialogue = "You drank the holy water.\nYour life has been recovered!\nBut all monsters respawned... \nGood luck!";
|
panel.ui.currentDialogue = "You drank the holy water.\nYour life has been recovered!\nBut all monsters respawned... \nGood luck!";
|
||||||
@@ -99,15 +108,20 @@ public class EventHandler {
|
|||||||
canTouchEvent = false;
|
canTouchEvent = false;
|
||||||
panel.assetSetter.setMonster();
|
panel.assetSetter.setMonster();
|
||||||
}
|
}
|
||||||
public void changeMap(Map map, int col, int row) {
|
private void changeMap(Map map, int col, int row) {
|
||||||
panel.currentMap = map;
|
panel.gameState = GameState.TRANSITION;
|
||||||
panel.player.worldX = panel.tileSize*col;
|
tempMap = map;
|
||||||
panel.player.worldY = panel.tileSize*row;
|
tempCol = col;
|
||||||
prevEventX = panel.player.worldX;
|
tempRow = row;
|
||||||
prevEventY = panel.player.worldY;
|
|
||||||
canTouchEvent = false;
|
canTouchEvent = false;
|
||||||
panel.playSE(13);
|
panel.playSE(13);
|
||||||
}
|
}
|
||||||
|
private void speak(Entity entity) {
|
||||||
|
if(!panel.keyH.spacePressed) return;
|
||||||
|
panel.gameState = GameState.DIALOGUE;
|
||||||
|
panel.player.attackCancel = true;
|
||||||
|
entity.speak();
|
||||||
|
}
|
||||||
|
|
||||||
static private class EventRect extends Rectangle {
|
static private class EventRect extends Rectangle {
|
||||||
int eventRectDefaultX, eventRectDefaultY;
|
int eventRectDefaultX, eventRectDefaultY;
|
||||||
|
|||||||
@@ -124,38 +124,11 @@ public class KeyHandler implements KeyListener {
|
|||||||
}
|
}
|
||||||
private void handleCharacter(int code) {
|
private void handleCharacter(int code) {
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case KeyEvent.VK_UP:
|
case KeyEvent.VK_UP, KeyEvent.VK_DOWN, KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT -> playerInventory(code);
|
||||||
if(panel.ui.slotRow == 0) break;
|
case KeyEvent.VK_SPACE -> panel.player.selectItem();
|
||||||
if(panel.sfx.clips[9].isRunning()) break;
|
|
||||||
panel.ui.slotRow--;
|
|
||||||
panel.playSE(9);
|
|
||||||
break;
|
|
||||||
case KeyEvent.VK_DOWN:
|
|
||||||
if(panel.ui.slotRow == 3) break;
|
|
||||||
if(panel.sfx.clips[9].isRunning()) break;
|
|
||||||
panel.ui.slotRow++;
|
|
||||||
panel.playSE(9);
|
|
||||||
break;
|
|
||||||
case KeyEvent.VK_LEFT:
|
|
||||||
if(panel.ui.slotCol == 0) break;
|
|
||||||
if(panel.sfx.clips[9].isRunning()) break;
|
|
||||||
panel.ui.slotCol--;
|
|
||||||
panel.playSE(9);
|
|
||||||
break;
|
|
||||||
case KeyEvent.VK_RIGHT:
|
|
||||||
if(panel.ui.slotCol == 4) break;
|
|
||||||
if(panel.sfx.clips[9].isRunning()) break;
|
|
||||||
panel.ui.slotCol++;
|
|
||||||
panel.playSE(9);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KeyEvent.VK_SPACE:
|
|
||||||
panel.player.selectItem();
|
|
||||||
break;
|
|
||||||
// EXIT STATE
|
// EXIT STATE
|
||||||
case KeyEvent.VK_C, KeyEvent.VK_ESCAPE:
|
case KeyEvent.VK_C, KeyEvent.VK_ESCAPE -> panel.gameState = GameState.PLAY;
|
||||||
panel.gameState = GameState.PLAY;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void handleGameOver(int code) {
|
private void handleGameOver(int code) {
|
||||||
@@ -183,6 +156,89 @@ public class KeyHandler implements KeyListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void handleTrade(int code) {
|
||||||
|
if(code == KeyEvent.VK_SPACE) spacePressed = true;
|
||||||
|
if(panel.ui.tradeState == UI.TradeState.SELECT) {
|
||||||
|
switch (code) {
|
||||||
|
case KeyEvent.VK_UP:
|
||||||
|
if (panel.ui.commandNum <= 0) break;
|
||||||
|
panel.ui.commandNum--;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
case KeyEvent.VK_DOWN:
|
||||||
|
if (panel.ui.commandNum >= 2) break;
|
||||||
|
panel.ui.commandNum++;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(panel.ui.tradeState == UI.TradeState.BUY) {
|
||||||
|
npcInventory(code);
|
||||||
|
if(code == KeyEvent.VK_ESCAPE) panel.ui.tradeState = UI.TradeState.SELECT;
|
||||||
|
}
|
||||||
|
if(panel.ui.tradeState == UI.TradeState.SELL) {
|
||||||
|
playerInventory(code);
|
||||||
|
if(code == KeyEvent.VK_ESCAPE) panel.ui.tradeState = UI.TradeState.SELECT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UTILITY
|
||||||
|
private void playerInventory(int code) {
|
||||||
|
switch (code) {
|
||||||
|
case KeyEvent.VK_UP:
|
||||||
|
if(panel.ui.playerSlotRow == 0) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.playerSlotRow--;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
case KeyEvent.VK_DOWN:
|
||||||
|
if(panel.ui.playerSlotRow == 3) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.playerSlotRow++;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
case KeyEvent.VK_LEFT:
|
||||||
|
if(panel.ui.playerSlotCol == 0) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.playerSlotCol--;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
case KeyEvent.VK_RIGHT:
|
||||||
|
if(panel.ui.playerSlotCol == 4) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.playerSlotCol++;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void npcInventory(int code) {
|
||||||
|
switch (code) {
|
||||||
|
case KeyEvent.VK_UP:
|
||||||
|
if(panel.ui.npcSlotRow == 0) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.npcSlotRow--;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
case KeyEvent.VK_DOWN:
|
||||||
|
if(panel.ui.npcSlotRow == 3) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.npcSlotRow++;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
case KeyEvent.VK_LEFT:
|
||||||
|
if(panel.ui.npcSlotCol == 0) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.npcSlotCol--;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
case KeyEvent.VK_RIGHT:
|
||||||
|
if(panel.ui.npcSlotCol == 4) break;
|
||||||
|
if(panel.sfx.clips[9].isRunning()) break;
|
||||||
|
panel.ui.npcSlotCol++;
|
||||||
|
panel.playSE(9);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// KEY-LISTENER
|
// KEY-LISTENER
|
||||||
@Override
|
@Override
|
||||||
@@ -197,6 +253,7 @@ public class KeyHandler implements KeyListener {
|
|||||||
case PAUSE -> handlePause(code);
|
case PAUSE -> handlePause(code);
|
||||||
case CHARACTER -> handleCharacter(code);
|
case CHARACTER -> handleCharacter(code);
|
||||||
case GAMEOVER -> handleGameOver(code);
|
case GAMEOVER -> handleGameOver(code);
|
||||||
|
case TRADE -> handleTrade(code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.awt.*;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class Entity {
|
public class Entity {
|
||||||
@@ -66,6 +67,8 @@ public class Entity {
|
|||||||
public Entity currentWeapon;
|
public Entity currentWeapon;
|
||||||
public Entity currentShield;
|
public Entity currentShield;
|
||||||
public Projectile projectile;
|
public Projectile projectile;
|
||||||
|
public ArrayList<Entity> inventory = new ArrayList<>();
|
||||||
|
public final int maxInvSize = 20;
|
||||||
|
|
||||||
// ITEM ATTRIBUTES
|
// ITEM ATTRIBUTES
|
||||||
public EntityType.WeaponType weaponType;
|
public EntityType.WeaponType weaponType;
|
||||||
@@ -74,6 +77,7 @@ public class Entity {
|
|||||||
public String description;
|
public String description;
|
||||||
public int useCost;
|
public int useCost;
|
||||||
public int value;
|
public int value;
|
||||||
|
public int price;
|
||||||
|
|
||||||
public Entity(GamePanel panel) {
|
public Entity(GamePanel panel) {
|
||||||
this.panel = panel;
|
this.panel = panel;
|
||||||
@@ -102,7 +106,7 @@ public class Entity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
spriteCounter++;
|
spriteCounter++;
|
||||||
if(spriteCounter > 12) {
|
if(spriteCounter > 24) {
|
||||||
if(spriteNum == 1) spriteNum = 2;
|
if(spriteNum == 1) spriteNum = 2;
|
||||||
else if(spriteNum == 2) spriteNum = 1;
|
else if(spriteNum == 2) spriteNum = 1;
|
||||||
else spriteNum = 0;
|
else spriteNum = 0;
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ import de.miaurizius.jgame2d.core.*;
|
|||||||
import de.miaurizius.jgame2d.core.enums.Direction;
|
import de.miaurizius.jgame2d.core.enums.Direction;
|
||||||
import de.miaurizius.jgame2d.core.enums.EntityType;
|
import de.miaurizius.jgame2d.core.enums.EntityType;
|
||||||
import de.miaurizius.jgame2d.core.enums.GameState;
|
import de.miaurizius.jgame2d.core.enums.GameState;
|
||||||
|
import de.miaurizius.jgame2d.core.enums.Map;
|
||||||
import de.miaurizius.jgame2d.core.handlers.KeyHandler;
|
import de.miaurizius.jgame2d.core.handlers.KeyHandler;
|
||||||
import de.miaurizius.jgame2d.entity.item.ShieldWoodObj;
|
import de.miaurizius.jgame2d.entity.item.ShieldWoodObj;
|
||||||
import de.miaurizius.jgame2d.entity.item.SwordNormalObj;
|
import de.miaurizius.jgame2d.entity.item.SwordNormalObj;
|
||||||
import de.miaurizius.jgame2d.entity.projectile.FireballObj;
|
import de.miaurizius.jgame2d.entity.projectile.FireballObj;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class Player extends Entity {
|
public class Player extends Entity {
|
||||||
|
|
||||||
@@ -20,8 +20,6 @@ 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);
|
||||||
@@ -264,7 +262,7 @@ public class Player extends Entity {
|
|||||||
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() {
|
public void selectItem() {
|
||||||
int itemIndex = panel.ui.getItemIndex();
|
int itemIndex = panel.ui.getItemIndex(panel.ui.playerSlotCol, panel.ui.playerSlotRow);
|
||||||
if(itemIndex >= inventory.size()) return;
|
if(itemIndex >= inventory.size()) return;
|
||||||
Entity selectedItem = inventory.get(itemIndex);
|
Entity selectedItem = inventory.get(itemIndex);
|
||||||
if(selectedItem.type == EntityType.WEAPON) {
|
if(selectedItem.type == EntityType.WEAPON) {
|
||||||
@@ -295,6 +293,11 @@ public class Player extends Entity {
|
|||||||
public void setDefaultValues() {
|
public void setDefaultValues() {
|
||||||
worldX = panel.tileSize * 23;
|
worldX = panel.tileSize * 23;
|
||||||
worldY = panel.tileSize * 21;
|
worldY = panel.tileSize * 21;
|
||||||
|
|
||||||
|
worldX = panel.tileSize * 12;
|
||||||
|
worldY = panel.tileSize * 12;
|
||||||
|
panel.currentMap = Map.HUT;
|
||||||
|
|
||||||
speed = 4;
|
speed = 4;
|
||||||
direction = Direction.DOWN;
|
direction = Direction.DOWN;
|
||||||
|
|
||||||
@@ -306,7 +309,7 @@ public class Player extends Entity {
|
|||||||
dexterity = 1;
|
dexterity = 1;
|
||||||
exp = 0;
|
exp = 0;
|
||||||
nextLevelExp = 5;
|
nextLevelExp = 5;
|
||||||
coins = 0;
|
coins = 500;
|
||||||
currentWeapon = new SwordNormalObj(panel);
|
currentWeapon = new SwordNormalObj(panel);
|
||||||
currentShield = new ShieldWoodObj(panel);
|
currentShield = new ShieldWoodObj(panel);
|
||||||
projectile = new FireballObj(panel);
|
projectile = new FireballObj(panel);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ public class AxeObj extends Entity {
|
|||||||
type = EntityType.WEAPON;
|
type = EntityType.WEAPON;
|
||||||
weaponType = EntityType.WeaponType.AXE;
|
weaponType = EntityType.WeaponType.AXE;
|
||||||
down1 = initEntitySprites("/objects/axe");
|
down1 = initEntitySprites("/objects/axe");
|
||||||
|
price = 50;
|
||||||
|
|
||||||
attackValue = 2;
|
attackValue = 2;
|
||||||
attackArea.width = 30;
|
attackArea.width = 30;
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ public class IronShieldObj extends Entity {
|
|||||||
type = EntityType.SHIELD;
|
type = EntityType.SHIELD;
|
||||||
down1 = initEntitySprites("objects/shield_blue");
|
down1 = initEntitySprites("objects/shield_blue");
|
||||||
defenseValue = 2;
|
defenseValue = 2;
|
||||||
|
|
||||||
|
price = 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ public class KeyObj extends Entity {
|
|||||||
description = "[" + name + "]\nIt opens a door.";
|
description = "[" + name + "]\nIt opens a door.";
|
||||||
type = EntityType.ITEM;
|
type = EntityType.ITEM;
|
||||||
down1 = initEntitySprites("objects/key");
|
down1 = initEntitySprites("objects/key");
|
||||||
|
|
||||||
|
price = 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ public class PotionObj extends Entity {
|
|||||||
name = "Red Potion";
|
name = "Red Potion";
|
||||||
down1 = initEntitySprites("objects/potion_red");
|
down1 = initEntitySprites("objects/potion_red");
|
||||||
description = "[" + name + "]\nHeals your life by " + value + ".";
|
description = "[" + name + "]\nHeals your life by " + value + ".";
|
||||||
|
|
||||||
|
price = 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void use(Entity entity) {
|
public void use(Entity entity) {
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ public class ShieldWoodObj extends Entity {
|
|||||||
type = EntityType.SHIELD;
|
type = EntityType.SHIELD;
|
||||||
down1 = initEntitySprites("objects/shield_wood");
|
down1 = initEntitySprites("objects/shield_wood");
|
||||||
defenseValue = 1;
|
defenseValue = 1;
|
||||||
|
|
||||||
|
price = 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public class SwordNormalObj extends Entity {
|
|||||||
type = EntityType.WEAPON;
|
type = EntityType.WEAPON;
|
||||||
weaponType = EntityType.WeaponType.SWORD;
|
weaponType = EntityType.WeaponType.SWORD;
|
||||||
down1 = initEntitySprites("objects/sword_normal");
|
down1 = initEntitySprites("objects/sword_normal");
|
||||||
|
price = 50;
|
||||||
|
|
||||||
attackValue = 1;
|
attackValue = 1;
|
||||||
attackArea.width = 36;
|
attackArea.width = 36;
|
||||||
|
|||||||
54
src/de/miaurizius/jgame2d/entity/npc/MerchantNPC.java
Normal file
54
src/de/miaurizius/jgame2d/entity/npc/MerchantNPC.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
package de.miaurizius.jgame2d.entity.npc;
|
||||||
|
|
||||||
|
import de.miaurizius.jgame2d.core.GamePanel;
|
||||||
|
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.entity.Entity;
|
||||||
|
import de.miaurizius.jgame2d.entity.item.*;
|
||||||
|
|
||||||
|
public class MerchantNPC extends Entity {
|
||||||
|
|
||||||
|
public MerchantNPC(GamePanel panel) {
|
||||||
|
super(panel);
|
||||||
|
type = EntityType.NPC;
|
||||||
|
name = "merchant-npc";
|
||||||
|
|
||||||
|
direction = Direction.DOWN;
|
||||||
|
speed = 0;
|
||||||
|
getImage();
|
||||||
|
setDialogue();
|
||||||
|
setItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void speak() {
|
||||||
|
super.speak();
|
||||||
|
panel.gameState = GameState.TRADE;
|
||||||
|
panel.ui.tradingNPC = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// SETTING THINGS UP
|
||||||
|
private void getImage() {
|
||||||
|
up1 = initEntitySprites("npc/merchant_down_1");
|
||||||
|
up2 = initEntitySprites("npc/merchant_down_2");
|
||||||
|
down1 = initEntitySprites("npc/merchant_down_1");
|
||||||
|
down2 = initEntitySprites("npc/merchant_down_2");
|
||||||
|
left1 = initEntitySprites("npc/merchant_down_1");
|
||||||
|
left2 = initEntitySprites("npc/merchant_down_2");
|
||||||
|
right1 = initEntitySprites("npc/merchant_down_1");
|
||||||
|
right2 = initEntitySprites("npc/merchant_down_2");
|
||||||
|
}
|
||||||
|
private void setDialogue() {
|
||||||
|
dialogue[0] = "He he, so you found me. \nI have some good stuff. \nDo you want to trade?";
|
||||||
|
}
|
||||||
|
private void setItems() {
|
||||||
|
inventory.add(new PotionObj(panel));
|
||||||
|
inventory.add(new KeyObj(panel));
|
||||||
|
inventory.add(new SwordNormalObj(panel));
|
||||||
|
inventory.add(new AxeObj(panel));
|
||||||
|
inventory.add(new ShieldWoodObj(panel));
|
||||||
|
inventory.add(new IronShieldObj(panel));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,25 +20,6 @@ public class OldManNPC extends Entity {
|
|||||||
setDialogue();
|
setDialogue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getImage() {
|
|
||||||
up1 = initEntitySprites("npc/oldman_up_1");
|
|
||||||
up2 = initEntitySprites("npc/oldman_up_2");
|
|
||||||
down1 = initEntitySprites("npc/oldman_down_1");
|
|
||||||
down2 = initEntitySprites("npc/oldman_down_2");
|
|
||||||
left1 = initEntitySprites("npc/oldman_left_1");
|
|
||||||
left2 = initEntitySprites("npc/oldman_left_2");
|
|
||||||
right1 = initEntitySprites("npc/oldman_right_1");
|
|
||||||
right2 = initEntitySprites("npc/oldman_right_2");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDialogue() {
|
|
||||||
dialogue[0] = "Hello, lad.";
|
|
||||||
dialogue[1] = "So you've come to this island to \nfind the treasure?";
|
|
||||||
dialogue[2] = "I used to be a great wizard but now... \nI'm a bit too old for taking an \nadventure.";
|
|
||||||
dialogue[3] = "Well, good luck on you.";
|
|
||||||
dialogue[4] = "I heard drinking the water of the \nholy lake makes you feel fine again...";
|
|
||||||
}
|
|
||||||
|
|
||||||
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 +31,23 @@ public class OldManNPC extends Entity {
|
|||||||
if(i > 75) direction = Direction.RIGHT;
|
if(i > 75) direction = Direction.RIGHT;
|
||||||
actionLock = 0;
|
actionLock = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SETTING THINGS UP
|
||||||
|
private void getImage() {
|
||||||
|
up1 = initEntitySprites("npc/oldman_up_1");
|
||||||
|
up2 = initEntitySprites("npc/oldman_up_2");
|
||||||
|
down1 = initEntitySprites("npc/oldman_down_1");
|
||||||
|
down2 = initEntitySprites("npc/oldman_down_2");
|
||||||
|
left1 = initEntitySprites("npc/oldman_left_1");
|
||||||
|
left2 = initEntitySprites("npc/oldman_left_2");
|
||||||
|
right1 = initEntitySprites("npc/oldman_right_1");
|
||||||
|
right2 = initEntitySprites("npc/oldman_right_2");
|
||||||
|
}
|
||||||
|
private void setDialogue() {
|
||||||
|
dialogue[0] = "Hello, lad.";
|
||||||
|
dialogue[1] = "So you've come to this island to \nfind the treasure?";
|
||||||
|
dialogue[2] = "I used to be a great wizard but now... \nI'm a bit too old for taking an \nadventure.";
|
||||||
|
dialogue[3] = "Well, good luck on you.";
|
||||||
|
dialogue[4] = "I heard drinking the water of the \nholy lake makes you feel fine again...";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user